K8S集群下的GPU调度
1 介绍
目前人工智能火热,各种机器学习、训练,免不了要使用到gpu资源。本文主要介绍K8S环境下,如何让POD使用Node上的GPU资源。
K8S本身实现了设备插件(Device Plugin),让 Pod 可以访问类似 GPU 这类特殊的硬件功能特性。
2 确定显卡型号
服务器安装好显卡后,可以在系统中查看到显卡的信息
某些情况下可能无法正确显示显卡型号,如上图2216为pci id,可以去下面的网站上查询pci id对应的显卡型号
https://admin.pci-ids.ucw.cz/mods/PC/10de?action=help?help=pci
3 安装N卡驱动
注:在安装Cuda Toolkit时会自动安装相应的显卡驱动。因此并不需要我们自己再下载安装显卡驱动。本节只是为了展示安装显卡驱动的方法。
https://www.nvidia.com/Download/Find.aspx
上述网站中找到对应显卡型号的驱动并下载
驱动是一个.run格式的可执行文件,赋予权限后直接安装即可
chmod +x NVIDIA-Linux-x86_64-550.54.14.run
bash NVIDIA-Linux-x86_64-550.54.14.run
如果安装过程中出现错误,需要根据相应的错误进行处理。安装完成后,执行nvidia-smi可查看到显卡相关信息。
4 安装Cuda Toolkit
CUDA是一个并行计算平台和编程模型,能够使得使用GPU进行通用计算变得简单和优雅。Cuda和驱动之间有相应的对应关系
https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html
所以如果是手动安装的nvidia显卡驱动,需要保证满足Cuda Toolkit版本的最低要求。例如,安装Cuda Toolkit 12.x版本,要求显卡驱动版本要高于525.60.13。如果未安装显卡驱动,在安装Cuda Toolkit时,会自动合适的显卡驱动版本。
选择对应的系统版本下载脚本进行安装
https://developer.nvidia.com/cuda-downloads
安装Cuda toolkit
wget https://developer.download.nvidia.com/compute/cuda/12.3.0/local_installers/cuda_12.3.0_545.23.06_linux.run
sudo sh cuda_12.3.0_545.23.06_linux.run
安装完成后显示如下
===========
= Summary =
===========
Driver: Installed
Toolkit: Installed in /usr/local/cuda-11.3/
Samples: Installed in /root/, but missing recommended libraries
Please m
ake sure that
- PATH includes /usr/local/cuda-11.3/bin
- LD_LIBRARY_PATH includes /usr/local/cuda-11.3/lib64, or, add /usr/local/cuda-11.3/lib64 to /etc/ld.so.conf and run ldconfig as root
To uninstall the CUDA Toolkit, run cuda-uninstaller in /usr/local/cuda-11.3/bin
To uninstall the NVIDIA Driver, run nvidia-uninstall
检查所安装的cuda版本
/usr/local/cuda/bin/nvcc -V
5 安装nvidia-container-toolkit并配置runtime
NVIDIA Container Toolkit 使用户能够在容器中使用GPU。该工具包包括一个容器运行时库和实用程序,用于自动配置容器以利用 NVIDIA GPU。
https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/index.html
5 .1 安装nvidia-container-toolkit
安装步骤可参考官方文档
https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html
安装完成后检查命令是否可以正常使用
nvidia-container-cli --version
5.2 配置runtime
sudo nvidia-ctk runtime configure --runtime=containerd
systemctl restart containerd
该命令会修改/etc/containerd/config.toml文件,使containerd能使用NVIDIA Container Runtime
6 安装Nvidia设备插件
官方教程
https://github.com/NVIDIA/k8s-device-plugin#quick-start ##N卡 https://github.com/ROCm/k8s-device-plugin#deployment ##A卡 https://intel.github.io/intel-device-plugins-for-kubernetes/cmd/gpu_plugin/README.html ##Intel
接下来就是在k8s中安装插件,使得pod能使用上gpu资源,可以参考官方教程,也可以直接使用helm安装
helm repo add nvdp https://nvidia.github.io/k8s-device-plugin
helm repo update
helm upgrade -i nvdp nvdp/nvidia-device-plugin \
--namespace nvidia-device-plugin \
--include-crds \
--create-namespace \
--version 0.14.3
检查pod是否运行正常,device-plugin会作为一个daemonset,在每个node上启动一个device-plugin的pod
kubectl get all -n nvidia-device-plugin
CrashLoopBackOff是因为对应的node节点上没有GPU设备,可忽略
7 pod使用gpu
https://kubernetes.io/zh-cn/docs/tasks/manage-gpus/scheduling-gpus/
编辑pod的yaml文件,request处写好需要的gpu资源
#此处省略部分内容
resources:
limits:
cpu: "1"
memory: 2Gi
nvidia.com/gpu: "1" ##表示请求一个gpu
requests:
cpu: "1"
memory: 2Gi
nvidia.com/gpu: "1"
apply上述yaml文件,可以看到pod已经正常加载了gpu资源
可以通过给有gpu卡的node打上label,创建pod时使用selector,保证pod正常调度上有GPU卡的Node上。
关注公众号 singless,获取更多有价值的文章
浙公网安备 33010602011771号