带GPU启动 Docker 容器

发布于:2025-07-03 ⋅ 阅读:(19) ⋅ 点赞:(0)

在 Linux 服务器上启动 Docker 容器并使其能够使用 NVIDIA 显卡(GPU),需要使用 NVIDIA Container Toolkit(之前称为 nvidia-docker)。以下是详细步骤:


1. 确保宿主机满足条件

(1) 宿主机已安装 NVIDIA 驱动

nvidia-smi  # 检查驱动是否正常

如果未安装,先安装 NVIDIA 驱动:

sudo apt update
sudo apt install -y nvidia-driver-535  # Ubuntu/Debian(版本根据显卡调整)
sudo reboot

(2) 安装 NVIDIA Container Toolkit

# 添加 NVIDIA 仓库
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
&& curl -s -L https://nvidia.github.io/libnvidia-container/gpgkey | sudo apt-key add - \
&& curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

# 更新并安装
sudo apt update
sudo apt install -y nvidia-container-toolkit
sudo systemctl restart docker

2. 启动 Docker 容器并挂载 GPU

(1) 使用 --gpus 参数

docker run --gpus all -it nvidia/cuda:11.8.0-base-ubuntu22.04 nvidia-smi
  • --gpus all:允许容器访问所有 GPU。
  • nvidia/cuda:11.8.0-base-ubuntu22.04:NVIDIA 官方 CUDA 镜像(可替换为其他镜像)。
  • nvidia-smi:测试 GPU 是否可用。

(2) 指定特定 GPU

docker run --gpus '"device=0,1"' -it nvidia/cuda:11.8.0-base-ubuntu22.04 nvidia-smi
  • "device=0,1":仅使用 GPU 0 和 1(按 nvidia-smi 显示的 ID)。

(3) 使用 Docker Compose

docker-compose.yml 中配置:

version: "3.8"
services:
  my_gpu_service:
    image: nvidia/cuda:11.8.0-base-ubuntu22.04
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1  # 使用 1 个 GPU
              capabilities: [gpu]
    command: nvidia-smi

然后运行:

docker compose up

3. 验证 GPU 是否在容器内可用

进入容器并运行:

nvidia-smi

如果正常显示 GPU 信息,说明配置成功。


4. 常见问题

(1) nvidia-smi 报错:command not found

容器内未安装 NVIDIA 工具包,使用 NVIDIA 官方 CUDA 镜像(如 nvidia/cuda:11.8.0-base)或手动安装:

apt update && apt install -y nvidia-utils-535

(2) docker: Error response from daemon: could not select device driver

NVIDIA Container Toolkit 未正确安装,重新安装并重启 Docker:

sudo apt install --reinstall nvidia-container-toolkit
sudo systemctl restart docker

(3) 权限问题

如果 Docker 默认用户无法访问 GPU,可以:

  • 使用 --privileged(不推荐):
    docker run --gpus all --privileged -it nvidia/cuda:11.8.0-base-ubuntu22.04 nvidia-smi
    
  • 或手动添加设备权限:
    docker run --gpus all --device /dev/nvidia0:/dev/nvidia0 --device /dev/nvidiactl:/dev/nvidiactl -it nvidia/cuda:11.8.0-base-ubuntu22.04 nvidia-smi
    

5. 总结

操作 命令
安装 NVIDIA Container Toolkit sudo apt install nvidia-container-toolkit
启动带 GPU 的容器 docker run --gpus all -it nvidia/cuda:11.8.0-base nvidia-smi
指定 GPU 设备 docker run --gpus '"device=0,1"' -it ...
Docker Compose 配置 capabilities: [gpu]

成功配置后,Docker 容器即可直接调用宿主机 GPU 进行计算(如 CUDA、PyTorch、TensorFlow)。