本篇内容介绍了“怎么在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驱动通信的还是码头工人,因此整个逻辑结构图如下:
让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> 代码,则说明kubelet已经成功通过司机识别到了本地的GPU资源。
李>请确认<代码> 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装置插件> 代码这一阿尔法特性,让第三方设备插件发现和上报资源信息给kubelet, Nividia有对应的插件,请参考英伟达k8s-device-plugin.nvidia k8s-device-plugin通过DaemonSet方式部署到GPU服务器中、下面是其yaml描述文件内容:
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> 代码为你想要使用的GPU数,通过设置为1就已经足够了,应该没多少训练场景一个工人需要独占几块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进行人工智能训练