网站首页 > 教程文章 正文
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,获取更多有价值的文章
猜你喜欢
- 2025-06-09 Kubernetes(k8s)pod详解(k8s pod completed)
- 2025-06-09 超详细!基于k8s+docker+jenkins的一站式 DevOps 环境搭建教程-下
- 2025-06-09 一键部署k8s多、单集群命令(波哥亲测有效)
- 2025-06-09 k8s平台:手动部署Grafana(k8s部署consul)
- 2025-06-09 K8s 应用的网络可观测性: Cilium VS DeepFlow
- 2025-06-09 k8s安全相关特性汇总(k8s的主要组件有哪些?)
- 2025-06-09 K8S调试利器:telepresence2使用文档
- 2025-06-09 别被云原生忽悠了:接地气的 K8s 生产落地长这样
- 2025-06-09 不努力提高效率,小姐姐都被人追走了:K8S一键部署了解一下?
- 2025-06-09 硬核资源!阿里内部强推IntelliJ IDEA 中的常用配置,还不赶紧收藏
- 最近发表
-
- 第十三章:Python在Web开发中的应用
- python mysql 连接池(django mysql连接池)
- Python | SQL库:MySQL(python连接mysql数据库环境搭建)
- 使用Python来实现MySQL与PostgerSQL之间的数据实时同步?
- 申请免费域名SSL,为NAS和个人网站加密
- Cloudflare配置CDN+SSL+代理(cloudflare国内代理)
- Halo博客搭建(halo博客搭建失败怎么办)
- 我用三年踩坑才摸懂建站这事儿独立站新手别闭眼冲
- 30 分钟搞定 Docker 安装与 Nginx 部署,轻松搭建高效 Web 服务
- 免费通配符ssl证书的申请指南——从申请到启动https
- 标签列表
-
- location.href (44)
- document.ready (36)
- git checkout -b (34)
- 跃点数 (35)
- 阿里云镜像地址 (33)
- qt qmessagebox (36)
- mybatis plus page (35)
- vue @scroll (38)
- 堆栈区别 (33)
- 什么是容器 (33)
- sha1 md5 (33)
- navicat导出数据 (34)
- 阿里云acp考试 (33)
- 阿里云 nacos (34)
- redhat官网下载镜像 (36)
- srs服务器 (33)
- pico开发者 (33)
- https的端口号 (34)
- vscode更改主题 (35)
- 阿里云资源池 (34)
- os.path.join (33)
- redis aof rdb 区别 (33)
- 302跳转 (33)
- http method (35)
- js array splice (33)