Ubuntu 18.04安装CUDA(版本10.2)和cuDNN

1.系统要求

2.安装前的要求

3.runfile安装(不支持跨平台)

4.后续安装操作

5.安装cuDNN

6.汇总问题

       本文基于Ubuntu 18.04.3 LTS 64位安装CUDA 10.2和对应版本的cuDNN,GPU型号为ZOTAC RTX2080Ti-11GD5。

       NVIDIA DEVELOPER ZONE提供的CUDA TOOLKIT DOCUMENTATION,极具参考价值。

1.系统要求
       为了能够使用CUDA,我们需要进行如下配置或下载:

       1)支持CUDA的GPU。NVIDIA给出的官方网址,可以用来查询GPU是否支持CUDA;

       2)受支持的Linux版本,具有gcc编译器和工具链。由下图可以看到CUDA 10.2支持的本地Linux发行版;

       

2.安装前的要求
       1)确认系统安装了gcc编译器;

# 查看当前系统的gcc版本
$ gcc --version
# 若没有安装gcc,则执行以下命令
$ apt install gcc
       2)确认系统安装了满足要求的Kernel Header和Development Package;

# 查看系统正在运行的Kernel Header
$ uname -r
# 执行系统更新后,为了确保Kernel Header和正在运行的Kernel相匹配,需要执行以下命令
$ sudo apt-get install linux-headers-$(uname -r)
       3)选择一种安装方法,并下载CUDA工具包(下载链接)

       CUDA工具包的安装机制有两种,定制发行包(RPM和Deb包)和独立发行包(runfile包)。独立发行包的优点是支持更多的Linux发行版,而且不需要更新Linux的本机软件包管理系统。定制发行包与Linux的本机软件包管理系统对接。官方给出的建议是尽可能使用定制发行包,但在本次安装中所使用的是独立发行包(runfile包)。

       

       

# 下载完成后,需要验证工具包是否完整
$ md5sum cuda_10.2.89_440.33.01_linux.run
       下载页面下方提供了installer Checksums,可以与执行以上命令生成的校验码进行比对,一致则确认文件完整。

       

       4)处理安装冲突的方法(在安装过程中,未做该步骤)

       在安装CUDA之前,应将以前安装的与之冲突的CUDA工具包和NVIDIA驱动程序卸载。

       CUDA工具包安装兼容表

       

       NVIDIA驱动程序安装兼容表

       

# 使用下面的命令卸载工具包的runfile安装
$ sudo /usr/local/cuda-X.Y/bin/uninstall_cuda_X.Y.pl
# 使用下面的命令卸载驱动程序的runfile安装
$ sudo /usr/bin/nvidia-uninstall
# 或者使用下面的命令卸载RPM/Deb安装
$ sudo apt-get --purge remove <package_name>
3.runfile安装(不支持跨平台)
       1)禁用Nouveau

       为了安装显示驱动程序,Nouveau驱动程序必须首先被禁用。每个Linux的发行版有不同的方法禁用Nouveau。

# 若执行以下命令打印内容,则Nouveau驱动程序被加载
$ lsmod | grep nouveau
# Nouveau驱动程序被加载时,执行如下;否则到此为止
# 创建包含以下内容的文件/etc/modprobe.d/blacklist-nouveau.conf
  blacklist nouveau
  options nouveau modeset=0
# 重新生成kernel initramfs
$ sudo update-initramfs -u
       2)设备节点验证

       检查设备文件/dev/nvidia*是否存在并且有正确的文件权限(0666)。CUDA驱动程序使用这些设备文件与NVIDIA驱动程序的内核模态部分进行通信。正常情况下,诸如CUDA应用程序或X服务器(如果有的话)等使用NVIDIA驱动程序的应用程序将会自动创建这些文件,除非丢失了与NVIDIA驱动程序绑定在一起的setuid nvidia-modprobe工具。然而,一些系统禁用setuid二进制文件,当这些文件不存在时,可以使用以下启动脚本手动创建它们。

#!/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
       3) 安装CUDA工具包

       重启电脑,在登陆界面按组合键Ctrl+Alt+F1(F1~F6亲试都可以,Ctrl+F7可以退出)进入文本模式,登录用户。

# 关闭图形化界面
$ sudo service lightdm stop
# 查看状态,确认是否关闭,关闭成功状态为dead
$ sudo service lightdm status
# 进入下载CUDA runfile文件的路径,安装CUDA工具包
$ sudo sh cuda_10.2.89_440.33.01_linux.run
        

       

       

       在该步骤遇到的问题可以跳转到最后的汇总问题中查找链接解决。

4.后续安装操作
       1)设置环境变量

       路径变量需要包括/usr/local/cuda-10.2/bin和/usr/local/cuda-10.2/NsightCompute-<tool-version>. <tool-version>(CUDA随附的Nsight Compute版本,例如2019.1)。

# 添加路径到PATH变量
$ export PATH=/usr/local/cuda-10.2/bin:/usr/local/cuda-10.2/NsightCompute-2019.1${PATH:+:${PATH}}
# 此外,使用runfile安装时,64位系统上的LD_LIBRARY_PATH变量需要包含/usr/local/cuda-10.2/lib64
$ export LD_LIBRARY_PATH=/usr/local/cuda-10.2/lib64\
                         ${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
       2)重启图形化界面

# 执行下面命令,重启图形化界面
$ sudo service lightdm start
# 查看图形化界面是否启动
$ sudo service lightdm status
       按组合键Ctrl+Alt+F7返回到图形化登录界面,输入账户密码。如果登录成功,就表示不会遇到循环登录的问题,说明CUDA安装成功。循环登录的情况并未遇到,可以查看文末的参考链接,里面有所提及。 

       3)安装持久化守护程序(官方推荐)

       在Linux上,NVIDIA提供了用户空间守护程序,支持跨CUDA作业运行的驱动程序状态的持久化。与持久化模式相比,守护程序方法提供了一种更优雅和鲁棒的解决方法。

# 以root用户启动NVIDIA Persistence Daemon
$ /usr/bin/nvidia-persistenced --verbose
       4)确认安装成功

       在继续之前,重要的是确认CUDA工具包能够找到并且正确地与支持CUDA的硬件通信。为此,需要编译并运行其中一些示例程序。注意:确认在runfile安装机制中正确设置了PATH和LD_LIBRARY_PATH变量。

# 通过执行以下命令来确定驱动程序的版本,该命令在独显中不起作用
$ cat /proc/driver/nvidia/version
 
       汇编示例。如果不加make后的参数,可能会遇到错误。

# 进入~/NVIDIA_CUDA-10.2_Samples目录,使用下面命令进行汇编
$ make -k
       编译完成后,运行二进制文件。在~/NVIDIA_CUDA-10.2_Samples目录下找到并运行deviceQuery文件,如果CUDA软件安装和配置正确的话,deviceQuery的输出应该如下所示。

$ cd ~/NVIDIA_CUDA-10.2_Samples/bin/x86_64/linux/release
$ ./deviceQuery
       

       真正的输出取决于系统。第一行显示检测到设备,第二行显示设备型号,最后一行显示测试通过。如果设备支持CUDA且CUDA驱动程序已经安装,但是deviceQuery文件报告现在没有支持CUDA的设备,那就可能是/dev/nvidia*文件丢失或者权限问题,还有可能是未关闭SELinux。

5.安装cuDNN
       下载cuDNN(除deb安装外,还有压缩包的下载链接,前者需要注册登录),然后按照NVIDIA官方提供的安装文档进行安装。进入下载目录,执行以下命令。

# 安装runtime库
$ sudo dpkg -i libcudnn7_7.6.5.32-1+cuda10.2_amd64.deb
# 安装developer库
$ sudo dpkg -i libcudnn7-dev_7.6.5.32-1+cuda10.2_amd64.deb
# 安装代码示例和《cuDNN库用户指南》
$ sudo dpkg -i libcudnn7-doc_7.6.5.32-1+cuda10.2_amd64.deb
       验证cuDNN在Linux上是否安装成功。为了验证cuDNN已经安装并正确运行,需要编译位于/usr/src/cudnn_samples_v7目录下的mnistCUDNN样例。

# 将cuDNN示例复制到可写路径
$ cp -r /usr/src/cudnn_samples_v7/ $HOME
# 进入到可写路径
$ cd  $HOME/cudnn_samples_v7/mnistCUDNN
# 编译mnistCUDNN示例
$ make clean && make
# 运行mnistCUDNN示例
$ ./mnistCUDNN
       如果已经正确安装cuDNN,示例将运行在Linux系统上。这时,你将会看到Test passed!的提示。

6.汇总问题
       1)安装过程中出现gcc++的问题,可以参考该链接。

       2)在安装完成后,强迫症患者会升级和更新软件包,相关命令可参考该链接(慎用,可能问题是NVIDIA驱动失效,需重装)。

       3)安装NVIDIA驱动程序的过程中出现内核版本不一致的问题,并无影响,参看该链接。在这里需要多说一句,BIOS中的安全启动项需要在安装前检查是否被禁用,很多参考中(例如)针对不同问题都提出禁用的建议。

       4)除NVIDIA提供的官方文档外,还参考了以下文章,感谢博主和知友。

       ① Ubuntu 16.04 上安装 CUDA 9.0 详细教程

       ② Ubuntu16.04下安装cuda和cudnn的三种方法(亲测全部有效)

       ③ Ubuntu 18.04安装CUDA和cuDNN

       ④ 环境乃一生之敌 01 nvidia驱动+cuda安装帮助

       ⑤ CUDA及NVIDIA驱动安装总结(只安装NVIDIA驱动)

       5)NVIDIA显卡驱动的安装问题,可以参考该链接(提到独显和集显切换)和该链接。

       6)CUDA driver version is insufficient for CUDA runtime version,在重新安装NVIDIA驱动程序后解决了该问题(NVIDIA驱动程序的下载链接)。
 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI周红伟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值