Docker构建阶段如何使NVIDIA驱动可用以编译DCNv2?
编译DCNv2时Docker Build阶段提示找不到NVIDIA驱动的解决方法
问题背景
主机已安装NVIDIA驱动450、nvidia-cuda-runtime、nvidia-docker、nvidia-cuda-toolkit,配置/etc/docker/daemon.json将nvidia设为默认运行时:
{ "runtimes": { "nvidia": { "path": "/usr/bin/nvidia-container-runtime", "runtimeArgs": [] } }, "default-runtime": "nvidia" }
基于pytorch/pytorch:1.7.0-cuda11.0-cudnn8-devel构建镜像,执行以下编译步骤时报错RuntimeError: Found no NVIDIA driver on your system:
RUN git clone -b pytorch_1.7 https://github.com/ifzhang/DCNv2.git WORKDIR DCNv2 RUN python3 setup.py build develop
已尝试关闭BuildKit构建,问题仍存在。
核心原因
Docker Build阶段默认不会加载NVIDIA运行时的GPU设备与驱动环境,即使配置了默认运行时,该配置仅对容器运行阶段生效,Build过程无法访问主机GPU资源。
解决方案
方案一:容器启动时再编译DCNv2
将编译步骤从Build阶段移到容器启动阶段,此时容器已通过nvidia运行时获取GPU环境:
- 修改Dockerfile:
FROM pytorch/pytorch:1.7.0-cuda11.0-cudnn8-devel RUN git clone -b pytorch_1.7 https://github.com/ifzhang/DCNv2.git WORKDIR /DCNv2 # 编写启动脚本,容器启动时自动执行编译 RUN echo '#!/bin/bash' > /start.sh && \ echo 'python3 setup.py build develop' >> /start.sh && \ echo 'exec "$@"' >> /start.sh && \ chmod +x /start.sh ENTRYPOINT ["/start.sh"] CMD ["bash"]
- 构建镜像:
docker build -t dcnv2-pytorch1.7 .
- 启动容器(自动完成编译):
docker run --gpus all -it dcnv2-pytorch1.7
方案二:启用BuildKit的GPU支持(Docker版本≥19.03)
通过BuildKit在Build阶段直接访问GPU资源:
- 确保Docker开启BuildKit(可通过设置环境变量
DOCKER_BUILDKIT=1,或在/etc/docker/daemon.json中添加"features": {"buildkit": true}后重启docker服务) - 修改Dockerfile,添加语法声明:
# syntax=docker/dockerfile:1.4 FROM pytorch/pytorch:1.7.0-cuda11.0-cudnn8-devel RUN git clone -b pytorch_1.7 https://github.com/ifzhang/DCNv2.git WORKDIR DCNv2 RUN --mount=type=cache,target=/root/.cache/pip python3 setup.py build develop
- 执行构建命令:
docker buildx build --builder docker-container --gpus all -t dcnv2-pytorch1.7 .
额外验证点
主机驱动版本450与镜像使用的CUDA 11.0版本兼容(CUDA 11.0要求驱动版本≥450.36.06),无需调整版本匹配问题。
内容的提问来源于stack exchange,提问作者Vahagn Tumanyan
相关产品推荐
相关产品推荐

