在Docker中启用GPU支持需宿主机安装兼容NVIDIA驱动(≥525)、配置nvidia-container-toolkit并重启Docker服务,再使用NGC官方CUDA镜像(如nvcr.io/nvidia/pytorch)运行容器,通过--gpus all参数调用GPU,容器内无需装驱动。
在Docker中运行深度学习环境并启用GPU支持,核心是使用NVIDIA官方提供的
(替代旧版nvidia-docker2),配合支持CUDA的镜像(如
或
)。关键前提是宿主机已正确安装NVIDIA驱动和CUDA Toolkit(仅驱动即可,Docker容器内自带CUDA运行时)。
宿主机环境准备:驱动与工具链
确保以下三项已就绪,否则GPU无法被容器识别:
NVIDIA显卡驱动已安装且版本兼容(建议≥525,可通过
验证)
安装
(Ubuntu/Debian示例):
重启docker daemon:
拉取并运行预编译的GPU镜像
无需自己构建,直接使用NVIDIA NGC官方镜像最稳妥。例如启动PyTorch环境:
查看可用镜像:
(测试GPU可见性)
交互式运行带Jupyter的容器:
进入后执行
,浏览器访问
自定义Dockerfile(需GPU支持)
若需添加特定库(如detectron2、wandb),基于NGC基础镜像扩展:
首行必须为NGC镜像:
禁用
覆盖(NGC镜像已设好),避免破坏CUDA路径
安装Python包时用
减小镜像体积
构建命令:
;运行:
验证GPU是否真正生效
容器内运行以下命令确认深度学习框架调用的是GPU而非CPU:
PyTorch:
TensorFlow:
常见失败原因:宿主机驱动版本过低、
未加、容器内误装了CPU-only的PyTorch(如用pip重装)
不复杂但容易忽略:每次更新宿主机NVIDIA驱动后,必须重启docker服务;容器内无需安装驱动,只依赖宿主机驱动 + 容器内CUDA运行时(由NGC镜像提供)。
nvidia-container-toolkitnvcr.io/nvidia/pytorchnvcr.io/nvidia/tensorflownvidia-sminvidia-container-toolkitcurl -sL https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -sL https://nvidia.github.io/nvidia-docker/ubuntu20.04/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkitsudo systemctl restart dockerdocker run --rm --gpus all nvcr.io/nvidia/pytorch:23.10-py3 nvidia-smidocker run --gpus all -it --rm -p 8888:8888 \
-v $(pwd)/notebooks:/workspace/notebooks \
nvcr.io/nvidia/pytorch:23.10-py3jupyter notebook --ip=0.0.0.0 --no-browser --allow-root --port=8888localhost:8888FROM nvcr.io/nvidia/pytorch:23.10-py3CUDA_HOMEpip install --no-cache-dirdocker build -t my-dl-env .docker run --gpus all -it my-dl-envpython -c "import torch; print(torch.cuda.is_available()); print(torch.cuda.device_count())"python -c "import tensorflow as tf; print(tf.config.list_physical_devices('GPU'))"--gpus all