在 Docker 容器中使用宿主机的 GPU(特别是 NVIDIA GPU)需要安装 NVIDIA Container Toolkit(之前称为 nvidia-docker
)。以下是详细的配置步骤:
1. 宿主机环境准备
确保宿主机已正确安装:
-
NVIDIA 显卡驱动:
nvidia-smi # 检查驱动是否安装成功
-
Docker Engine:
docker --version # 确保 Docker 已安装
2. 安装 NVIDIA Container Toolkit
步骤 1:添加仓库和密钥
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
步骤 2:更新并安装工具包
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit nvidia-container-runtime
运行以下命令检查是否已安装:
which nvidia-container-runtime
运行以下命令检查是否安装了必要的包:
dpkg -l | grep -E "nvidia-container-(toolkit|runtime)"
步骤 3:重启 Docker 服务
sudo systemctl restart docker
3. 验证安装
运行一个测试容器(如 nvidia/cuda:11.0-base
):
docker run --rm --gpus all nvidia/cuda:12.8.1-base-ubuntu22.04 nvidia-smi
如果看到与宿主机相同的 GPU 信息,则配置成功。
4. 运行容器时指定 GPU
-
使用所有 GPU:
docker run --gpus all your_image
-
使用特定 GPU(如 GPU 0 和 1):
docker run --gpus '"device=0,1"' your_image
-
限制 GPU 内存:
docker run --gpus all --gpus '"device=0,1"' --memory="8g" your_image
5. 其他注意事项
-
CUDA 版本兼容性:容器内的 CUDA 版本需 ≤ 宿主机的驱动版本(通过
nvidia-smi
顶部显示的CUDA Version
查看)。 -
非 NVIDIA GPU:如果是 AMD/Intel GPU,需使用对应的 Docker 插件(如
rocm
或intel-gpu
)。 -
Kubernetes 支持:若需在 Kubernetes 中使用 GPU,需配置
nvidia-device-plugin
。
常见问题
-
错误
docker: Error response from daemon: could not select device driver...
确保nvidia-container-toolkit
已安装并重启 Docker。 -
CUDA 版本不匹配
拉取与宿主机驱动兼容的 CUDA 镜像,例如:docker pull nvidia/cuda:12.8.1-base-ubuntu22.04 # 根据实际情况选择版本
通过以上步骤,Docker 容器即可直接调用宿主机 GPU 资源。如果需要更复杂的配置(如多 GPU 隔离),可参考 NVIDIA Container Toolkit 官方文档。