怎么在Kubernetes集群中利用GPU进行人工智能训练

  介绍

本篇内容介绍了“怎么在Kubernetes集群中利用GPU进行人工智能训练”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!


注意事项

截止Kubernetes 1.8版本:

<李>

对GPU的支持还只是实验阶段,仍停留在阿尔法特性,意味着还不建议在生产环境中使用Kubernetes管理和调度GPU资源。

<李>

只支持NVIDIA GPU。

<李>

豆荚不能共用同一块GPU,即使同一个豆荚内不同的容器之间也不能共用同一块GPU。这是Kubernetes目前对GPU支持最难以接受的一点。因为一块PU价格是很昂贵的,一个训练进程通常是无法完全利用满一块GPU的,这势必会造成GPU资源的浪费。

<李>

每个容器请求的GPU数要么为0,要么为正整数,不允许为为分数,也就是说不支持只请求部分GPU。

<李>

无视不同型号的GPU计算能力,如果你需要考虑这个,那么可以考虑使用NodeAffinity来干扰调度过程。

<李>

只支持码头工人作为容器运行时,才能使用GPU,如果你使用rkt等,那么你可能还要再等等了。

逻辑图

目前,Kubernetes主要负责GPU资源的检测和调度,真正跟NVIDIA驱动通信的还是码头工人,因此整个逻辑结构图如下:

怎么在Kubernetes集群中利用GPU进行人工智能训练

让kubelet发现GPU资源并可被调度

<李>

请确认Kubernetes集群中的GPU服务器已经安装和加载了NVIDIA驱动程序,可以使用<代码> nvidia-docker-plugin> <李>

如何安装,请参考nvidia-docker 2.0安装。

<李>

如何确定NVIDIA驱动程序准备好了呢?执行命令<代码> kubectl得到节点GPU_Node_Name美元- o yaml> .status.capacity.alpha.kubernetes。io/nvidia GPU: $ Gpu_num> <李>

请确认<代码> kube-apiserver, kube-controller-manager, kube-scheduler, kubelet, kube-proxy 每个组件的<代码>——feature-gates 标记中都包含<代码>加速器=true> kube-proxy>

<强>注意在BIOS里面检查你的UEFI是否开启,如果开启的话请立马关掉它,否则nvidia驱动可能会安装失败。

关注nvidia k8s-device-plugin

如果你使用的是Kubernetes 1.8,那么也可以利用<代码> Kubernetes装置插件>

 apiVersion:扩展/v1beta1
  :DaemonSet
  元数据:
  名称:才能nvidia-device-plugin-daemonset
  规范:
  模板:才能
  ,,,元数据:
  ,,,,,标签:
  ,,,,,,,名字:nvidia-device-plugin-ds
  ,,,规范:
  ,,,,,的容器:
  ,,,,,神;形象:nvidia-device-plugin: 1.0.0
  ,,,,,,,名字:nvidia-device-plugin-ctr
  ,,,,,,,imagePullPolicy:从来没有
  ,,,,,,,env:
  ,,,,,,,,,今天早上,名字:NVIDIA_VISIBLE_DEVICES
  ,,,,,,,,,,,的值:所有
  ,,,,,,,,,今天早上,名字:NVIDIA_DRIVER_CAPABILITIES
  ,,,,,,,,,,,的值:实用程序,计算
  ,,,,,,,volumeMounts:
  ,,,,,,,,,今天早上,名字:device-plugin
  ,,,,,,,,,,,mountPath:,/var/lib/kubelet/device-plugins
  ,,,,,卷:
  ,,,,,,,今天早上,名字:device-plugin
  ,,,,,,,,,hostPath:
  ,,,,,,,,,,,路径:,/var/lib/kubelet/device-plugins 

关于Kubernetes装置插件,后面有机会我再单独写一篇博文来深入分析。

如何在豆荚中使用GPU

不同于cpu和内存,你必须强制显式申明你打算使用的GPU,通过在容器的<代码> resources.limits> alpha.kubernetes.io/nvidia GPU>

:豆荚
  apiVersion: v1
  元数据:
  名称:才能gpu-pod
  规范:
  容器才能:
  之处,才能名称:gpu-container-1
  ,,,的形象:gcr.io/google_containers/暂停:2.0
  ,,,资源:
  ,,,,,限制:
  ,,,,,,,alpha.kubernetes.io/nvidia gpu: 1
  ,,,volumeMounts:
  ,,,什么;mountPath:/usr/地方/nvidia
  ,,,,,名字:nvidia
  卷才能:
  个女人才能;hostPath:
  ,,,路径:,/var/lib/nvidia-docker/卷/nvidia_driver/384.98
  ,,,名字:,nvidia 

怎么在Kubernetes集群中利用GPU进行人工智能训练