写点什么

在 GCP 搭建使用 NVIDIA GPU 做机器学习的 K8S 集群

  • 2021-03-24
  • 本文字数:1665 字

    阅读完需:约 5 分钟

在 GCP 搭建使用 NVIDIA GPU 做机器学习的 K8S 集群

本文介绍如何使用 NVIDIA 官方推荐工具和 K8S 插件,在谷歌云 GCP 的虚机上搭建用于机器学习任务的带显卡 K8S 集群。

 

另外,也介绍了如何更新 K8S 插件,来解决当带显卡 Node 维护重启时,由于 GPU ID 发生变化而导致训练任务无法继续的问题。该问题的描述可以参考在线记录。注意,该问题在使用各公有云虚机时都可能发生,触发原因是虚机维护重启后,从一台宿主机迁移到另一台宿主机,所配置的显卡实例也随之改变,显卡 ID 变化,而 NVIDIA K8S 插件在 0.9.0 版本之前不能容忍这个变化,而导致上层 Tensorflow 等应用无法在重启后获取到显卡。此问题在谷歌云 GKE 环境中不会发生,因为谷歌云 GKE 使用的是定制版插件。

 

本文搭建一个包含一台 Master 和一台 Node 的 K8S 集群,其中 Node 上配置一块 NVIDIA T4 显卡。之后复现显卡 ID 问题,并介绍升级环境解决问题的步骤。

创建虚机实例

 

在谷歌云控制台创建以下配置的虚机。注意确认使用的项目和区域有充足的 CPU 和 GPU quota。

●      一台 Master 节点

○      k8s-m

○      n1-standard-1

○      Ubuntu LTS 16.04

 

●      一台 Node 节点

○      k8s-t4-node

○      n1-standard-1

○      Ubuntu LTS 16.04

○      T4 GPU

创建完后确认 master 和 node 都运行正常。

搭建 K8S 集群

 

参考 NVIDIA 官方文档

https://docs.nvidia.com/datacenter/cloud-native/kubernetes/install-k8s.html#option-1-installing-kubernetes-using-deepops

以及 DeepOps 文档

https://github.com/NVIDIA/deepops/tree/master/docs/k8s-cluster

首先,登录到 k8s-m,执行以下命令安装 Ansible 工具

下载并初始化 DeepOps 脚本

创建 SSH 密钥对,并将公钥配置为 Node 的允许密钥。注意要将私钥配置为其它用户不可访问。

参照下面截图更改 Ansible 配置文件,指定 K8S 的 master 和 node 信息,以及密钥对信息



验证 Ansible 配置


启动 Ansible 来安装 K8S 集群

安装完成后,用下面命令来验证集群运行正常


在 gpu01 节点上运行以下命令确认容器环境可以识别到显卡。

注意:Image 版本需要参考官方文档

至此,K8S 集群安装完毕。现在可以部署机器学习训练或预测任务在此集群。

复现节点重启后 GPU Device ID 变化问题

 

在刚搭建好的 K8S 集群 master 上查看 NVIDIA K8S Plugin 的版本




根据输出,此集群上使用的 NVIDIA K8S 插件为 0.7.0 版本。此版本会产生重启后显卡 Device ID 变化而找不到显卡的问题。

 

查看当前显卡 Device ID 。

 



用下面命令用序号查看显卡设备。

 


安装并运行测试程序容器 nvidia-loop 。其功能是持续占用显卡并不断打印 GPU Device ID 。

 


查看 nvidia-loop 的日志

 


以上命令都应该成功无错。到此都不会出现任何问题。

 

使用以下命令模拟 GCP 虚机维护事件。

 


命令完成后 1 小时,节点会进行重启( 1 小时延迟因为需要完成一个重启前一小时的通知消息)。重启后 node 虚机应该会迁移到另一台宿主机并配置不同 ID 的显卡。此时可以登录到 Node 来查看 GPU Device ID。

 


也可以使用 cuda 镜像来测试在容器内获取 GPU Device ID,也一样发生了变化

可以看到 Device ID 发生了变化。

 

此时查看 nvidia-loop 容器的状态,由于 Device UUID 发生了变化,导致不断 crash。

 


查看 pod 描述,可以看到具体错误为 UUID 变化。

 


修复节点重启后 GPU Device ID 变化问题

 

下面步骤验证 NVIDIA K8S Plugin release 0.9.0 修复了节点重启后 Device ID 变化的问题。

 

首先安装 NVIDIA K8S Plugin 的 0.9.0 版本,并删除之前版本。

 


确认安装成功

 


更新 Node 上 nvidia-runtime 的配置文件,允许 volume mount (否则测试容器 nvidia-loop 会运行失败)。

现在 K8S 插件更新完毕。可以验证问题修复。

 

再次使用以下命令模拟 GCP 虚机维护事件。



等一小时后维护重启完成后,查看 nvidia-loop 容器状态,应该是 Running,而不会再因为维护重启而导致崩溃。

 


也可以查看 nvidia-loop 的日志,确保输出 ID 正常。

 

kubectl logs nvidia-loop --tail=5

参考文档

 

[1] Using the GPU id instead of uuid in the NVIDIA device plugin

2021-03-24 17:451974

评论

发布
暂无评论
发现更多内容

一文走进 SQL 编译-语义解析

KaiwuDB

KaiwuDB SQL编译

源生创新 云享未来|GOTC全球开源技术峰会华为云云原生精彩时刻

华为云开发者联盟

云原生 后端 华为云 华为云开发者联盟 企业号 6 月 PK 榜

什么是低代码(Low-Code)?

优秀

低代码 低代码Low-Code 低代码是什么

面试官:如何实现开关降级

互联网架构师小马

Java sentinel aop 开关降级

程序员晋升指南!13年顶级架构设计经验的锦囊妙计与实践分享

互联网架构师小马

Java 架构

破防了!阿里用17个真实企业级项目阐述Java系统分析与架构设计

互联网架构师小马

Java 架构设计 系统分析

从分布式到微服务解密“架构”原理与实战笔记

小小怪下士

Java 程序员 分布式 微服务

TCMalloc 技术细节详解

KaiwuDB

KaiwuDB TCMalloc

当GaussDB遇上了毕昇编译器

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 6 月 PK 榜

【有奖调研】互联网新型社交,华为在找“元服务搭子”,快来集合!

HarmonyOS SDK

HMS Core

今年LED显示屏市场趋势

Dylan

商业 广告 娱乐 数字化 LED显示屏

Navicat Premium将关系和实体添加到概念模型的方法

背包客

macos MySQL 数据库 Mac 软件 Navicat Premium

CloudOps自动化运维套件助力企业更好上云、用云、管云

阿里云弹性计算

云计算 大数据 阿里云 物联网

人民日报:天翼云持续拓展云网基础设施覆盖广度和深度

天翼云开发者社区

云计算

政务云建设提速,天翼云夯实智慧政务数字底座

天翼云开发者社区

云计算 大数据

对线面试官-线程池(四)

派大星

Java 面试题

MySQL 8.0.29 instant DDL 数据腐化问题分析

GreatSQL

greatsql greatsql社区

AIGC时代,设计软件应该做什么?丨AIGC X 企业服务

ToB行业头条

低代码赛道拥挤 生态聚合成为破局关键

力软低代码开发平台

集结开发者力量,6月17日华为开发者联创日·深圳站即将启航!

说山水

揭秘Spring依赖注入和SpEL表达式

华为云开发者联盟

开发 华为云 华为云开发者联盟 企业号 6 月 PK 榜

Sentinel熔断降级的规则及实现原理

互联网架构师小马

Java sentinel 熔断降级

如何理解 REST 和 RPC 之间的差异?

Apifox

程序员 RPC Rest 协议 RPC调用

KW 新闻 | KaiwuDB 亮相数字中国并发布离散制造场景解决方案

KaiwuDB

数字中国 KaiwuDB 离散制造业解决方案

在百度生态用达人营销赋能品牌生意增长 | 度星选白皮书

说山水

电路板电镀中4种特殊的电镀方法

华秋PCB

经验 电路板 焊接 PCB板 电镀

抓包分析RST信号

蓝胖子的编程梦

TCP Wireshark tcpdump RST 报文 Connection reset

微服务高并发:授权与系统自适应功能的实现原理

互联网架构师小马

授权 系统自适应

参与赢大奖!阿里云机器学习平台PAI助力开发者激发AIGC潜能

阿里云大数据AI技术

阿里云 AIGC

正式启动|2023中国高校计算机大赛—大数据挑战赛火热报名中!

云智慧AIOps社区

大数据 AI 算法 运维 智能运维

在 GCP 搭建使用 NVIDIA GPU 做机器学习的 K8S 集群_语言 & 开发_于有志_InfoQ精选文章