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驱动程序的下载链接)。