打开容器nvidia-container报错或Error response from daemon could not select device driver with capabilities

docker 关于nvidia或GPU的报错

    • 报错一:Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: process_linux.go:545: container init caused: Running hook #0:: error running hook: exit status 1, stdout: , stderr: nvidia-container-cli: initialization error: nvml error: driver/library version mismatch: unknown
    • 报错二:Error response from daemon: could not select device driver "" with capabilities: [[gpu]]

报错一:Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: process_linux.go:545: container init caused: Running hook #0:: error running hook: exit status 1, stdout: , stderr: nvidia-container-cli: initialization error: nvml error: driver/library version mismatch: unknown

解决方法:
step1:检查CUDA
在宿主机器上查看CUDA版本,报错Failed to initialize NVML: Driver/library version mismatch。
请添加图片描述
step2:检查驱动版本和内核版本
查看显卡驱动所使用的的内核版本

cat /proc/driver/nvidia/version

请添加图片描述
查看驱动程序版本

sudo dpkg --list | grep nvidia-*

在这里插入图片描述
发现实际内核版本与驱动需求版本不一致。原先可用的CUDA突然出现了这个问题应该是某些操作带动了驱动的更新(若没有自动更新)。
检查驱动做了什么更新

cat /var/log/dpkg.log | grep nvidia

会显示驱动程序何时更新到了多少版本
在这里插入图片描述
step3:卸载重新安装NVIDIA驱动
1.卸载

sudo /usr/bin/nvidia-uninstall
sudo apt-get --purge remove nvidia-*
sudo apt-get purge nvidia*
sudo apt-get purge libnvidia*
sudo apt autoremove nvidia-*

2.安装

#下载相应的驱动
wget https://us.download.nvidia.cn/XFree86/Linux-x86_64/510.60.02/NVIDIA-Linux-x86_64-510.60.02.run
#授权
sudo chmod a+x NVIDIA-Linux-x86_64-510.60.02.run
#安装
sudo ./NVIDIA-Linux-x86_64-510.60.02.run -no-x-check -no-nouveau-check

安装时–no-nouveau-check不检查nouveau,–no-x-check安装驱动时不检查X服务。
以上三个步骤之后,驱动安装完成,命令nvidia-smi可得到显卡信息,但是nvcc --version时查不到CUDA版本,接下来安装CUDA(若仅仅使用docker镜像的CUDA,可以跳过宿主机器上CUDA安装的步骤)。
step4:安装CUDA
根据系统选择NVIDIA上相应的CUDA版本安装,如下图所示:
打开容器nvidia-container报错或Error response from daemon could not select device driver with capabilities_第1张图片
根据生成的安装命令进行CUDA安装:

wget https://developer.download.nvidia.com/compute/cuda/11.6.2/local_installers/cuda_11.6.2_510.47.03_linux.run
sudo sh cuda_11.6.2_510.47.03_linux.run

配置环境变量:

vim ~/.bashrc
#加入以下路径:
export CUDA_HOME=/usr/local/cuda
export PATH=$PATH:$CUDA_HOME/bin
export LD_LIBRARY_PATH=/usr/local/cuda-11.6/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

step5:安装cudnn
NVIDIA下载cudnn相应的版本,解压之后存放到相应的路径,如下图:
在这里插入图片描述
宿主机器CUDA配置完成
这个版本的CUDA与上面安装的驱动版本是冲突的,会自动将驱动版本更新到510.47.03。因此确定CUDA不可使用时,可直接安装CUDA,包含了驱动的安装。
打开容器nvidia-container报错或Error response from daemon could not select device driver with capabilities_第2张图片
打开容器nvidia-container报错或Error response from daemon could not select device driver with capabilities_第3张图片
若此时直接启动容器,还会报一下错误

报错二:Error response from daemon: could not select device driver “” with capabilities: [[gpu]]

解决:安装NVIDIA Container Toolkit,使docker的容器能与主机的Nvidia显卡进行交互。
step6:安装NVIDIA Container Toolkit

distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
#返回ok
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
#安装nvidia-container-toolkit
sudo apt install nvidia-container-toolkit
#重启docker
sudo systemctl restart docker

现在再打开容器即不会报错。

你可能感兴趣的:(Docker,linux)