【已解决】Ubuntu18.04下NVIDIA GPU驱动程序运行一段时间后出错“NVIDIA-SMI has failed”

          本人在使用Ubuntu18.04 NVIDIA GPU深度学习环境的过程中,每过一段时间就出现错误“NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running”,这时参考网上的做法卸载GPU驱动再重装,但是过一段时间后又不正常,经过观察发现,每次出现这种问题都是在Ubuntu系统自动更新后,今天将解决过程详细记录下来,安装驱动过程中也有雷区,网上很多帖子都没有详细说,这里说明记录一下,供有类似问题的深度学习研究童鞋参考。

        注意:我的电脑GPU为NVIDIA 940MX,安装了CUDA9.0和cuDNN支持,对于其他版本的GPU处理情况类似。这里针对的是之前已经安装过GPU驱动+CUDA+cuDNN的情况,对于首次安装GPU驱动,还需要将原始集成显卡加入黑名单等步骤,见我的另一篇帖子:《Ubuntu18.04下搭建深度学习环境(tensorflow CPU GPU、Keras、Pytorch、Pycharm、Jupyter)》

       解决方法: 

     1、禁用Ubuntu自动更新功能

      在Ubuntu设置中直接用图形界面就可以解决,在software&update中,相信贴两张截屏大家就应该明白

     【已解决】Ubuntu18.04下NVIDIA GPU驱动程序运行一段时间后出错“NVIDIA-SMI has failed”_第1张图片

     【已解决】Ubuntu18.04下NVIDIA GPU驱动程序运行一段时间后出错“NVIDIA-SMI has failed”_第2张图片

2、卸载所有NVIDIA驱动:

sudo apt-get remove --purge nvidia* 

3、确保gcc、g++4.8以上版本,安装nvidia驱动时候需要,Ubuntu18.04自带版本为gcc-7.3

       注意:安装NVIDIA GPU驱动需要gcc和g++的版本为7.0以上,Ubuntu18.04系统自带的gcc和g++就是7.3版本的,已经满足要求,但是由于之前安装好驱动后,继续安装的cuda9.0只支持4.8以下版本,所以之前在安装好GPU驱动后将gcc,g++降级到了4.8,这里要先确认版本,然后修改软连接。这里请去NVIDIA官网查看驱动需要的gcc和g++版本,否则即使使用下一步的命令安装好驱动后,使用nvdia-smi命令错误显示依旧。

      $cd /usr/bin
      $ls -l gcc*  #查看gcc链接 
      $sudo mv gcc gcc.bak #备份 
      $sudo ln -s gcc-7 gcc #重新链接
      $gcc –v     #显示版本为gcc-7.3
     #对g++进行同样的操作
      $ls -l g++*  #查看gcc链接
      $sudo mv g++ g++.bak #备份 
      $sudo ln -s g++-7 g++ #重新链接
      $g++ –v     #显示版本为g++-7.3

   4、安装GPU驱动

$sudo ubuntu-drivers autoinstall

   5、重启系统,使用nvidia-smi查看,看到显卡信息说明安装成功:

$sudo reboot
#重启系统后查看显卡信息
$nvidia-smi

【已解决】Ubuntu18.04下NVIDIA GPU驱动程序运行一段时间后出错“NVIDIA-SMI has failed”_第3张图片

通过系统设置菜单也可以看到显卡信息:

【已解决】Ubuntu18.04下NVIDIA GPU驱动程序运行一段时间后出错“NVIDIA-SMI has failed”_第4张图片

  6、安装完毕后将gccg++降级到4.8版本,CUDA要求的gccg++版本低于4.8,否则进行深度学习运算时候会出错。

$cd /usr/bin 
$ls -l gcc*  #查看gcc链接
$sudo mv gcc gcc.bak #备份 
$sudo ln -s gcc-4.8 gcc #重新链接
$gcc –v     #显示版本为gcc-4.8
#对g++进行同样的操作
$ls -l g++*  #查看gcc链接
$sudo mv g++ g++.bak #备份 
$sudo ln -s g++-4.8 g++ #重新链接
$g++ –v     #显示版本为g++-4.8

 

你可能感兴趣的:(Linux驱动,机器学习)