Ubuntu16.04安装CUDA9.0+CUDNN7.0详细教程

Ubuntu16.04安装cuda9.0+cudnn7.0

这篇记录拖了好久,估计是去年6月份就已经安装过几遍,然后一方面因为俺比较懒,一方面后面没有经常在自己电脑上跑算法,比较少装cuda和cudnn。但是最近课余时间还行,索性一起整理出来,方便以后查看。

  1. 检查自己的计算机是否具备CUDA安装条件

    • 检查GPU是否支持CUDA

      lspci | grep -i nvidia
      

      显示出NVIDIA GPU版本信息

    • 去CUDA的官网查看自己的GPU版本是否在CUDA的支持列表中(https://developer.nvidia.com/cuda-gpus

      uname -m && cat /etc/*release
      

    • 验证是否安装了gcc

      gcc --version
      

      如果没有,那就安装之

      sudo apt install gcc
      
    • 验证系统是否安装kernel header和 package development

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

      满足要求后,便可进行下面的正式安装过程。

      注意:CUDA提供两种安装方式:package manager安装和runfile安装。

      这里我选择runfile安装.。采用runfile安装,CUDA自带的驱动可能无法定位内核信息,所以我们先安装NVIIDA驱动。

  2. 安装NVIDIA驱动

    • 事先有装过但失败的,先卸载

      sudo apt remove --purge nvidia*
      
    • 禁用nouveau驱动

      lsmod | grep nouveau
      

      有输出,则代表nouveau正在运行, 需要我们手动禁掉nouveau。

      在Ubuntu16.04中,我们可以通过以下操作禁用nouveau:

      1).在/etc/modprobe.d中创建文件blacklist-nouveau.conf

      sudo vim /etc/modprobe.d/blacklist-nouveau.conf
      

      在文件中输入以下内容:

      blacklist nouveau
      options nouveau modeset=0
      

      2)执行

      sudo update-initramfs -u
      

      3)查看nouveau是否已经成功禁用

      lsmod | grep nouveau
      

      注意:若无内容输出,则禁用成功。若仍有内容输出,请检查上述操作,并重复。操作无误但仍有输出,则可重启,进入用户登录界面时(不要登录进桌面),按Ctrl+Alt+F1进入字符终端界面,输入用户名和密码进行登录,登录成功后,再次查看

      这时,我们应该已经成功禁用了nouveau,无输出

    • 关闭图形化界面

      sudo service lightdm stop
      
    • 安装驱动
      NVIDIA驱动安装也有多种方式,runfile文件形式的安装和apt安装

      apt安装:

      1).添加Graphic Drivers PPA

      sudo add-apt-repository ppa:graphics-drivers/ppa
      sudo apt-get update
      

      2).寻找合适的驱动版本

      ubuntu-drivers devices
      

    如上图,我的显卡它建议的是 nvidia-418

    3).安装nvidia driver

     sudo apt install nvidia-418
    

    速度比较慢,应该不是ubuntu源的问题,用了墙外的服务器apt install速度也还是不快,安心等”戴“吧

    4).安装完成后,重启

     sudo reboot
    

    5).进入桌面,执行下面的命令,查看驱动的安装状态

     sudo nvidia-smi
     sudo nvidia-settings
    

    runfile文件安装:

    1) runfile文件的安装先要安装gcc-multilib

    sudo apt install gcc-multilib
    

    2) 以NVIDIA-Linux-x86_64-418.40.run为例

    sudo sh NVIDIA-Linux-x86_64-418.40.run
    

    刚开始运行时,会有报错(预处理脚本错误,会问继续还是退出),不管错误继续,然后就是一路安装,重启即可。测试是否安装成功如上图所示

  3. 安装CUDA 9.0

    之后,按Ctrl+Alt+F1进入字符终端界面,登录后关闭图形化界面

    sudo service lightdm stop
    

    这边我其实用的是命令行直接下载,因为我不喜欢等下再去找文件,而且cuda那个貌似直接下载也有点毒,每次到最后就停在那里了,令人生气,所以可以的话我一般用命令行下载(下面就有一个例子)

    wget https://developer.nvidia.com/compute/cuda/9.0/Prod/local_installers/cuda_9.0.176_384.81_linux-run

    找到下载文件,键入类似命令安装:

    sudo sh cuda_9.0.176_384.81_linux-run
    

    会有很长一段,直接ctl+c跳过,出现类似下面的选项,除了第二个选择“是否为NVIDIA安装驱动”,

    选择否,不然之前的显卡驱动就白折腾了。

    可以按给出的选择

    最后会看到cuda驱动、sample、tookit已经安装成功,但缺少一些库。

    添加这些库

    sudo apt install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev
    

    重新启动图形化界面

    sudo service lightdm start
    

    同时按Alt + ctrl +F7,返回到图形化登录界面。

    如果能够成功登录,则表示不会遇到循环登录的问题,基本说明CUDA的安装成功了

    检查Device Node Verification

    ls /dev/nvidia*
    

    a、若结果显示

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

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

    如果只有两个或者一个都没有,文末有记录解决方法。

    设置环境变量

    sudo vim ~/.bashrc
    

    注意:.bashrc是当前用户生效的环境变量,(比如我是lzm)如果想对全部用户生效,可以在/etc/profile文件中设置

    按i(inset)进行编辑,在打开的文件末尾,添加以下两行,然后按esc 后按:wq保存退出

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

    保存文件,让环境变量生效

    source ~/.bashrc
    

    检查上述的环境变量是否设置成功。

    a.验证驱动版本

    cat /proc/driver/nvidia/version
    

    b.验证CUDA Toolkit

    nvcc -V
    

    c.最后,尝试编译cuda提供的例子,看cuda能否正常运行

    打开终端输入

     cd /home/lzm(user_name)/NVIDIA_CUDA-9.0_Samples
     make
    

    系统就会自动进入到编译过程,整个过程大概需要十几到二十分钟,请耐心等待。如果出现错误的话,系统会立即报错停止。如果编译成功,最后会显示Finished building CUDA samples。运行编译生成的二进制文件,编译后的二进制文件默认存放在NVIDIA_CUDA-9.0_Samples/bin中。

    接着在终端中输入 :

     cd bin/x86_64/linux/release
     ./deviceQuery  
    
    

    结果如下图所示,其中 Result = PASS代表成功,CUDA安装且配置成功,若失败 Result = FAIL

    最后检查一下系统和CUDA-Capable device的连接情况

    ./bandwidthTest
    
    

    看到显示Result=PASS则成功

  4. 安装cudnn

    cuDNN的安装是建立在我们成功安装cuda的基础上的,本来我是想用终端直接下载cudnn的像上面的cuda一样,但是当我wget的时候发现报错了:(HTTP request sent, awaiting response… 404 Not Found) 才想起来cuDNN是需要登陆NVIDIA账号才能下载的。

    官网下载连接

这里我以tgz文件的安装为例

Attention:

(这边有个要注意的,因为我之前下载过的是tgz压缩包,直接按下面命令解压就行。然后今天下载是以solitairetheme8结尾的,然后刚开始我不知道linux是用什么命令解压这种文件的,所以就去查了一下,就是直接重命名这玩意然后按下面命令解压就?了)

  • 解压tgz文件
   tar -xzvf cudnn-9.0-linux-x64-v7.tgz
  • 复制文件到cuda安装路径下
   sudo cp cuda/include/cudnn.h /usr/local/cuda/include
   sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
   sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*
  • 然后查看cudnn版本,出现如下图则安装成功
   cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

Bingo!!!好了,记录一遍也好累啊,真想再重新验证一遍看看是不是完美兼容。可是我有点懒,不想去开其他的机子了,只测试了Ubuntu16.04的可以安装,其他的版本不晓得,不过基本思想是一样的

可能出现的问题

ls /dev/nvidia*

可能出现

ls: cannot access/dev/nvidia*: No such file or directory

或者只出现

/dev/nvidia0    /dev/nvidiactl

选项中的一个或两个,但没有/dev/nvidia-uvm,即文件显示不全。

解决方法:
首先要添加一个启动脚本,如果是第一次打开这个文件,它应该是空的(除了一行又一行的#注释项外)。这文件的第一行是

#!/bin/sh -e
把-e去掉(这步很重要,否则它不会加载这文本的内容),然后把下列内容复制到exit 0之前并保存退出。
/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

再次查看

ls /dev/nvidia*

结果显示:

其中三个包括 /dev/nvidia-uvm即可。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值