docker内部执行nvidia-smi无任何显示的解决方法

docker内部执行nvidia-smi无任何显示的解决方法

贺志国
2023.4.11

今天在Docker内部编译程序,发现与CUDA相关的代码居然没有编译,于是在Docker内部执行Nvidia显卡驱动检测命令nvidia-smi,执行完毕后,无任何输出,也没有任何报错信息,但在Docker外部执行该命令,结果如下图所示,没有任何异常:
docker内部执行nvidia-smi无任何显示的解决方法_第1张图片
最开始我以为是Docker启动有问题,于是连续重启两次,仍然是nvidia-smi命令无任何输出。仔细观察启动Docker的提示,说是Docker内部的Nvidia显卡驱动异常,未能启用Nvidia显卡,于是按照Nvidia官方网站https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#docker的方法重新安装NVIDIA Container Toolkit。安装命令罗列如下(我也是在官网抄过来的):

# 重新安装Docker
curl https://get.docker.com | sh   && sudo systemctl --now enable docker

# 设置安装包和GPG key的仓库地址
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
      && curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
      && curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
            sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
            sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

# 更新安装源
sudo apt-get update

# 安装nvidia-container-toolkit
sudo apt-get install -y nvidia-container-toolkit

# 配置Docker以便正确识别NVIDIA的容器运行时库
sudo nvidia-ctk runtime configure --runtime=docker

# 重启Docker
sudo systemctl restart docker

本以为万事大吉,结果非常不幸,执行第一步curl https://get.docker.com | sh && sudo systemctl --now enable docker就出现如下错误:

E: Conflicting values set for option Signed-By regarding source https://nvidia.github.io/libnvidia-container/stable/ubuntu18.04/amd64/ /: /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg !=
E: The list of sources could not be read.

官方网站https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/troubleshooting.html提到的第一个难点解疑就是针对该问题的,具体办法就是执行如下两行命令,找到重复的安装源并删除之:

grep -l "nvidia.github.io" /etc/apt/sources.list.d/* | grep -vE "/nvidia-container-toolkit.list\$"

sudo rm /etc/apt/sources.list.d/nvidia-docker.list 

接下来再依次执行上述命令,就可修复Docker内部的Nvidia工具箱,操作截图如下所示:
docker内部执行nvidia-smi无任何显示的解决方法_第2张图片
docker内部执行nvidia-smi无任何显示的解决方法_第3张图片
docker内部执行nvidia-smi无任何显示的解决方法_第4张图片
进入Docker,执行命令nvidia-smi,就可以看到正确的Nvidia显卡信息了:
docker内部执行nvidia-smi无任何显示的解决方法_第5张图片

你可能感兴趣的:(CUDA,docker,docker,运维,容器)