实验室有个几年前的服务器,装了GTX 1080Ti显卡。之前我装了NVIDIA最新的470版本驱动,通过 nvidia-smi
命令也可以看到显卡工作情况,因此我以为搞定了。
然而今天打算跑个程序的时候,突然发现Torch报错了:
torch._C._cuda_init()
RuntimeError: CUDA error: unknown error
试了网上的一些方法,也没有用。
而且发现,最简单的:torch.tensor(1).cuda()
也会报这个错。
于是打算重新安装驱动。
从NVIDIA官网下载了最新版的470.63.01驱动再安装,却出错了。到/var/log/nvidia-installer
里面看,出错的原因在
executing: ‘/bin/sh ./libglvnd_install_checker/check-libglvnd-install.sh’…
Core dumped
在网上搜了半天,都没找到合适的解决方案。
收到某个帖子启发(忘记哪一篇了),首先使用
./NVIDIA-Linux-x86_64-470.63.01.run -x (通过 --help 可以查看可以使用的参数)
将安装包进行解压,然后找到脚本/libglvnd_install_checker/check-libglvnd-install.sh
,运行之:
sh -x check-libglvnd-install.sh (这里的-x是用来看执行到第几行)
结果发现:
LD_LIBRARY_PATH=/home/zf/temp/NVIDIA-Linux-x86_64-470.63.01/libglvnd_install_checker /home/zf/temp/NVIDIA-Linux-x86_64-470.63.01/libglvnd_install_checker/glvnd_check glx libGL.so.1
Core dumped
这时候看出,是 glvnd_check glx libGL.so.1
这行代码出了问题。手动运行也发现了,这样代码会报错:Segmentation fault + Core dumped。
这时候我做了一个蠢事!
我想:既然是libgl的问题,是不是把它全删了就完事了。于是我直接sudo apt remove libgl*
。
结果一下子删了几百个包。不过这时候NVIDIA 驱动可以装了。
更蠢的是我又运行了一下:sudo apt autoremove
,结果刚刚装的显卡驱动也没了。于是我很蠢地重启了服务器,结果服务器居然连不上了!
为此我只能用显示屏连接服务器,等待了很久,万幸还能登陆。
结果发现,ping局域网都ping不通了,彻底断网。
于是又搜索半天,使用ip a
查看网络接口,然后再通过修改/etc/network/interfaces
手动改网络配置(因为netplan, ifconfig
什么的命令都找不到),然后sudo systemctl restart network-manager; sudo systemctl restart networking
,总算是可以访问局域网了。
但是我发现虽然在/etc/network/interfaces
里面加了dns-nameservers
,结果ping baidu.com
还是不行。于是只好手动在/etc/resolv.conf
里面添加。一通操作,居然成功了!可以连网了。
于是我继续研究NVIDIA驱动的问题,这时候我发现,其实只要把那几个.so
文件删了就行了,根本不需要apt remove
。
首先,locate -b 'libGL.so.1'
,发现是在/usr/lib/x86_64-linux-gnu/libGL.so.1
这个位置。
ls /usr/lib/x86_64-linux-gnu/ | grep libGL
出现了不少信息
libGLdispatch.so.0
libGLESv1_CM_nvidia.so.1
libGLESv1_CM_nvidia.so.470.63.01
libGLESv1_CM.so
libGLESv1_CM.so.1
libGLESv1_CM.so.1.2.0
libGLESv2_nvidia.so.2
libGLESv2_nvidia.so.470.63.01
libGLESv2.so
libGLESv2.so.2
libGLESv2.so.2.1.0
libGL.so
libGL.so.1
libGL.so.1.7.0
libGLX_indirect.so.0
libGLX_nvidia.so.0
libGLX_nvidia.so.470.63.01
libGLX.so
libGLX.so.
注意,这些是我安装驱动之后的。
由于我发现,删除了libGL.so.1之后,还会有类似的错,于是我直接把这些libGL
开头的.so
文件都删了。(sudo rm /usr/lib/x86_64-linux-gnu/libGL*
)
然后重新安装驱动,成功了!不得不说NVIDIA的安装程序真的脑有病,这几个库文件删除了倒是可以在安装驱动的时候自动地恢复,但是如果没有删除,却会出现很难排查的错误。
折腾了大半天,总算是搞定了,所以记录一下,帮助一下可能踩坑的人。
装程序真的脑有病,这几个库文件删除了倒是可以在安装驱动的时候自动地恢复,但是如果没有删除,却会出现很难排查的错误。
折腾了大半天,总算是搞定了,所以记录一下,帮助一下可能踩坑的人。