说明:2024/04/08 nvidia-container-runtime,现在叫 nvidia-container-toolkit
gpu共享技术(提高资源利用率):
时间分片Time-Slicing
多实例 GPU (MIG)
多进程服务 (MPS)
启动服务
nvidia-cuda-mps-control -d
ps -ef | grep mps
关闭服务
echo quit | nvidia-cuda-mps-control
1、GPU 节点必须安装NVIDIA 驱动,下载地址如下,并运行sh 安装
wget https://cn.download.nvidia.com/tesla/450.80.02/NVIDIA-Linux-x86_64-450.80.02.run
2、查看是否安装成功
nvidia-smi
#docker 容器运行时
3、安装nvidia-container-toolkit工具,添加 NVIDIA 容器运行时的官方存储库 #这个是支持nvidia显卡运行的容器运行时,默认的docker运行时是runc,该模块提供docker使用gpu资源的能力
curl -s -L https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo | \
sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo
#更新缓存
yum clean all && yum makecache
4、安装nvidia-container-toolkit软件包并重新加载Docker守护程序配置
#先备份daemon.json 防止之前的配置丢失
cp -a /etc/docker/daemon.json /etc/docker/daemon.json.bak
sudo yum install -y nvidia-container-toolkit
pkill -SIGHUP dockerd
5、docker nvidia-container-runtime 运行时配置
vim /etc/docker/daemon.json
"default-runtime": "nvidia",
"runtimes": {
"nvidia": {
"path": "/usr/bin/nvidia-container-runtime",
"runtimeArgs": []
}
}
#官方命令配置
nvidia-ctk runtime configure --runtime=docker --config=/etc/docker/daemon.json
#查看nvidia-container-toolkit版本
nvidia-container-toolkit --version
6、重启docker 服务
systemctl daemon-reload
systemctl restart docker
#containerd 容器运行时
7、添加 NVIDIA 容器运行时的官方存储库
curl -s -L https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo | \
sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo
8、安装nvidia-container-toolkit
sudo yum install -y nvidia-container-toolkit
9、配置 Containerd 使用 nvidia-container-runtime
cat /etc/containerd/config.toml
搜索 plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc
runtime_type = "io.containerd.runc.v2" 改成 io.containerd.runtime.v1.linux
搜索 io.containerd.runtime.v1.linux
runtime = "runc" 改成runtime = "nvidia-container-runtime"
#官方命令配置
nvidia-ctk runtime configure --runtime=containerd
10、重启 containerd 服务
systemctl daemon-reload
systemctl restart containerd
11、部署 NVIDIA设备插件 #这个插件用来和k8s集成,该模块提供k8s集群通过kubelet动态调度gpu资源的能力
kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/1.0.0-beta4/nvidia-device-plugin.yml
或者安装 NVIDIA GPU Operator,适用K8S版本 1.23版本以上
#添加 NVIDIA Helm repository
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia && helm repo update
#安装 GPU Operator【只支持MIG 模式】
使用默认配置文件,禁用自动安装显卡驱动功能【节点已安装GPU驱动的情况下】,安装 GPU Operator
helm install -n gpu-operator --create-namespace gpu-operator nvidia/gpu-operator \
--set driver.enabled=false \
--set dcgmExporter.enabled=true \
--set migManager.enabled=true \
--set driver.vgpu.enabled=true \
--set migStrategy=mixed
12、K8S 调度GPU 任务测试1
cat gpu.yaml
apiVersion: v1
kind: Pod
metadata:
name: tf-pod
spec:
containers:
- name: tf-container
image: tensorflow/tensorflow:2.14.0-gpu
command: [ "/bin/sh" ]
args: [ "-c", "tail -f" ]
resources:
limits:
cpu: 200m
memory: 512Mi
nvidia.com/gpu: 1 # requesting 1 GPUs
任务测试2
cat cuda-vectoradd.yaml
apiVersion: v1
kind: Pod
metadata:
name: cuda-vectoradd
spec:
restartPolicy: OnFailure
containers:
- name: cuda-vectoradd
image: "nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda11.7.1-ubuntu20.04"
resources:
limits:
nvidia.com/gpu: 1
测试3
docker run -d --gpus all--name pytorch swr.cn-south-1.myhuaweicloud.com/myj-prod-local-cluster-repository/pytorch:cuda11.8
docker exec -it pytorch bash 执行 python3,调用cuda 计算显卡
13、进pod 里面执行nvida-smi 是否有输出,有输出说明成功了
14、查看节点是否有gpu 资源
kubectl describe nodes/work1 |grep nv
#prometheus dcgm-exporter监控 GPU
1、添加chart 源
helm repo add dcgm-exporter https://nvidia.github.io/dcgm-exporter/helm-charts
helm repo update
2、安装dcgm-exporter
helm install dcgm-exporter dcgm-exporter/dcgm-exporter -n monitoring
或者
helm repo add utkuozdemir https://utkuozdemir.org/helm-charts
helm install nvidia-gpu-exporter -n nvidia-device-plugin
3、验证
curl -s 10.96.207.177:9400/metrics|head-20
4、grafana gpu模板
https://grafana.com/grafana/dashboards/14574-nvidia-gpu-metrics
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!