一、CUDA-10.1安装:
说明:NVIDIA驱动版本需要与CUDA版本对应,具体参考下图。
1. 下载cuda安装包:
- cuda官网下载:
https://developer.nvidia.com/cuda-10.1-download-archive-update2?target_os=Linux&target_arch=x86_64&target_distro=Ubuntu&target_version=1604&target_type=runfilelocal - 根据系统信息选择对应的版本,下面采用runfile方式安装:
2. 下载完后,用MD5检验:
- 建议将下载的cuda_10.1.243_418.87.00_linux.run放在home目录下。
- 用MD5检验,输入以下命令,出现类似以下信息即可。如果序号不和,得重新下载:
md5sum cuda_10.1.243_418.87.00_linux.run
3. 安装前,首先要禁用 nouveau驱动:
(因安装NVIDIA驱动时已经禁用),在终端运行:
lsmod | grep nouveau
- 若无内容输出,则表示禁用成功。
- 如果有输出则代表nouveau正在加载,需要手动禁掉nouveau,可参考上篇博客安装NVIDIA驱动时的操作。
4. 按 Ctrl+Alt+F1 至 Ctrl+Alt+F6(其中任意一个)进入命令行界面:
登录账户
5. 关闭图形化界面:
sudo service lightdm stop
6. 进行安装:
sudo sh cuda_10.1.243_418.87.00_linux.run --no-opengl-libs
!!!重点:要么在此处加上 --no-opengl-libs 选项,要么在后面通过交互式界面进行手动选择。建议在这里加上!!!
- 执行命令后,稍等一会儿,会出现交互界面,输入 accept;
- 然后出现选择页面进行手动设置(如是否安装NVIDIA驱动及驱动设置),因上篇博客已安装过最新的NVIDIA驱动,所以这里不再安装NVIDIA驱动,即Driver项不勾选,类似下图!
- 若前面没有加 --no-opengl-libs 选项,则此处要在options里手动勾选do not install OpenGL项,即不安装OpenGL!最后选择 install .
!!!注意:若不小心安装了 OpenGL,则后面会遇到循环登陆的问题,原因就是 NVIDIA 显卡的 OpenGL 库覆盖了当前 Intel 显卡的库。解决办法是再登入到文本命令行模式,用以下命令先卸载 CUDA 和 NVIDIA 驱动,再按正确的步骤重新安装 NVIDIA 驱动和 CUDA:
sudo /usr/local/cuda-10.1/bin/cuda-uninstaller
sudo /usr/bin/nvidia-uninstall
(NVIDIA 驱动安装可参考上一篇博客)
7. 安装完成后,重启电脑,检查Device Node Verification:
输入以下命令:
ls /dev/nvidia*
可能出现a、b两种结果,请对号入座。
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
即a中的一个或两个,但没有/dev/nvidia-num,表示文件显示不全,则进行如下操作:
sudo vim /etc/rc.local
- 如果你是第一次打开这个文件,它应该是空的(除了一行又一行的#注释项外)。文件的第一行是:
#!/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
8. 重启,再次输入以下命令:
ls /dev/nvidia*
若显示以下三个文件,则说明安装成功;若没有,检查写入的内容是否正确,并重启后再次查看:
/dev/nvidia0 /dev/nvidiactl /dev/nvidia-uvm
9. 设置环境变量,写入 /etc/profile 文件:
在终端中输入:
sudo gedit /etc/profile
在打开的文件末尾,添加以下两行(64位系统为lib64,32位系统为lib):
export PATH=/usr/local/cuda-10.1/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-10.1/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
保存文件,并重启。因为source /etc/profile是临时生效,重启电脑才是永久生效。
10. 重启电脑后,检查上述的环境变量是否设置成功:
- 验证驱动版本,输入:
cat /proc/driver/nvidia/version
结果显示:
- 验证CUDA Toolkit,输入:
nvcc -V
结果显示:
11. 尝试编译cuda提供的例子:
打开终端,输入:
cd /home/xxx/NVIDIA_CUDA-10.1_Samples
make
系统就会自动进入到编译过程,整个过程大概需要十几到二十分钟,请耐心等待。(第一次运行时可能会报错,提示的错误信息可能会是系统中没有gcc,解决办法就是通过命令重新安装gcc就行,在终端输入:$ sudo apt-get install gcc 安装完gcc后, 再make就正常了。)
如果编译成功,最后会显示Finished building CUDA samples,如下图所示:
运行编译生成的二进制文件。编译后的二进制文件默认存放在NVIDIA_CUDA-10.1_Samples/bin中,接着在终端中输入:
cd /home/xxx/NVIDIA_CUDA-10.1_Samples/bin/x86_64/linux/release #其中xxx是你自己的用户名
./deviceQuery
结果如下图所示,看到 Result = PASS 代表 CUDA 安装且配置成功,若失败 Result = FAIL:
最后再检查一下系统和 CUDA-Capable device 的连接情况。在终端输入:
./bandwidthTest
显示如下图片,则代表成功:
二、cuDNN-v7.6安装:
若之前安装过,需先删除旧版本的cuDNN:
sudo rm -rf /usr/local/cuda/include/cudnn.h
sudo rm -rf /usr/local/cuda/lib64/libcudnn*
1. 从Nvidia官网下载对应版本的安装文件:
官网:https://developer.nvidia.com/rdp/cudnn-archive
这里选择 Installing From A Tar File 的方式进行安装,因此点击 cuDNN Library for Linux 进行下载。
2. 解压下载的文件:
可以看到cuda文件夹:
tar -xvf cudnn-10.1-linux-x64-v7.6.3.30.tgz
3. 复制以下文件到 CUDA Toolkit 目录,并改变文件的权限:
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*
4. 查看cudnn版本:
在终端输入:
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
出现如下图所示的版本信息,说明安装成功:
大功告成啦!