Linux-Mint/Ubuntu 18.04 + RTX 2060 安全安装NVIDIA驱动+CUDA 10.0+cuDNN

Linux-Mint/Ubuntu 18.04, RTX2060 安全安装NVIDIA驱动+CUDA 10.0+cuDNN(亲测防卡死)

  • 简介
    • 什么是CUDA
    • 网上教程错误之处
    • 简要总结
    • 安装步骤
    • 每次重启

简介

以下介绍如何在Linux-Mint/Ubuntu 18.04的环境下安全配置CUDA开发环境。笔者最近由win10换到Linux-Mint,电脑配置是9代I7,RTX 2060,在经历过千辛万苦(N次重装系统 + 卡死)后,结合各论坛讨论总结出CUDA环境的正确食用方式。在这里说一下,网上很多文章都具有误导性(不假思索的机翻),人云亦云,这里提供的方法不需要关闭Linux桌面环境,十分安全方便。

什么是CUDA

首先我们要理解什么是CUDA,知道了它的原理才能让你知道那些网上的虚假教程坑在哪里,以及为什么会让你不止一次的失败、卡死。
CUDA,全称Compute Unified Device Architecture,是NVIDIA开发的GPGPU使用技术,旨在通过整合CPU、GPU优化程序的多线程性能。CUDA中有Host和Device,其中Host是CPU(这里指9代I7), Device指GPU(RTX2060)。CUDA开始于CPU,但通过把并行程度较高的部分分配给GPU执行提高效率,CUDA的执行会大量消耗GPU的算力,导致显示不正常,但在windows环境下系统会自动切换到核显。

网上教程错误之处

简要介绍了CUDA,那让我们看看网上教程及部分讨论有什么错误的地方,首先我们要知道Ubuntu 18.04/Linux-Mint的初始安装环境下,用的是NVIDIA的nouveau公版开源驱动,由于这是开源,导致并不完全兼容N卡,而且相比闭源驱动无法发挥N卡的最高性能(在此对老黄素质三连)。Ubuntu 18.04 LTS版本是自带有最新的430版本驱动的。
那么那些错误到底有哪些呢:

  1. 直接安装430版本驱动,而没有blacklist nouveau驱动,由于nouveau驱动会导致和430驱动冲突,会导致登录界面无线循环卡死
  2. 直接通过deb包安装CUDA 10.0/10.1, 此法过于激进,因为10.0会默认安装410驱动,10.1安装418驱动,这些办法一旦驱动没有安装正确(如显卡不兼容)会导致无线卡死。。。
  3. 安装430驱动,禁用nouveau驱动后通过deb包安装CUDA,此法导致430驱动被卸载,低版本驱动被安装,很容易导致一系列错误造成N卡无法正常启动
  4. 安装步骤基本正确没问题,但运行程序时桌面卡死,这是因为CUDA程序会大量消耗GPU的算力导致其无法正常作为显示卡使用

简要总结

那么如何安装才算正确呢?注意上述方法虽然看似无解,都是可以避免的,这里介绍本人多次尝试后总结的步骤(后附上指令):

  1. 安装430驱动,安装nvidia-prime,切换至Intel显卡
  2. 禁用nouveau驱动,重启
  3. 下载CUDA 10.0的local runfile包,安装,注意不要安装硬件加速(第二个选NO),重启
  4. 下载CUDNN,解压后安装,重启
  5. 检查nvcc -V,以及nvidia-smi,如果都显示正常就可以了

这里我们通过安装nvidia-prime避开这些问题

安装步骤

sudo apt install nvidia-prime

sudo prime-select intel

sudo prime-select query

确认是‘intel’
打开additional driver菜单,安装430驱动
安装完毕后不要急着重启,这时禁用nouveau:

sudo bash -c "echo blacklist nouveau > /etc/modprobe.d/blacklist-nvidia-nouveau.conf"

sudo bash -c "echo options nouveau modeset=0 >> /etc/modprobe.d/blacklist-nvidia-nouveau.conf"

cat /etc/modprobe.d/blacklist-nvidia-nouveau.conf

确认是:

blacklist nouveau
options nouveau modeset=0

更新内核initramfs:

sudo update-initramfs -u

sudo reboot 重启

官网下载CUDA toolkit 10.0:
https://developer.nvidia.com/cuda-10.0-download-archive?target_os=Linux&target_arch=x86_64&target_distro=Ubuntu&target_version=1804&target_type=runfilelocal

cd Downloads
sudo chmod u+x cuda_10.0.130_410.48_linux.run
sudo ./cuda_10.0.130_410.48_linux.run

执行安装
问到要不要安装410图形加速套件时选择NO,如果yes系统会卸载430驱动安装410驱动

安装完成后

sudo nano ~/.bashrc

最后加入两行:

export PATH=/usr/local/cuda-10.0/bin${PATH:+:$PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

ctrl X退出,y保存
然后 source ~/.bashrc
这时候输入:
nvcc -V 就可以看出来cuda版本了,10.0

官网下载10.0对应的CuDNN包,然后解压后把cuda下的文件拷贝至/usr/local/cuda:

sudo cp cuda/include/cudnn.h    /usr/local/cuda/include
sudo cp cuda/include/cudnn.h    /usr/local/cuda/include
sudo chmod a+r /usr/local/cuda/include/cudnn.h   /usr/local/cuda/lib64/libcudnn*

这一步某个教程写的很详细了:https://blog.csdn.net/u010801439/article/details/80483036

到此时就安装完成了,重启
注意我们这里用的显示卡都是intel的核显,而N卡是作为计算卡使用,然后安装tensorflow,pycharm,caffe, hashcat吧~
(别问我安装hashcat干什么,嘿嘿)

如果nvidia-smi显示错误,切换N卡: sudo prime-select nvidia
然后输入:

dmesg | grep NVRM

查看nvidia-smi
正确的话切回来sudo prime-select intel
通过用intel显示卡我们可以尽可能发挥N卡的计算效能,以及运行CUDA程序的效率。

每次重启

注意因为我们选择了Intel核显作为主显示卡,所以开机时N卡的CUDA模块不会加载,而如果我们
需要用到CUDA时怎么用呢?

ctrl + alt + T打开terminal,输入:

nvidia-smi

显示:

NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.

不用慌,我们继续输入:

sudo prime-select nvidia

显示:

No devices were found

继续输入:

dmesg | grep NVRM

就可以加载CUDA内核模块了,这时候输入nvidia-smi查看就可以出来啦:

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 430.26       Driver Version: 430.26       CUDA Version: 10.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce RTX 2060    Off  | 00000000:01:00.0 Off |                  N/A |
| N/A   55C    P8     3W /  N/A |      6MiB /  5934MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

注意:此时应切换回核显以求保险

sudo prime-select intel

这一步有时间的同学可以用bash脚本实现自动化,就不用每次开机都这么烦了 :D
以下附上脚本:
打开一个空的shell文件,就叫它cuda_init.sh吧

touch cuda_init.sh
sudo nano cuda_init.sh

打开shell脚本,输入:

#! /bin/bash
prime-select nvidia
dmesg | grep NVRM
nvidia-smi
prime-select intel
echo "CUDA has been initiated!"

保存以后退出
每次开机执行:

sudo ./cuda_init.sh

就可以省去之前的步骤
(其实我只是为了炫耀一下新笔记本上的2060)

你可能感兴趣的:(Linux-Mint/Ubuntu 18.04 + RTX 2060 安全安装NVIDIA驱动+CUDA 10.0+cuDNN)