Ubuntu 16.04下安装NVIDIA驱动程序 + CUDA 8.0 + cuDNN 6.0 January 9, 2018 > 吃鸡总有吃腻的那天,看着屏幕前倒在我枪口下的队友,我毅然决然的决定在自己的[PC机](https://feelncut.com/2018/01/09/44.html)上装个Ubuntu,开始步入深度调参这条不归路... #### **安装其他版本的CUDA与cuDNN步骤一样!!** 原本PC上只有一块M.2的固态硬盘,为了搭建深度学习环境,搞了一块500G的古董机械硬盘,首先分出来100G在Win下用~~装GTAV~~,剩下不到400G用来装Ubuntu。 我看着手中的U盘微微一笑:smirk:,熟练的把他插进了机箱上的USB口。如题目所讲,我装了一个`Ubuntu16.04 LTS`,台式机硬件配置见[这里](https://feelncut.com/2018/01/09/44.html)。 [TOC] # 安装NVIDIA驱动程序 刚装完系统会发现屏幕的分辨率不对,这是因为独显驱动的问题,首先在官网找到自己显卡对应的驱动,官网 > http://www.nvidia.com/Download/index.aspx?lang=cn 我下载的是`NVIDIA-Linux-x86_64-384.111.run`,我的Ubuntu用户名为`pizi`,在`/home/pizi/`下创建了`driver`目录,之后用到的安装包全放在这里,路径里最好**不要有中文名**。 我的安装过程很暴力: ```bash cd /home/pizi/driver sudo chmod 777 NVIDIA-Linux-x86_64-384.111.run ``` 然后`CTRL+ALT+F1`登录控制台,输入账户和密码,之后: ```bash sudo service lightdm stop ``` 在这里因为用到`sudo`,所以会提示输入密码,如果看到乱码不要慌张,默默的输入密码然后回车就是了,后面如果出现也一样。接着: ```bash sudo init 3 cd /home/pizi/driver # 进入安装程序 sudo ./NVIDIA-Linux-x86_64-384.111.run ``` 安装第一部会提示协议条款,`accept`即可;之后按照提示进行安装,中间会提示警告`32-bit`文件无法安装,忽略即可,接着下一步;接下来根据提示一步一步安装即可...(我记得有一步提示有个什么文件用不用安装,都装了呗) 安装完成后,重启: ```bash sudo reboot ``` 重启后会发现分辨率已经自动改正好了,在命令行输入: ```bash nvidia-smi ``` 提示: ![](/images/2018/01/1682529089.png) 恭喜,显卡驱动装好了。 > 可以`sudo ./NVIDIA-Linux-x86_64-384.111.run --uninstall`进行卸载 在PC上装了SSH-Service,在实验室可以远程继续装环境了,以下过程全在**远程SSH**(本地应该也没问题)下完成。 # 安装CUDA 8.0 为什么装`CUDA8.0`?应为这个版本即支持`TensorFlow`,又可以用`MXNet`,还可以用`Matlab`和`caffe`等。 在这里找下载地址,需要注册一个帐号: > https://developer.nvidia.com/cuda-release-candidate-download 我下载了`cuda_8.0.61_375.26_linux.run`,并把它放到了`/home/pizi/driver`。接下来开始安装: ```bash cd /home/pizi/driver sudo chmod 777 cuda_8.0.61_375.26_linux.run sudo ./cuda_8.0.61_375.26_linux.run ``` 会提示安装协议,`accept`即可: ```bash Do you accept the previously read EULA? accept/decline/quit: accept ``` 提示是否安装显卡驱动,因为第一步已经装过了,所以这里`n`: ```bash Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 375.26? (y)es/(n)o/(q)uit: n ``` 然后选择安装目录,默认就好(直接回车): ```bash Enter Toolkit Location [ default is /usr/local/cuda-8.0 ]: ``` 接着是否创建链接,`y`创建即可: ```bash Do you want to install a symbolic link at /usr/local/cuda? (y)es/(n)o/(q)uit: y ``` 接下来提示是否安装Sample,程序示例,以及保存位置,最好进行安装,一会测试是否安装成功用,保存位置默认即可: ```bash Install the CUDA 8.0 Samples? (y)es/(n)o/(q)uit: y Enter CUDA Samples Location [ default is /home/pizi ]: ``` 其实到现在`CUDA 8.0`已经安装好了,它的提示中有一段: ```bash Please make sure that - PATH includes /usr/local/cuda-8.0/bin - LD_LIBRARY_PATH includes /usr/local/cuda-8.0/lib64, or, add /usr/local/cuda-8.0/lib64 to /etc/ld.so.conf and run ldconfig as root To uninstall the CUDA Toolkit, run the uninstall script in /usr/local/cuda-8.0/bin ``` 倒着看,首先说可以在`/usr/local/cuda-8.0/bin`运行卸载程序,看了一下,里面有`perl`脚本`uninstall_cuda_8.0.pl`用来卸载,就算之前没有安装Sample页面关系,里面有`cuda-install-samples-8.0.sh`脚本可以安装,目录如下图: ![](/images/2018/01/195122532.png) 然后又提示需要添加环境变量和设置,这样操作(我感觉`nano`比较好用,也可以用vim/vi/gedit): ```bash sudo nano /etc/profile # 在最后加入 export PATH=/usr/local/cuda-8.0/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:$LD_LIBRARY_PATH # ctrl + x 保存 source /etc/profile sudo nano /etc/ld.so.conf cat # 在最后加入 /usr/local/cuda-8.0/lib64 # ctrl + x 保存 sudo ldconfig ``` 大功告成,输入`ldconfig -v|grep cuda`,如果看到: ```bash libicudata.so.55 -> libicudata.so.55.1 libcuda.so.1 -> libcuda.so.384.111 libcudart.so.8.0 -> libcudart.so.8.0.61 ``` 就算设置好动态链接库了。接下来为编译Sample安装必须的开发工具: ```bash sudo apt-get update sudo apt-get install build-essential sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev ``` 安装完成后你可以选择编译全部Samples(速度慢): ```bash cd /usr/local/cuda-8.0/NVIDIA_CUDA-8.0_Samples # 多线程编译 sudo make -j8 ``` 编译完成后在`NVIDIA_CUDA-8.0_Samples/bin/x86_64/linux/release`目录里可以看到变好的二进制文件,可以随便选择一个运行测试,比如`./deviceQuery`,当然,在可以`NVIDIA_CUDA-8.0_Samples`目录里进入`1_Utilities/deviceQuery`进行`make`,在输出二进制目录里运行编译好的程序。 **如果安装过程中提示`toolkit installation failed using unsupported compiler`。这是因为GCC版本不合适所导致的。试试`sudo ./cuda_8.0.61_375.26_linux.run -override`。** # 安装cuDNN 6.0 其实CUDA和cuDNN都是编译好的二进制文件,把他们放到自己的系统目录,设置好环境变量就可以使用了,对于cuDNN,选择6.0是因为`TensorFlow`官方的推荐,`MXNet`也可以使用。在下面地址下载: > https://developer.nvidia.com/cudnn 我下载了`cudnn-8.0-linux-x64-v6.0.tgz`,依然放入了`home/pizi/driver`,接下来进行安装: ```bash tar -xvf cudnn-8.0-linux-x64-v5.1.tgz # 解压到了cuda文件夹 cd cuda sudo cp ./include/cudnn.h /usr/local/cuda-8.0/include sudo cp -a ./lib64/libcudnn* /usr/local/cuda-8.0/lib64 ``` 至此,全部安装完成:tada:。 # 后记 - `sudo apt upgrade`后发现无法找到显卡驱动,`nvidia-smi`无法显示,不要慌张,重新安装一下显卡驱动就行了,其他环境不用动。 - 如需安装其他版本CUDA与cuDNN,下载相应的安装包即可,安装步骤和上述步骤基本一致,可参考上述步骤。 # 补充:分开安装CUDN与cuDNN 看完文章后你会发现CUDNN与cuDNN都是编译好的二进制文件及头文件,完全可以分开放,分开放的好处是可以自由的组合不同版本的CUDNN与cuDNN,比如我再搭建GPU容器那篇文章里,在共享文件夹里放了不同版本的CUDA与cuDNN,每个容器可以自由选择,只需要在`/etc/profile`于`ldconfig`中配置相应的路径即可。 比如`/etc/profile`: ``` # CUDN配置 export PATH=$PATH:/A-pool/cuda/cuda-9.0/bin:/A-pool/cuda/cuda-9.0/include export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/A-pool/cuda/cuda-9.0/lib64 export CUDA_HOME=/A-pool/cuda/cuda-9.0 # cuDNN配置 export PATH=$PATH:/A-pool/cudnn/cuda-9.0-cudnn-7.0/include export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/A-pool/cudnn/cuda-9.0-cudnn-7.0/lib6 ``` `/etc/ld.so.conf `: ``` /A-pool/cuda/cuda-9.0/lib64 /A-pool/cudnn/cuda-9.0-cudnn-7.0/lib64 ``` # 参考 [1] http://blog.csdn.net/u012581999/article/details/52433609 [2] http://blog.csdn.net/Suodislie/article/details/70228138