写在前面:
总体上我们的Nvidia GPU的驱动安装分为下面四步操作:
一.环境准备
二.cuda安装
三.cudnn安装
四.验证
本文所用环境信息描述:
os: ubuntu 14.04
gpu: Nvidia Tesla K80
好, 下面开始安装操作.
一. 环境准备(预配置)
提前安装 gcc , make , g++
apt-get install gcc make g++
1、环境确认
由于tensorflow必须依赖cuda才能使用GPU资源,所以我们首先需要查看系统的显卡是否支持cuda功能:
$ lspci | grep -i nvidia
只有nvidia显卡的特定型号才能支持cuda功能。接下来检测系统的版本号
$ uname -m && cat /etc/*release
不同的系统对应不同的cuda安装包。接下来检测GCC是否已经被安装 :
$ gcc –version
如果已经安装,则可以正常输出版本信息。接下来安装内核头文件 。大部分ubuntu系统内核头文件都已经被事先安装,但是有可能出现内核头文件的版本和内核版本不匹配的情形,而如果不一致可能对cuda的使用带来一定的隐患,所以需要把内核头文件替换为和内核版本相匹配的版本:
$ sudo apt-get install linux-headers-$(uname -r)
如果头文件已经是最新版本,命令行会显示已经是最新版本,无需安装。接下来检测系统的驱动。对于原装的linux系统,默认的显卡驱动往往是自带的nouveau驱动。这是一个开源的驱动程序,是为nvidia显卡编写,但是由于不兼容cuda技术,所以在nouveau驱动的基础上我们无法安装cuda。我们的第一步工作就是禁用nouveau驱动,安装NVIDIA官方提供的显卡驱动。
首先我们检测系统中是否有nouveau模块被载入。
$ lsmod | grep nouveau
如果有结果输出,说明nouveau驱动已经在运行,这时候我们需要将其禁用并安装官方所提供的驱动。modprobe.d文件夹中包含有内核模块的配置参数,我们新建一个文件夹,来阻碍nouveau模块加载。具体步骤如下:
新建blacklist-nouveau.conf:
$ sudo vim /etc/modprobe.d/blacklist-nouveau.conf
加入如下内容:
blacklist nouveau
options nouveau modeset=0
保存退出,然后更新initramfs:
$ sudo update-initramfs -u
接下来我们重启电脑,在重启之后检测系统内核中的nouveau模块:
$ lsmod | grep nouveau
如果检测不到,那就说明禁用成功了,接下来我们可以进行下一步工作了。
二. cuda安装
接下来的工作有两种方式可以完成。其中一种是显卡驱动和cuda工具箱一并自动化安装,这种方法最简单。首先在官网下载最新.run版本。
下载完后,用MD5 检验:
$ md5sum cuda_8.0.27_linux.run
这条指令会让命令行输出一床数字,这是下载文件的MD5码,需要和官网去匹配,如果匹配不正确,说明可能在下载过程中出现了损坏现象,需要重新下载。
在MD5码匹配完成后,我们可以直接运行安装包:
$ sudo sh cuda_8.0.61_375.26_linux-run
然后按照命令行提示,按照默认安装设置。自动安装完成后,我们还需要手动设置环境变量,利用vim编辑:
$ sudo vim /etc/profile
输入:
export PATH=/usr/local/cuda-8.0/bin:$PATHexport LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:$LD_LIBRARY_PATH
为了让文件立即生效,执行:
$ source /etc/profile
这时候cuda8.0彻底安装完毕了。但是整个工作还没有完成,我们还需要对其进行测试,只有测试通过了,才能开始安装tensorflow。由于驱动和cuda工具箱是一起安装的,所以我们需要确认驱动已经正确安装,检验驱动版本:
$ cat /proc/driver/nvidia/version
如果能够正确显示,说明已经正确安装。接下来,检测cuda工具箱的安装,首先看是否可以检测到其版本:
$ nvcc -V
我们希望看到版本号能够正常显示。但是如果显示
The program 'nvcc' is currently not installed. You can install it by typing:
sudo apt-get install nvidia-cuda-toolkit
那有可能是环境变量设置错误,需要重新设置环境变量。
接下来我们可以进行样本编译测试了。由于这个步骤需要花费更长时间,所以应该在以上测试都正确显示的基础上,如果以上测试出现问题,则需要根据提示寻找解决方法。
这时候,在用户的主目录~下会多出一个名为NVIDIA_CUDA-8.0_Samples的文件夹,我们进入这个文件夹:
$ cd ~/NVIDIA_CUDA-8.0_Samples
然后输入:
$ make
接下来需要等待十几到二十分钟,在完成后,进入文件夹~/NVIDIA_CUDA-8.0_Samples/bin/x86_64/linux/release
$ cd ~/NVIDIA_CUDA-8.0_Samples/bin/x86_64/linux/release
执行:
$ ./deviceQuery
结果显示:
最后一行显示Result=PASS,如果失败则显示 Result = FAIL
执行nvidia-smi命令也可以验证驱动安装的有效性:
root@10-19-69-124:/home/ubuntu# nvidia-smi
Wed Aug 2 13:59:27 2017
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 375.66 Driver Version: 375.66 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla K80 Off | 0000:00:08.0 Off | 0 |
| N/A 33C P0 73W / 149W | 0MiB / 11439MiB | 100% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
三. cudnn安装
在cuda工具箱安装完成后,我们可以接着安装cudnn了。
cudnn可以在其官网下载。但是这里需要注意的是,往往需要登录才能下载。在下载完成后,将其解压并复制到以下两个文件夹中
tar xvzf cudnn-8.0-linux-x64-v5.1-ga.tgz
cd cuda
sudo cp ./include/cudnn.h /usr/local/cuda/include/
sudo cp ./lib64/libcudnn* /usr/local/cuda/lib64/
至此,cudnn安装完毕后。
四. 验证
确认显卡驱动安装有效:
ubuntu@10-19-69-124:~$nvidia-smi
Tue Jul 25 18:19:14 2017
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 375.20 Driver Version: 375.20 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla K80 Off | 0000:00:08.0 Off | 0 |
| N/A 35C P0 77W / 149W | 0MiB / 11471MiB | 100% Default |
+-------------------------------+----------------------+----------------------+