如何在k8s集群中安装nvidia、cuda并使用GPU进行训练

本文详述在已有k8s集群的CentOS系统中安装NVIDIA GPU、CUDA、cuDNN的过程,包括安装GCC、确认硬件、安装驱动、CUDA和cuDNN,以及设置nvidia-docker的步骤。文章总结了安装过程中的常见问题和解决方案,适合GPU使用初学者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何在k8s集群中安装nvidia、cuda并使用GPU进行训练

在写具体步骤前,发表一下自己的感想体会,因为在这过程中,踩过很多坑,对于像我们这种小白,踩坑真的是无处不在,真的很感谢网上一些大神细心地帮助,也感谢其它大神分享的博客。所以自己实现之后也想把这过程中遇到的坑和解决的方法总结总结,希望对大家有用。

本文主要是针对已经部署好了k8s集群的,基于centos系统,截止k8s 1.8版本,对GPU的使用支持还是停留在实验阶段,只支持nvidia的GPU,在k8s上使用GPU,先要装好几样东西。

安装流程:

1、关闭UEFI。这个很重要,因为如果不关闭可能会导致安装nvidia驱动的时候无法加载kernel模块,我就在这浪费了好多时间。具体做法是开机按F2进入BIOS设置,通常在BOOT或Secure选项卡上,把安全启动[Secure BOOT],改为[Disable],如果不是的话自己去搜搜相应的。

2、确认自己主机有nvidia的显卡。

输入命令lspci | grep -i nvidia 查看nvidia显卡情况。

3、检查系统版本,确保系统支持(需要Linux-64bit系统)

#uname -m && cat /etc/*release

4、根据nvidia显卡的信息和系统下载相应的安装包。

NVIDIA-Linux-x86_64-381.22.run # 最新显卡驱动

cuda_9.0.61_375.26_linux.run # 最新CUDA安装包

cudnn-8.0-linux-x64-v6.0.tgz # cudnn库v6.0

(1)登录NVIDIA官网http://www.geforce.cn/drivers设置驱动检索条件(注意尽量设置语言英文):

(2)官网下载cuda-rpm包https://developer.nvidia.com/cuda-downloads,一定要对应自己的版本。

(3)下载cudnn需要注册https://developer.nvidia.com/rdp/cudnn-download,注意有些浏览器是注册不了的,我就踩了这个坑。

5、安装gcc gcc-c++

#yum install gcc gcc-c++

6、查看内核是否一致。

#uname -r 

#rpm -q kernel-devel

#rpm -q kernel-headers

如果一致的话这步可以跳过,输入rpm -q kernel-devel时有可能是not found,说明没有安装,有显示说明已安装。

安装kernel-devel和kernel-headers。

#sudo yum install kernel-devel-$(uname -r) kernel-headers-$(uname -r)

或者

#yum install kernel-devel

#yum install kernel-headers

如果安装完发现不一致的话需要 yum -y update

7、安装cuda(最好是先安装好这个再去安装驱动,不然会nvidia的安装不会很顺利,我就踩了这个坑。)

#sudo rpm -i cuda-repo-rhel7-8-0-local-ga2-8.0.61-1.x86_64.rpm

#sudoyum clean all

#sudoyuminstall cuda

可能会报错,

(1)原因是缺少2个包,装第一个:

#sudo vim /etc/yum.repos.d/linuxtech.testing.repo

输入:

[linuxtech-testing]

name=LinuxTECH Testing

baseurl=http://pkgrepo.linuxtech.net/el6/testing/

enabled=0

gpgcheck=1

gpgkey=http://pkgrepo.linuxtech.net/el6/release/RPM-GPG-KEY-LinuxTECH.NET

<think>我们正在处理用户的问题:如何将配置GPU的节点加入Kubernetes集群验证其可用性。根据引用内容,我们可以总结出以下步骤:1.确保节点已安装NVIDIA驱动(引用[1]提到在worker主机上安装Nvidia驱动)。2.安装容器运行时(如Docker)配置其使用NVIDIA容器运行时(引用中没有直接提到,但这是必要步骤)。3.安装NVIDIA设备插件(引用[3]提到安装k8s-device-plugin,引用[4]也提到了Kubernetes中的GPU配置)。4.节点加入Kubernetes集群(引用[1]提到至少一个具有GPU的工作节点连接到集群)。5.验证GPU资源是否被Kubernetes识别(引用[2]描述了Kubernetes的GPU调度流程,包括节点注册、资源请求等)。我们将按照这些步骤详细说明。注意:引用[2]还提到了亲和调度,但这里我们主要关注基本配置和验证。步骤分解:1.安装NVIDIA驱动(在GPU节点上执行)在节点上安装GPU型号匹配的NVIDIA驱动。安装方法根据操作系统不同而异(例如Ubuntu可以使用`apt`,CentOS使用`yum`)。2.安装容器运行时(如Docker)配置nvidia-container-runtime安装Docker后,需要配置Docker使用`nvidia-container-runtime`作为默认运行时,以便容器能够访问GPU设备。具体步骤:-安装nvidia-container-runtime(参考NVIDIA官方文档)-修改Docker配置文件(通常为`/etc/docker/daemon.json`),添加:```json{"default-runtime": "nvidia","runtimes": {"nvidia": {"path":"/usr/bin/nvidia-container-runtime","runtimeArgs":[]}}}```-重启Docker服务。3.安装NVIDIA设备插件(在Kubernetes集群中部署)引用[3]提供了GitHub链接:https://github.com/NVIDIA/k8s-device-plugin我们可以通过DaemonSet部署设备插件:```bashkubectlcreate -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.14.1/nvidia-device-plugin.yml```注意:版本号可能会更新,请参考官方仓库获取最新版本。4.将节点加入Kubernetes集群使用kubeadm或其他工具将节点加入集群(此步骤假设集群已经初始化,且节点满足加入集群的条件)。5.验证节点上的GPU资源在节点加入集群后,检查节点是否报告了GPU资源:```bashkubectldescribe node<节点名称>```在输出的`Capacity`和`Allocatable`部分,应该可以看到类似`nvidia.com/gpu:1`的字段(数字表示可用GPU数量)。6.部署测试Pod验证GPU可用性创建一个Pod,请求GPU资源,运行一个简单的CUDA程序来验证。示例Pod定义(gpu-test-pod.yaml):```yamlapiVersion: v1kind: Podmetadata:name: gpu-test-podspec:containers:- name: cuda-containerimage:nvcr.io/nvidia/cuda:11.0-basecommand: ["/bin/sh","-c"]args:["nvidia-smi;whiletrue;do sleep86400;done"]resources:limits:nvidia.com/gpu:1restartPolicy:Never```部署检查日志:```bashkubectl apply-fgpu-test-pod.yamlkubectllogs gpu-test-pod```如果成功,日志将显示`nvidia-smi`的输出,即GPU信息。注意事项:-确保Kubernetes版本与NVIDIA设备插件版本兼容。-节点操作系统、驱动版本、CUDA版本等需要匹配。引用标识:[^1]:引用自安装Nvidia驱动的步骤[^2]:引用自Kubernetes的GPU调度流程[^3]:引用自安装k8s-device-plugin的文档[^4]:引用自Kubernetes中GPU的配置说明生成相关问题:1.如何解决Kubernetes节点无法识别GPU的问题?2.如何指定Pod使用特定的GPU型号?3. Kubernetes中GPU资源调度有哪些高级配置?</think>### 如何将配置 GPU 的节点加入 Kubernetes 集群验证可用性 #### **完整配置流程** 1. **安装 NVIDIA 驱动**(在 GPU 节点操作) ```bash # Ubuntu 示例(版本需匹配 GPU 型号) sudo apt install -y nvidia-driver-535 sudo reboot ``` 验证驱动安装: ```bash nvidia-smi # 应显示 GPU 状态 ``` 2. **配置容器运行时** 安装 `nvidia-container-toolkit`: ```bash distribution=$(. /etc/os-release;echo $ID$VERSION_ID) curl -s -L https://nvidia.github.io/libnvidia-container/gpgkey | sudo apt-key add - curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list sudo apt update && sudo apt install -y nvidia-container-toolkit ``` 配置 Docker(`/etc/docker/daemon.json`): ```json { "default-runtime": "nvidia", "runtimes": { "nvidia": { "path": "/usr/bin/nvidia-container-runtime", "runtimeArgs": [] } } } ``` 重启服务: ```bash sudo systemctl restart docker ``` 3. **安装 Kubernetes 设备插件**(集群操作) 部署 NVIDIA Device Plugin: ```bash kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.14.1/nvidia-device-plugin.yml ``` > 该插件使 Kubernetes 能识别 GPU 资源 [^3]。 4. **将节点加入集群** 使用 `kubeadm join` 命令(具体命令从 Master 节点获取): ```bash sudo kubeadm join <MASTER_IP>:6443 --token <TOKEN> --discovery-token-ca-cert-hash <HASH> ``` #### **验证 GPU 可用性** 1. **检查节点资源** ```bash kubectl describe node <GPU_NODE_NAME> ``` 输出中应包含: ```yaml Capacity: nvidia.com/gpu: 2 # GPU 数量 Allocatable: nvidia.com/gpu: 2 ``` 2. **部署测试 Pod** ```yaml apiVersion: v1 kind: Pod metadata: name: gpu-test-pod spec: containers: - name: cuda-container image: nvcr.io/nvidia/cuda:12.0.0-base command: ["/bin/sh", "-c"] args: ["nvidia-smi && sleep 86400"] resources: limits: nvidia.com/gpu: 1 # 请求 GPU 资源 nodeSelector: kubernetes.io/hostname: <GPU_NODE_NAME> # 指定节点 ``` 检查日志: ```bash kubectl logs gpu-test-pod | grep "GPU Memory" # 输出应包含 GPU 信息,例如:"| 0 GPU | 100% Default |" ``` #### **关键注意事项** - **驱动兼容性**:NVIDIA 驱动版本需与 Kubernetes 设备插件匹配 [^1]。 - **资源调度**:通过 `resources.limits` 声明 GPU 需求,调度器会自动分配 [^2]。 - **亲和性调度**:使用 `nodeAffinity` 可指定 GPU 类型(如 A100/V100)[^4]: ```yaml affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: nvidia.com/gpu.product operator: In values: [Tesla-V100-SXM2-32GB] ``` --- ### **相关问题** 1. Kubernetes 中如何实现多 GPU 卡的分片分配(如 MIG 技术)? 2. 当 GPU 节点无法被集群识别时,应如何排查问题? 3. 如何通过 Prometheus 监控 Kubernetes 集群GPU 使用率? 4. GPU 节点在 Kubernetes 中如何实现弹性伸缩(Cluster Autoscaler)? [^1]: 需在 worker 主机安装 Nvidia 驱动以确保硬件识别 [^2]: Kubernetes 调度器通过 Device Plugin 机制分配 GPU 资源 [^3]: NVIDIA k8s-device-plugin 是 Kubernetes 管理 GPU 的核心组件 [^4]: 可通过节点标签实现精细化的 GPU 调度策略
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值