Docker容器CUDA版本能否与主机不同?及版本不兼容报错解决
问题分析与解决方案
你的操作确实存在疏漏,导致了这个版本不兼容报错,下面给你拆解原因和解决办法:
错误原因
你使用普通Docker命令启动基于nvidia/cuda:8.0-cudnn5-devel的容器,但这类NVIDIA CUDA镜像必须依赖nvidia-docker才能实现容器与主机GPU驱动的正常交互。如果用普通Docker启动,容器无法正确识别主机的CUDA驱动版本,会误判为驱动版本不足以支撑容器内的CUDA 8.0 Runtime,从而抛出CUDA driver version is insufficient for CUDA runtime version错误。
补充说明:CUDA驱动是向下兼容的——主机的高版本驱动(对应CUDA 9.0)完全可以支持容器内低版本的CUDA Runtime(8.0),所以版本本身是兼容的,问题核心出在容器的启动方式上。
解决办法
1. 安装并使用nvidia-docker2(推荐方案)
这是最直接的修复方式,确保容器能正确访问主机GPU驱动:
- 先卸载旧版nvidia-docker(如果已安装):
docker volume ls -q -f driver=nvidia-docker | xargs -r docker volume rm sudo apt-get purge -y nvidia-docker - 安装nvidia-docker2:
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list sudo apt-get update && sudo apt-get install -y nvidia-docker2 sudo systemctl restart docker - 用nvidia-docker启动容器:
若使用Docker Compose,需在nvidia-docker run -it --rm your-image-namedocker-compose.yml中添加runtime: nvidia配置。
2. 备选方案:在主机兼容镜像内手动安装CUDA 8.0
如果因环境限制无法使用nvidia-docker,可以先基于主机CUDA版本的镜像创建容器,再手动安装CUDA 8.0环境:
- 启动CUDA 9.0基础容器:
docker run -it --rm nvidia/cuda:9.0-cudnn7-devel - 在容器内安装CUDA 8.0:
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_8.0.61-1_amd64.deb dpkg -i cuda-repo-ubuntu1604_8.0.61-1_amd64.deb apt-get update apt-get install -y cuda-8-0 - 配置环境变量让TensorFlow优先使用CUDA 8.0:
export PATH=/usr/local/cuda-8.0/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:$LD_LIBRARY_PATH
3. 验证环境配置
容器启动后,执行以下命令确认环境正常:
nvcc --version nvidia-smi
如果nvidia-smi显示的驱动版本≥367.48(CUDA 8.0最低驱动要求),同时nvcc --version显示8.0,说明环境配置成功,此时运行你的TensorFlow 1.2代码就不会报错了。
内容的提问来源于stack exchange,提问作者Lily.chen
相关产品推荐
相关产品推荐

