Docker 19.03下如何默认启用--gpus all或配置Kubernetes暴露所有GPU
嘿,我来帮你搞定这个问题!针对你想让Docker默认带上--gpus all,以及Kubernetes不用NVIDIA Device Plugin就把所有GPU暴露给Pod的需求,我整理了两种场景的具体方案:
一、让Docker默认启用--gpus all
有两种实用方式,分别对应系统级和用户级生效:
1. 系统级默认配置(所有用户生效)
通过修改Docker守护进程的配置文件,让所有容器默认使用NVIDIA runtime(等价于自动带上--gpus all):
- 编辑(或新建)
/etc/docker/daemon.json,写入以下内容:
{ "default-runtime": "nvidia", "runtimes": { "nvidia": { "path": "nvidia-container-runtime", "runtimeArgs": [] } } }
- 重启Docker服务让配置生效:
sudo systemctl daemon-reload sudo systemctl restart docker
之后你运行任何docker run命令,都会自动使用NVIDIA runtime,所有GPU会直接暴露给容器。
2. 用户级别名配置(仅当前用户生效)
如果只想给自己的Shell会话生效,可以给docker命令加别名:
- 打开你的Shell配置文件(比如
~/.bashrc或~/.zshrc),添加一行:
alias docker='docker --gpus all'
- 执行
source ~/.bashrc让别名立即生效,之后你敲docker run就自动带上--gpus all参数了。
二、Kubernetes中默认暴露所有GPU(不使用NVIDIA Device Plugin)
不想用官方的device plugin的话,我们可以让kubelet默认使用NVIDIA runtime,或者给Pod配置runtime类:
1. 全局配置kubelet使用NVIDIA runtime
这会让节点上所有新建的Pod默认获得所有GPU:
- 先确保节点上已经装好了NVIDIA驱动、nvidia-container-toolkit和nvidia-container-runtime(这些是基础依赖,必须先搞定)。
- 编辑kubelet的systemd配置文件(通常是
/etc/systemd/system/kubelet.service.d/10-kubeadm.conf),在KUBELET_CONFIG_ARGS里添加--docker-runtime=nvidia:
Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml --docker-runtime=nvidia"
- 重启kubelet服务:
sudo systemctl daemon-reload sudo systemctl restart kubelet
之后kubelet创建容器时会默认用NVIDIA runtime,所有Pod都会拿到节点上的全部GPU。
2. 按需(或全局默认)配置Pod的RuntimeClassName
如果不想全局修改kubelet,也可以给单个Pod指定runtime类:
- 在Pod的YAML里添加
runtimeClassName: nvidia:
apiVersion: v1 kind: Pod metadata: name: gpu-test-pod spec: runtimeClassName: nvidia containers: - name: cuda-container image: nvidia/cuda:11.8.0-base-ubuntu22.04 command: ["sleep", "infinity"]
- 如果想让所有Pod默认都用这个配置,可以用Mutating Admission Webhook自动给所有Pod添加
runtimeClassName: nvidia,或者修改命名空间的默认Pod模板(后者只对特定命名空间生效)。
注意事项
- 不管用哪种方案,都要确保节点上的NVIDIA依赖(驱动、container toolkit、runtime)安装正确,否则runtime会失效。
- 全局默认GPU的话,那些不需要GPU的容器也会占用GPU资源,如果你有这类容器,需要显式指定使用默认的
runcruntime(比如在Docker里用--runtime runc,在Kubernetes里不指定runtimeClassName或者设为runc)。
内容的提问来源于stack exchange,提问作者Lennox Wu
相关产品推荐
相关产品推荐

