2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

在 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:452214

评论

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

了不起!靠技术脱贫,他们只用了短短两年!

华为云开发者联盟

人工智能 华为 技术

老师讲的真棒!总结2020年最全180道Android岗面试题,Android校招面试指南

欢喜学安卓

android 程序员 面试 移动开发

开发者,别让自己孤独

阿里巴巴云原生

开源 开发者 云原生 OAM CloudNative

加密货币可能是人类历史上最大的/富国银行报告:加密货币投资像19世纪50年代的早期淘金热财富转移

CECBC

数字货币

终于拿到蚂蚁金服Offer!!!分享一下全程面试题和面试经验!

小Q

Java 学习 编程 架构 面试

只需三步!慢日志去无踪

数据君

数据库

深入Linux内核架构——进程虚拟内存

赖猫

c++ Linux

案件数同比下降七成 北京引入“区块链”化解物业纠纷

CECBC

区块链 法律

JVM调优不知道怎么回答,阿里总结四大模块,学不会就背过来

小Q

Java 学习 架构 面试 JVM

深入浅出 WebRTC AEC(声学回声消除)

阿里云CloudImagine

阿里云 音视频 WebRTC 音频技术 视频云

疫情之下,被公司优化掉!同事大部分都去了创业型的公司,而我仅仅一年经验,却斩获多家大厂offer

Java~~~

Java 面试 架构师技能

Gemini双子新约系统软件开发|Gemini双子新约APP开发

系统开发

观点|发展区块链金融,长三角如何建设“四梁八柱”

CECBC

区块链

数据库面试要点:关于MySQL数据库千万级数据查询和存储

华为云开发者联盟

数据库 sql 存储

得不到提升的开发老鸟,试试这3个方法,让你事半功倍!

Linux服务器开发

程序员 后端 互联网人 底层应用开发 Linux服务器开发

高并发下,如何让你的数据库再快一点?

数据君

数据库

http client 中的 connectionRequestTimeout, connectTimeout, socketTimeout

不在调上

架构师训练营第 1 期 - 第 11周 - 学习总结

wgl

极客大学架构师训练营

关于Redis分布式锁这一篇应该是讲的最好的了,赶紧收藏起来

比伯

Java 编程 架构 面试 技术宅

老师讲的真棒!阿里P7级别面试经验总结,终获offer

欢喜学安卓

android 程序员 面试 移动开发

诚招译者 | Bruce Eckel On Java 8 中文版

图灵社区

Java

DolphinDB与Pandas对于大文本文件处理的性能对比

DolphinDB

数据库 pandas tsdb 数据库选择 DolphinDB

企业面临大危机,CRM崩溃告急,程序员竟用特殊手段化解危机!

Learun

敏捷开发 CRM

Redis为什么这么快?

数据君

redis

专访 CNCF 大使张磊:让云原生不再是大厂专属

阿里巴巴云原生

开源 开发者 云原生 OAM CloudNative

IO问题成顽疾,鹅厂专家来教你

数据君

数据库

一道腾讯面试题目:没有listen,能否建立TCP连接

linux大本营

c++ Linux TCP 后台开发 TCP/IP

关于Kubernetes和Docker关系的八个问题

杨明越

电信新报告 | 数字化转型:搁置还是加速?

VoltDB

5G安全 通信 电子信息

快速学会!啃完999页Android面试高频宝典,挥泪整理面经

欢喜学安卓

android 程序员 面试 移动开发

TensorFlow2 Fashion-MNIST图像分类(二)

书豪

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