系统: ubuntu18.04

安装

知乎文章 【Ubuntu 18.04 安装 NVIDIA 显卡驱动】 写的很详细,总结的很全了

个人推荐下面两种方法之一:

法一:自动安装

自动安装推荐版本

  1. sudo ubuntu-drivers devices
  2. sudo ubuntu-drivers autoinstall

法二:PPA安装

添加库并安装指定版本,命令2输入连续两次按 tab 键可以查看当前可用版本,选择相应版本

  1. sudo add-apt-repository ppa:graphics-drivers/ppa
  2. sudo apt install nvidia-driver-440

关闭 x server

执行 nvidia-smi 命令时会看到下面:
image.png
这是 x server 进程,关闭即可

  1. sudo systemctl stop lightdm
  2. sudo systemctl disable light

卸载

  1. sudo apt remove --purge nvidia*

使用 zsh 的话,上述命令可能会无效,使用下面的命令

  1. sudo apt remove --purge "nvidia*"

多版本 cuda 共存

此处以 cuda10.0 与 cuda10.2 为例。电脑上已有 cuda10.0,现在再安装 cuda10.2,两个版本共存。

  1. 安装最新版驱动

    1. sudo apt install nvidia-driver-440 -y
  2. 依据引导下载对应版本的 cuda 安装包,推荐 runfile版本。

    nvidia-cuda 最新版下载地址:https://developer.nvidia.com/cuda-downloads 各历史版本下载地址:https://developer.nvidia.com/cuda-toolkit-archive

  1. wget -c http://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda_10.2.89_440.33.01_linux.run
  1. 下载完成后执行安装

    1. sudo sh cuda_10.2.89_440.33.01_linux.run
  2. 安装过程中选择不安装显卡驱动,选择不覆盖 /usr/local/cuda 文件。

  3. 安装完成后,在 /usr/local 文件夹下出现 cuda10.2 文件夹
  4. 通过在 ~/.bashrc 中设置环境变量的方法来调整使用哪个 cuda 版本

.bashrc 中添加下面内容

  1. export CUDA_HOME=/usr/local/my_cuda
  2. export PATH=$PATH:$CUDA_HOME/bin
  3. export LD_LIBRARY_PATH=/usr/local/my_cuda/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

切换 cuda10.2

若需要使用 cuda10.2 ,则创建 cuda10.2 软链接到 my_cuda

  1. cd /usr/local
  2. sudo rm my_cuda
  3. sudo ln -s /usr/local/cuda-10.2 /usr/local/my_cuda
  4. source ~/.bashrc

查看cuda 版本是否切换成功

  1. nvcc --version

切换 cuda10.0 版本

  1. cd /usr/local
  2. sudo rm my_cuda
  3. sudo ln -s /usr/local/cuda-10.0 /usr/local/my_cuda
  4. source ~/.bashrc

内核升级后无法与显卡通信

若更新系统后出现如下故障,则可能是升级内核后导致了驱动故障

NVIDIA-SMI has failed because it couldn’t communicate with the NVIDIA driver

参考文章 【ubuntu环境下,系统无法与NVIDIA通信的解决方法】

查看内核版本

  1. uname -r

使用dkms 重新将驱动注册到内核

  1. sudo apt-get install dkms
  2. sudo dkms build -m nvidia -v 440.82 # 最后的版本号通过/usr/src目录下名为nvidia-***.**的文件夹获得
  3. sudo dkms install -m nvidia -v 440.82

检查是否成果

  1. nvidia-smi # 正确显示显卡信息则成功

GCC 版本问题

在上述安装过程中如果一直无法成功,检查系统 gcc 版本,gcc7 以上才行,gcc-4.8、gcc-4.9 都会导致失败。

查看当前 gcc 和 g++ 版本

  1. gcc --version
  2. g++ --version

查看系统中有的 gcc 版本

  1. ls /usr/bin/gcc*

设置系统当前使用的 gcc 版本

  1. sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 40 # 最后的数字代表优先级
  2. sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 40 # 最后的数字代表优先级

选择 gcc-7

  1. sudo update-alternatives --config gcc # 输入对应的编号即可

用同样的方法配置 g++,将上述命令中的 gcc 换成 g++ 即可

切换内核问题

ubuntu 内核升级常常会导致驱动挂掉,切回原来的内核也是方法之一,在此记录下相关操作

参考:如何降级/切换 Ubuntu 系统 Linux 内核启动版本

  1. 查看正在使用的内核版本

    1. uname -r
  2. 查看系统可用的 Linux 内核

    1. grep menuentry /boot/grub/grub.cfg

    查看子选项:

    ‘Ubuntu, with Linux 4.4.0-104-generic’

  1. 设置内核启动版本

    sudo vi /etc/default/grub

将 GRUB_DEFAULT=0 // 0表示系统当前启动的内核序号 修改为想要启动的内核版本对应子选项:GRUB_DEFAULT=“Advanced options for Ubuntu > Ubuntu, with Linux 4.4.0-104-generic”

  1. 检查是否有误

    1. sudo grub-mkconfig -o /boot/grub/grub.cfg
  2. 无误则更新 grub

    1. sudo update grub
  3. 重启系统

    1. sudo reboot
  4. 查看内核是否切换成功

    1. uname -r

Linux内核安装和卸载

  1. 查看可安装内核

    1. sudo apt-cache search linux-image | grep generic
  2. 安装新内核

    1. sudo apt-get install linux-image-4.15.0-106-generic
  3. 卸载Linux内核

    1. sudo apt-get remove linux-image-4.4.0-101-generic