You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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资源,如果你有这类容器,需要显式指定使用默认的runc runtime(比如在Docker里用--runtime runc,在Kubernetes里不指定runtimeClassName或者设为runc)。

内容的提问来源于stack exchange,提问作者Lennox Wu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 16:37:36