首页/AI/大模型部署与运维速查/容器用不了 GPU 的排查顺序
推理环境与 GPU50 条

容器用不了 GPU 的排查顺序

容器报「could not select device driver」时按固定顺序排查:宿主机驱动是否正常、工具链是否安装、运行时是否配置、命令是否带 --gpus。

容器用不了 GPU 的排查逻辑

容器里的 GPU 访问是三层拼起来的:宿主机驱动正常、容器工具链已安装并配置为 Docker 运行时、启动命令显式申请了设备。任一层缺失都会失败,而且报错文案各不相同。固定从上到下的顺序排查,比随手改容器参数快得多:先证明宿主机能用卡,再证明 Docker 认识运行时,最后证明容器拿得到设备。

四步排查

四步排查
# 1) 宿主机驱动是否正常
nvidia-smi
# 2) 容器工具链是否安装
nvidia-container-cli --version
dpkg -l | grep -i nvidia-container-toolkit
# 3) Docker 运行时是否配置生效
docker info | grep -i nvidia
# 4) 用最小镜像验证透传(不涉及业务镜像与权重)
docker run --rm --gpus all nvidia/cuda:12.4.1-base-ubuntu22.04 nvidia-smi -L

典型报错与原因

报错或现象常见原因
找不到设备驱动选择器未安装容器工具链,或安装后未配置运行时
运行时未知或守护进程启动失败运行时配置文件写错,Docker 起不来
容器内驱动版本不足镜像内 CUDA 运行时高于宿主驱动支持上限
容器能跑但看不到卡启动命令没带设备申请参数,或编排里没声明设备
只有部分卡可见显式限制了设备列表,与预期不一致

典型使用场景

  • 新装机器首次跑容器:按顺序验证透传,避免一次引入多个变量
  • 升级驱动或 Docker 之后:重新验证运行时配置是否仍然生效
  • 业务容器起不来:先用基础镜像排除业务镜像自身的问题
  • CI 环境准备:把四步检查写进流水线脚本,提前失败在环境层
  • 多人共用机器:确认设备数量与占用情况,避免请求了被占着的卡

核对顺序与判据

第一步宿主机能看到卡且版本正常
第二步工具链已安装,配置文件存在
第三步Docker 信息里能看到运行时已注册
第四步最小镜像在容器内能列出设备
用基础 CUDA 镜像做验证能排除业务镜像的干扰:业务镜像体积大、构建时间久,环境问题在它上面排查成本更高。
用特权模式当临时方案会掩盖真正问题,并带来额外权限风险:只在明确知道后果时使用,且不要写进长期配置。

易错点

  • 跳过宿主机检查直接调容器参数:宿主机驱动异常时怎么改容器配置都没用
  • 装了工具链忘记配置运行时:安装完成但 Docker 不认识,症状与未安装完全一样
  • 直接拿业务镜像排查:镜像自身问题与环境问题混在一起,定位时间翻倍
  • 用特权模式绕过透传:问题被掩盖,后续排查更困难且有权限风险
  • 不验证设备数量:多卡机器上只透传了一张卡,性能上不去却查不出原因

数据来源与参考

  • NVIDIA Container Toolkit 文档(docs.nvidia.com/datacenter/cloud-native)
  • Docker 文档(docs.docker.com)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌