Ubuntu安装Nvidia470驱动踩坑

实验室有个几年前的服务器,装了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的安装程序真的脑有病,这几个库文件删除了倒是可以在安装驱动的时候自动地恢复,但是如果没有删除,却会出现很难排查的错误。

折腾了大半天,总算是搞定了,所以记录一下,帮助一下可能踩坑的人。

装程序真的脑有病,这几个库文件删除了倒是可以在安装驱动的时候自动地恢复,但是如果没有删除,却会出现很难排查的错误。

折腾了大半天,总算是搞定了,所以记录一下,帮助一下可能踩坑的人。

你可能感兴趣的:(ubuntu,linux,ubuntu,pytorch,nvidia,驱动程序)