云计算、AI、云原生、大数据等一站式技术学习平台

网站首页 > 教程文章 正文

K8S集群下的GPU调度(k8s pod调度过程详解)

jxf315 2025-06-09 22:55:50 教程文章 13 ℃

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,获取更多有价值的文章

最近发表
标签列表