如何在不破坏docker容器的情况下更新nvidia驱动
参考资料:
[驱动下载页]
由于项目结题,需要在一个较旧的8卡V100服务器上运行机器学习代码,但是这个服务器上面的docker驱动却旧到爆炸,请看VCR:
2023年了居然显卡驱动还停留在418,这下不得不升级了。请示完导师就加油干吧。首先我把参考资料中的那个总方法论给截图放出来,然后一步一步解析:
1. 第一步,根据自己的显卡型号,下载最新的驱动
下载完成后是一个以run为后缀的文件
2. 第二步,卸载之前的nvidia驱动
如果你系统里旧的nvidia驱动是apt-get安装的话,那么你需要用下面的命令来卸载原有的nvidia软件:
sudo /usr/bin/nvidia-uninstall sudo apt-get --purge remove nvidia-* sudo apt-get purge nvidia* sudo apt-get purge libnvidia*
nvidia-uninstall很可能没有,我猜只有通过run文件装的驱动才会有?
3. 第三步,unload服务器正在运行的nvidia模块
命令在前面已经给出了:
# Unload Nvidia kernel modules modprobe -r nvidia_drm modprobe -r nvidia_uvm modprobe -r nvidia_modeset modprobe -r nvidia
值得注意的是你很有可能碰到杀不掉的东西,在你check过之前旧显卡已经完全卸载后还是无法modprobe,你可以用这个问题里面的解决方案
4. 第三步,运行命令
sudo ./NVIDIA-Linux-x86_64-535.129.03.run -no-x-check -no-nouveau-check -no-opengl-files
tips:这里我用的是一个没有图形化页面的系统(仅ssh),所以X-check和nouveau什么的我都没有去管,如果有相关问题的话可以去看其他文章怎么解决的。如果提示仍有module已经加载,那就reboot了。
对于安装过程中交互式提出的几个问题,答案我copy了一份:
安装过程中的选项:(这是copy别人的,自己的没记住,我也是尝试选择了好多遍才安装好) The distribution-provided pre-install script failed! Are you sure you want to continue? 选择 yes 继续。 Would you like to register the kernel module souces with DKMS? This will allow DKMS to automatically build a new module, if you install a different kernel later? 选择 No 继续。 问题没记住,选项是:install without signing 问题大概是:Nvidia's 32-bit compatibility libraries? 选择 No 继续。 Would you like to run the nvidia-xconfigutility to automatically update your x configuration so that the NVIDIA x driver will be used when you restart x? Any pre-existing x confile will be backed up. 选择 Yes 继续 ———————————————— 版权声明:本文为CSDN博主「xunan003」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/xunan003/article/details/81665835
5. 第五步、安装结束,重启docker
modprobe nvidia挂载nvidia模块,然后运行nvidia-smi验证是否安装成功就好。service docker restart重启docker服务?(应该是需要的)
6. 第六步、debug
1) Error response from daemon: could not select device driver "" with capabilities: [[gpu]]
出现这个报错的原因是之前在卸载老版本驱动的时候把nvidia-container-toolkits也卸载掉了,需要重新安装。这个直接按照官方的方法,用apt-get安装就行:https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html
解决了这个问题,又来了新问题:
在重启docker之后,我发现有一些docker能用,有一些不能用。不能用的docker起起来的时间比较早,它们会报这个错:
2) Error response from daemon: Unknown runtime specified nvidia
理解一下就是新版本的nvidia-container-toolkits不能够理解为什么设置里有--runtime=nvidia,通过这个issue找到了解决方案,需要再通过apt-get安装一个叫nvidia-docker2的东西:
sudo apt install -y nvidia-docker2 sudo systemctl daemon-reload sudo systemctl restart docker
至此,就没有任何问题了。到容器里面运行nvidia-smi,一切表现良好~