Ubuntu 22.04下如何配置containerd-shim-runc-v2不占用GPU内存?
解决containerd-shim-runc-v2禁用GPU访问的方法
针对你遇到的Ubuntu 22.04环境下containerd-shim-runc-v2关联GPU导致系统崩溃的问题,可通过以下步骤配置使其完全不使用GPU:
1. 修改containerd核心配置,禁用默认GPU暴露
编辑containerd的主配置文件/etc/containerd/config.toml:
- 定位到
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]区块,确保没有添加任何与NVIDIA GPU相关的额外配置(比如将runtime_type指向nvidia runtime,或在options中挂载GPU设备)。 - 若之前配置过NVIDIA容器运行时,将其从默认runtime中移除,确保默认使用标准runc runtime。
- 添加cgroup限制规则,明确禁用GPU资源:
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] SystemdCgroup = true [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options.Cgroup] # 限制GPU内存为0,完全禁用GPU访问 Memory = 0 # 禁止所有设备访问,或可明确排除GPU设备 Devices = ["!/*"]
2. 容器启动时强制禁用GPU访问
由于你的containerd使用moby命名空间(对应Docker环境),启动容器时需明确禁止GPU授权:
- 使用Docker命令启动容器时,不要添加
--gpus参数,或直接指定--gpus=0:docker run --gpus=0 [你的容器镜像] - 若通过Docker Compose部署,在compose文件中移除所有
deploy.resources.reservations.devices相关的GPU配置,或明确设置GPU数量为0:services: your-service: image: your-image deploy: resources: reservations: devices: - driver: nvidia count: 0 capabilities: [gpu]
3. 用cgroup直接限制containerd-shim-runc-v2进程的GPU权限
如果上述配置未生效,可通过cgroup强制限制shim进程的GPU访问(以cgroup v1为例):
- 创建专门的cgroup组:
mkdir -p /sys/fs/cgroup/gpu/no-gpu # 设置GPU内存限制为0 echo 0 > /sys/fs/cgroup/gpu/no-gpu/gpu.memory_limit_in_bytes # 禁止GPU设备访问 echo 'c 195:* rmw' > /sys/fs/cgroup/gpu/no-gpu/devices.deny - 修改containerd配置,让shim进程加入该cgroup:
在/etc/containerd/config.toml中添加:[plugins."io.containerd.grpc.v1.cri".containerd] shim_cgroup = "/gpu/no-gpu" - 重启containerd服务生效:
systemctl restart containerd
4. 验证配置效果
- 启动新容器后,进入容器执行
nvidia-smi,若提示"command not found"或无法识别GPU,说明配置生效。 - 查看containerd-shim-runc-v2进程的cgroup归属:
确认其路径包含你创建的cat /proc/$(pidof containerd-shim-runc-v2)/cgroupno-gpu组。
内容的提问来源于stack exchange,提问作者Tal
相关产品推荐
相关产品推荐

