Ubuntu16.04 CUDA10 + cuDNN7安装记录

正好赶上给新系统安装CUDA,就详细的记录一下安装过程,我N次安装后的理解,以及一些问题。

首先,庞贝船长的这篇文章真的写的很详细,但是由于他的链接现在挂了,因此我将他的大部分操作说明拷贝了下来,中间斜体的部分是我补充的。大部分步骤都是按照这篇文章里走的,最后亲测成功在Ubuntu 16.04上安装了CUDA 9.2和10,但在18.04上由于其没有lightdm组件,因此失败。也即该文应该仅适用于14.04与16.04版本。在CUDA安装部分务必读一下加粗部分。

安装之前,建议先安装gedit,对于初学者来说比vim好用很多。下面介绍中的vi命令都可用gedit替代。

$ sudo apt-get install gedit 

一、CUDA10安装

0. First of all

0.1 如果之前安装过但失败了的同学请敲下...

a)..deb安装失败的....

$ sudo apt-get --purge remove nvidia*

b).run安装失败的....

$ sudo /usr/local/cuda-8.0/bin/uninstall_cuda_8.0.pl
$ sudo /usr/bin/nvidia-uninstall

在 a) 或 b) 后,若仍安装有问题请敲下

$ sudo apt-get autoremove --purge nvidia-*   #把nvidia驱动清个干干净净
$ sudo reboot

!Note: sudo apt-get remove --purge nvidia-*这条指令并没卸载干净可能存在驱动的冲突导致安装不成功

0.2 建议来一本官方安装手册:

NVIDIA CUDA INSTALLATION GUIDE FOR LINUX

1 PRE-INSTALLATION ACTION

1.1 Verify you have a CUDA-Capable GPU

$ lspci | grep -i nvidia

原博主的机器显示:

01:00.0 3D controller: NVIDIA Corporation GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (rev a1)

我的机器显示:

86:00.0 VGA compatible controller: NVIDIA Corporation Device 1b06 (rev a1)
86:00.1 Audio device: NVIDIA Corporation Device 10ef (rev a1)

查阅了网上资料后,这也是正常的。我这里使用的是1080Ti,应该是机子没有该型号显卡的相关数据,因此只显示了设备编号。最后安装后是正常的。

到 这里 验证型号

1.2 Verify you have a Supported Version of Linux

$ uname -m && cat /etc/*release

结果显示:

x86_64
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
...

1.3 Verify the System Has GCC Installed

$ gcc --version

结果显示:

gcc (Ubuntu 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609
...

1.4 Verify the System has the Correct Kernel Headers and Development Packages Installed

查看正在运行的系统内核版本

$ uname -r

结果显示

4.15.0-65-generic

安装对应的kernels header和开发包:

$ sudo apt-get install linux-headers-$(uname -r)

1.5 Download the NVIDIA CUDA Toolkit

这里下载最新.run版本
这里选择历史版本

2019年10月7日注:Ubuntu16.04建议选择历史版本中的Cuda10.0版本,pytorch和Tenseflow都能较好的支持。14.04不清楚,建议选择8或9版本。

建议将下载完后的文件放置于你的用户目录下,方便安装。就是命令行中敲下

$ cd

后你所在的目录。

下载完后用MD5 检验如果序号不和得重新下载

$ md5sum cuda_10.0.130_410.48_linux.run
9375304c8dc8d42e7f9a9ae37e80b42b  cuda_10.0.130_410.48_linux.run

 

2. RUNFILE INSTALLATION

2.1 Disabling Nouveau

$ lsmod | grep nouveau

如果有内容输出则需禁掉nouveau

$ sudo vi /etc/modprobe.d/blacklist-nouveau.conf

添加如下内容:

blacklist nouveau
options nouveau modeset=0

保存退出(:wq)
执行

$ sudo update-initramfs –u

然后重启电脑,重启后请不要输入登录密码。

$ sudo reboot

重启后第一次进入登录界面时如果发现字体变大变丑,就是成功了。

2.2 Reboot Into Text Mode

重启后进入登录界面的时候不要登录进入桌面(否则可能会失败若不小心进入请重启电脑)直接按Ctrl+Alt+F1进入文本模式(命令行界面)登录账户(先输入你的用户名,然后输入密码)。

执行

$ lsmod | grep nouveau

若无内容输出则禁用nouveau成功。若有,请按Ctrl+Alt+F7回到图形界面,重新检查上述步骤。

关闭图形化界面

$ sudo service lightdm stop

然后在CUDA安装期间,这里庞贝船长的文章没写清楚,只是让OpenGL选no其他都yes。但是首先你应当确定你是否之前已经安装了Nvidia Driver,也就是显卡驱动。执行

$ cat /proc/driver/nvidia/version

结果显示

NVRM version: NVIDIA UNIX x86_64 Kernel Module  361.77  Sun Jul 17 21:18:18 PDT 2016
GCC version:  gcc version 5.4.0 (Ubuntu 4.15.0-65ubuntu1~16.04.10)

则你已经安装了361.77版本的Driver。若没有找到该文件,则未安装。在已有显卡驱动的情况下再次安装显卡驱动,会导致系统崩溃,而这也是绝大多数安装CUDA时系统崩溃的原因。也即:使系统崩溃的不是CUDA,而是在过程中误安装或不匹配的显卡驱动。

如果之前已经安装了某个版本的显卡驱动,解决方法有两个:

1.先卸载之前的驱动(参照0.1节),然后按照庞贝船长文章中的操作进行。(推荐,至少不存在不匹配问题,安装文件中cuda_10.0.130_410.48_linux.run中的410.48即是配套的驱动版本。无需自己额外下载。)

2.在提示是否安装Nvidia Driver时选no,其他照常。(我的同学常用这个方法,但我没测试)

 

切换到cuda_10.0.130_410.48_linux.run的目录,首先敲下ls查看目录下所有文件,然后执行相应的.run文件(这里应该是没法tab补全的)

$ sudo sh cuda_10.0.130_410.48_linux.run

!Note:安装的时候要让你先看一堆文字(EULA)我们直接不停的按空格键到100%,然后敲下accept开始安装

Install NVIDIA Accelerated Graphics Driver for Linux x86_64 327.61?是否安装NVIDIA驱动,按照上面说的情况自己选择。

Do you want to install the OpenGL libraries?是否安装OpenGL,这里选no(崩溃根源,ubuntu通常已安装了一个)。

Do you want to run nvidia-xconfig?是否执行config,网上也没找到干啥用的,但是不安装的话可能导致x-config文件报错,而安装会默认覆盖掉之前的,因此安装即可(不影响使用),yes

Install the CUDA 10.0 Toolkit? 是否安装CUDA,当然装,yes!

Enter Toolkit Location 输入安装路径,直接回车使用Default路径即可。

Do you want to install a symbolic link at /usr/local/cuda 是否创建超链接,这里应该是需要的,因为电脑在使用cuda的时候需要走的链接顺序是cuda->cuda10.0->cudaxxx执行文件。yes

Install the CUDA 10.0 Samples? 是否安装样例,当然,需要样例测试是否安装成功。yes

Enter CUDA Samples Location 输入样例安装位置,还是直接回车使用Default

安装成功后会显示installed否则会显示failed

如果这里显示Driver安装失败,It appears tht an x server is running,则执行

$ sudo apt-get autoremove --purge nvidia-*   #把nvidia驱动清个干干净净
$ sudo reboot

然后从2.2重新开始。

重启图形化界面

$ sudo service lightdm start

登录时能进入桌面不会一直在重复登录,且屏幕显示正常,则成功已近大半。

!Note:如果出现重复登陆情况请卸载cuda,然后重装。
原因:是OpenGLNVIDIA发生了什么什么的。
卸载:由于登陆进入不到图形用户界面(GUI但我们可以进入到文本用户界面(TUI)(TUI很酷有没有?),

  • 在登陆界面时Ctrl + Alt + f1,进入TUI
  • 执行
$ sudo /usr/local/cuda-10.0/bin/uninstall_cuda_10.0.pl
$ sudo /usr/bin/nvidia-uninstall
  • 然后重启
$ sudo reboot
  • 重新安装.run(安装时请留眼在提示是否安装OpenGL应该选no)

2.3 Device Node Verification

执行

$ ls /dev/nvidia*

可能出现a), b), c)d)三种结果请对号入座。前方高能!

  • a) 若结果显示
/dev/nvidia0  /dev/nvidiactl  /dev/nvidia-uvm

或显示出类似的信息应该至少有三个(包含一个类似/dev/nvidia-nvm的)则安装成功

  • b)如果运气有点背结果是这样的
ls: cannot access /dev/nvidia*: No such file or directory

或是这样的只出现

/dev/nvidia0  /dev/nvidiactl

中的一个或两个,笔者每次安装都还会出现一个/dev/nvidia-modeset,但没有/dev/nvidia-num

莫方也许还有希望(我在安装时就是这种情况。。。)按照官方的做法:

把下面的.sh文件随便命个名(我命名为Nka.sh)

#!/bin/bash

/sbin/modprobe nvidia

if [ "$?" -eq 0 ]; then
  # Count the number of NVIDIA controllers found.
  NVDEVS=`lspci | grep -i NVIDIA`
  N3D=`echo "$NVDEVS" | grep "3D controller" | wc -l`
  NVGA=`echo "$NVDEVS" | grep "VGA compatible controller" | wc -l`

  N=`expr $N3D + $NVGA - 1`
  for i in `seq 0 $N`; do
    mknod -m 666 /dev/nvidia$i c 195 $i
  done

  mknod -m 666 /dev/nvidiactl c 195 255

else
  exit 1
fi

/sbin/modprobe nvidia-uvm

if [ "$?" -eq 0 ]; then
  # Find out the major device number used by the nvidia-uvm driver
  D=`grep nvidia-uvm /proc/devices | awk '{print $1}'`

  mknod -m 666 /dev/nvidia-uvm c $D 0
else
  exit 1
fi

然后执行

$ sudo chmod +x Nka.sh
$ sudo ./Nka.sh
$ ls /dev/nvidia*

结果显示

/dev/nvidia0  /dev/nvidiactl  /dev/nvidia-uvm

成功!

1 这种做不太友好我的意思是当下次重启电脑时你使用ls /dev/nvidia*指令时你是看不到那三个nvidia的文件了。所以你又得手动执行
sudo ./Nka.sh指令了是不是很烦!其实上面的.sh文件是startup scipt也就是启动脚本。顾名思义就是在系统启动时自动加载的。哈这么棒的功能就是我们想要的。
2 添加启动脚本的方法大致有两种我就此介绍一种最傻瓜化的方法。
执行

$ sudo vi /etc/rc.local

如果你是第一次打开这个文件它应该是空的(除了一行又一行的#注释项外)。这文件的第一行是

#!/bin/sh -e

-e去掉(这步很重要否则它不会加载这文本的内容)
然后把Nka.sh的内容除了#!/bin/bash外复制到其中(before exit 0 )保存退出。
下次重启时你应该能直接看到/dev目录下的三个nvidia的文件

$ ls /dev/nvidia*
/dev/nvidia0 /dev/nvidiactl /dev/nvidia-uvm
  • c) 如果人品实在不好(我就遇过几次。。。)结果是这样的
modprobe: ERROR: could not insert 'nvidia_uvm': Operation not permitted

少年我救不了你了。但是winney大神可以。(在此谢过她了阿 里 嘎 多!)

当出现这种情况时可能是驱动打起架来了。
执行

$ sudo apt-get autoremove --purge nvidia-* #把nvidia驱动清个干干净净
$ sudo reboot         #一定记得重启不然你会后悔的!

然后

$ sudo ./Nka.sh
$ ls /dev/nvidia*

这时应该可以见到

/dev/nvidia0 /dev/nvidiactl /dev/nvidia-uvm
  • d) 未知有点悲伤的告诉你少年我只能帮到这了,建议网上另寻方案或重装.run。Gook Luck!

 

3 POST-INSTALLATION ACTIONS

3.1 Environment Setup

打开系统配置文件

$ sudo vi /etc/profile

在文件最后添加

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

保存退出

执行

$ source /etc/profile

让文件立即生效

至此cuda 10.0安装完毕。

3.2 Verify the Installation

3.2.1 Verify the Driver Version

敲入

$ cat /proc/driver/nvidia/version

结果显示

NVRM version: NVIDIA UNIX x86_64 Kernel Module  410.48  Sun Jul 17 21:18:18 PDT 2016
GCC version: gcc version 5.4.0 (Ubuntu 4.15.0-65ubuntu1~16.04.10)

或之类的东东

3.2.2 Verify CUDA Toolkit

敲入

$ nvcc -V

结果显示

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2018 NVIDIA Corporation
Built on Wed_May__4_21:01:56_CDT_2018
Cuda compilation tools, release 10.0, V10.0.130

!Note: 如果是这样的:

The program 'nvcc' is currently not installed. You can install it by typing:
sudo apt-get install nvidia-cuda-toolkit

莫方确认下/etc/profile的配置环境是否正确

即使什么都没改可能忘了这一步,或是之前执行了但过了有段时间且又还没重启电脑。因为source /etc/profile是临时生效重启电脑才是永久生效

执行

$ source /etc/profile

再执行(应该就有显示了)

$ nvcc -V

此时如果好了,则证明/etc/profile文件无问题。请重启电脑,如此便无需再source了。

 

3.2.3 Complie sample

cd 进NVIDIA_CUDA-10.0_Samples目录
执行

$  make -j

!Note: 这区间大概需要几分钟到十几分钟请耐心等待。建议来杯caffe

运行完后编译结果会放在NVIDIA_CUDA-10.0_Samples目录下的bin目录

3.2.3 Running the Binaries

执行

$ cd bin/x86_64/linux/release

ls看到一堆可执行文件(菱形的图标)

执行

$ ./deviceQuery

结果显示

./deviceQuery Starting...

 CUDA Device Query (Runtime API) version (CUDART static linking)

Detected 1 CUDA Capable device(s)

Device 0: "GeForce GT 720M"
  CUDA Driver Version / Runtime Version          8.0 / 8.0
  CUDA Capability Major/Minor version number:    2.1
  Total amount of global memory:                 1985 MBytes (2081226752 bytes)
  ( 2) Multiprocessors, ( 48) CUDA Cores/MP:     96 CUDA Cores
  GPU Max Clock rate:                            1250 MHz (1.25 GHz)
  Memory Clock rate:                             800 Mhz
  Memory Bus Width:                              64-bit
  L2 Cache Size:                                 131072 bytes
  Maximum Texture Dimension Size (x,y,z)         1D=(65536), 2D=(65536, 65535), 3D=(2048, 2048, 2048)
  Maximum Layered 1D Texture Size, (num) layers  1D=(16384), 2048 layers
  Maximum Layered 2D Texture Size, (num) layers  2D=(16384, 16384), 2048 layers
  Total amount of constant memory:               65536 bytes
  Total amount of shared memory per block:       49152 bytes
  Total number of registers available per block: 32768
  Warp size:                                     32
  Maximum number of threads per multiprocessor:  1536
  Maximum number of threads per block:           1024
  Max dimension size of a thread block (x,y,z): (1024, 1024, 64)
  Max dimension size of a grid size    (x,y,z): (65535, 65535, 65535)
  Maximum memory pitch:                          2147483647 bytes
  Texture alignment:                             512 bytes
  Concurrent copy and kernel execution:          Yes with 1 copy engine(s)
  Run time limit on kernels:                     No
  Integrated GPU sharing Host Memory:            No
  Support host page-locked memory mapping:       Yes
  Alignment requirement for Surfaces:            Yes
  Device has ECC support:                        Disabled
  Device supports Unified Addressing (UVA):      Yes
  Device PCI Domain ID / Bus ID / location ID:   0 / 1 / 0
  Compute Mode:
     < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >

deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 8.0, CUDA Runtime Version = 8.0, NumDevs = 1, Device0 = GeForce GT 720M
Result = PASS

或之类的东东且最后是 Result = PASS,若失败 Result = FAIL

再来一个执行

$ ./bandwidthTest

结果显示

[CUDA Bandwidth Test] - Starting...
Running on...

 Device 0: GeForce GT 720M
 Quick Mode

 Host to Device Bandwidth, 1 Device(s)
 PINNED Memory Transfers
   Transfer Size (Bytes)    Bandwidth(MB/s)
   33554432         3220.9

 Device to Host Bandwidth, 1 Device(s)
 PINNED Memory Transfers
   Transfer Size (Bytes)    Bandwidth(MB/s)
   33554432         3271.9

 Device to Device Bandwidth, 1 Device(s)
 PINNED Memory Transfers
   Transfer Size (Bytes)    Bandwidth(MB/s)
   33554432         9772.8

Result = PASS

NOTE: The CUDA Samples are not meant for performance measure
ments. Results may vary when GPU Boost is enabled.

少年恭喜你!你已成功安装cuda-10.0,接下来就可以愉快的玩耍了

这里测试完毕后,就可以删除CUDA的安装文件(建议先存到移动硬盘,你以后会经常用到这个安装文件的^_^)和Samples,省的以后看着心烦。当然Nka.sh也可以删掉:

$ cd
$ rm cuda_10.0.130_410.48_linux.run
$ rm -r NVIDIA_CUDA-10.0_Samples/

二、cuDNN7安装

首先,去cuDNN官网,点击Download cuDNN,此时应该会跳转到一个登录界面,在这里登录/注册一个账号。然后登录,应该能看到下面的界面。

下载符合你的CUDA版本的CUDNN的Deb文件,对于16.04 CUDA10就是上图的三个红色横向标注文件。

然后,命令行进入这三个文件所在的文件夹,参照官网说明中的安装方法依次执行

$ sudo dpkg -i libcudnn7_7.6.3.30-1+cuda10.0_amd64.deb
$ sudo dpkg -i libcudnn7-dev_7.6.3.30-1+cuda10.0_amd64.deb
$ sudo dpkg -i libcudnn7-doc_7.6.3.30-1+cuda10.0_amd64.deb

其中文件的具体版本以你下载的为准。

如此就已经安装完毕了。接下来验证是否安装成功。

将测试文件拷贝到你的目录下并编译运行

$ cp -r /usr/src/cudnn_samples_v7/ $HOME
$ cd  $HOME/cudnn_samples_v7/mnistCUDNN
$ make clean && make -j
$ ./mnistCUDNN

如果这时显示Test Passed,恭喜你已经成功完成了安装!

同样的,可以删除掉cuDNN的测试文件,免得心烦:

$ cd
$ rm -r cudnn_samples_v7/

至此,CUDA与cuDNN全部安装完成!

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值