现在学习实战深度学习都是用些开源的框架,使用GPU可大大提高训练和测试速度,所以安装CUDA成为必须要做的,尽管网上教程很多,但是不一定适合所有的环境,关键还是自己的实践。我写这个教程一方面是为自己做个记录,另一方面给新手一个参考。
工欲善其事必先利其器,首先把自己遇到的坑先说明下。如今新的Windows PC都是带有UEFI固件的,而且也开启了Secure Boot功能。什么用呢,简单说明下:如今新的WindowsPC都是带有UEFI固件的,而且也开启了SecureBoot功能。Secure Boot可以拒绝引导那些未被UEFI秘钥签名的操作系统,换句话说,只有微软认证的软件才可以被引导。同时还会导致一个问题就是无法使用CUDA安装NVIDIA驱动或者安装CUDA后没有NVIDIA设备。如何解决呢,首先就是要进入BIOS把Secure Boot置为Disable(如果你的电脑无法选为Disable,那无能为力了,换个电脑吧)。再一个情况就是双显卡电脑,现在很多的电脑都是一个独显一个核显,这种情况下极易导致系统无法进入图形界面或者是循环登录,这是由于安装NVIDIA驱动或者CUDA时安装了opengl,覆盖了核显的gl库。下面开始教程:
硬件环境:CPU i5-7300 8G内存 GTX1050 4G显存
系统环境:Ubuntu16.04
软件包准备:https://developer.nvidia.com/cuda-gpus查看自己的GPU是否支持CUDA
http://www.nvidia.cn/Download/index.aspx?lang=cn下载匹配自己显卡的驱动
https://developer.nvidia.com/cuda-downloads下载最新的CUDA Toolkit,一定要选runfile,如下
https://developer.nvidia.com/cudnn下载cuDNN library
参考文档:
http://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#axzz4dMB1vD9s
NVIDIA CUDA Installation Guide for Linux
开始配置:
1. 确认安装了gcc
gcc --version
2. CUDA和nvidia驱动编译安装需要内核头文件,所以
sudo apt-get install linux-headers-$(uname -r)
3. 安装nvidia驱动必须禁用nouveau,所以
创建一个文件 /etc/modprobe.d/blacklist-nouveau.conf 用下面的内容:
blacklist nouveau
options nouveau modeset=0
重新生成内核initramfs:
sudo update-initramfs -u
为保证禁用成功,重启系统
lsmod | grep nouveau
确保没有输出即可
4.Ctrl+Alt+F1进入命令行,关闭X servers
sudo systemctl stop lightdm
5.开始安装NVIDIA驱动,此步可以忽略而使用CUDA自带的驱动。区别就是CUDA安装的没有提示可能会安装失败
sudo ./NVIDIA-Linux-x86_64-378.13.run --no-opengl-files
安装提示基本是选肯定的,提示nvidia-xconfig时如果你的电脑还存在一个核显或者集显就选择不安装,反之选择安装
安装完毕后,重启,进入图形界面
6.检查/dev下是否存在nvidia*设备并且权限是0666,如果没有可以执行 nvidia-modprobe来创建这些设备,如果执行没有效果,请检查Secure Boot是否设置为Disable(见教程开头)
如果已经存在,执行nvidia-smi,有类似如下输出代表nvidia驱动正常
7.安装CUDA
sudo ./cuda_8.0.61_375.26_linux.run
按q结束cuda的描述等,然后输入accept,然后是提示是否安装NVIDIA驱动,如果你做了第5步,就输入n。反之输入y,这种情况下会提示是否安装opengl,一定输入n,然后提示是否安装nvidia-xconfig,如果你的电脑还存在一个核显或者集显就输入n,反之输入y
下一个提示是是否安装CUDA Toolkit,输入y,后面的提示都是使用默认或者y了
安装完会显示哪些安装成功,哪些安装失败,一般都会没有问题的
8.编辑/etc/profile,在最后添加
export PATH=/usr/local/cuda-8.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:/usr/local/cuda-8.0/extras/CUPTI/lib64:$LD_LIBRARY_PATH
重启系统,进入图形界面
9.测试CUDA Toolkit安装是否正确,
nvcc --version
输出类似以下信息即可认为安装正确
10.尝试编译CUDA提供的Samples,默认路径为~/NVIDIA_CUDA-8.0_Samples
make
如果提示错误请按照提示安装依赖包,或者自行google解决error,保证编译过程没有error
生成文件在~/NVIDIA_CUDA-8.0_Samples/bin/x84_64/linux/release
./deviceQuery
我的有如下输出
11.安装cuDNN,解压cudnn-8.0-linux-x64-v5.1.solitairetheme8
tar -xvzf cudnn-8.0-linux-x64-v5.1.solitairetheme8
sudo cp cuda/include/* /usr/local/cuda-8.0/include
sudo cp cuda/lib64/libcudnn.so.5.1.10 /usr/local/cuda-8.0/lib64
sudo cp cuda/lib64/libcudnn_static.a /usr/local/cuda-8.0/lib64
更新软连接
cd /usr/local/cuda-8.0/lib64
ln –s libcudnn.so.5.1.10 libcudnn.so.5
ln –s libcudnn.so.5 libcudnn.so
至此完成所有安装