在docker中启用gpu支持需宿主机安装兼容nvidia驱动(≥525)、配置nvidia-container-toolkit并重启docker服务,再使用ngc官方cuda镜像(如nvcr.io/nvidia/pytorch)运行容器,通过--gpus all参数调用gpu,容器内无需装驱动。

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










