在 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)。