在个人PC上使用游戏级的显卡安装CUDA要比在服务器上的安装麻烦一些,在安装的过程中也遇到了不少的坑,所以在此总结一下。
系统:Win7+Ubuntu 16.04 ,在Ubuntu下安装的, 显卡:GXT1050ti CUDA8.0
为了确保cuda能安装成功,首先需要确认安装前的环境是否符合要求,具体细节请查阅NVIDIA CUDA Installation Guide for Linux
一.更换ubuntut16.04的源,这里使用的是中科大的源。
CTRL+ALT+T, 打开终端,输入以下的命令:
cd /etc/apt/
sudo cp sources.list sources.list.backup #做备份
sudo gedit sources.list
然后把如下内容替换到该文件中(是替换掉,之前的就不要了):
deb http://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
然后更新源和更新已安装的包:
sudo apt-get update
sudo apt-get upgrade
二.降低gcc 版本(这一步如果按照链接1走的话,会遇到安装安gcc-5.3.0后,检测版本仍然是Ubuntu自带的情况)
这里要注意的一点是ubuntu16.04的gcc版本是5.4,而cuda8.0在该系统中支持的gcc版本不超过5.3,所以第一步需要对GCC版本进行降级。
(1)下载gcc源码
wget ftp://mirrors.kernel.org/gnu/gcc/gcc-5.3.0/gcc-5.3.0.tar.gz
以上的下载链接,反正我用的是下载不下来,所以换成用以下的链接:
http://ftp.gnu.org/gnu/gcc/
(2)解压
tar -zxvf gcc-5.3.0.tar.gz
(3)下载编译所需依赖项:
cd gcc-5.3.0 //进入解包后的gcc文件夹
./contrib/download_prerequisites //下载依赖项
cd .. //返回上层目录
(4)建立编译输出目录:
mkdir gcc-build-5.3.0
(5)进入输出目录,执行以下命令,并生成makefile文件:
cd gcc-build-5.3.0
../gcc-5.3.0/configure --prefix=/usr/local/gcc-5.3.0 --enable-checking=release --enable-languages=c,c++ --disable-multilib
注:/usr/local/gcc-5.3.0是自定的安装目录。将GCC安装在/usr/local/gcc-5.3.0目录下。为了以后的配置环境变量确立位置。
(6)编译:
sudo make -j4
以上的编译过程大约40分钟左右。PS:最好不要在编译过程中再去做别的什么事,整个过程CPU都是满载的。
(7)编译结束以后,我们就可以执行安装了:
sudo make install
(8)环境设置(这里需要将gcc的头文件和库文件指向新的版本,否则电脑用的还是Ubuntu自带的gcc)
打开配置文件夹:
cd $HOME
ls -a
sudo vi .bashrc
向其中添加以下语句:
GCCHOME=/usr/local/gcc-5.3.0 #指定新安装gcc的搜索路径
PATH=$GCCHOME/bin:$PATH
LD_LIBRARY_PATH=$GCCHOME/lib
export GCCHOME PATH LLD_LIBRARY_PATH
重新引导,并查看gcc版本:
source $HOME/.bashrc
which gcc
会显示gcc新的路径为 /usr/local/gcc-5.3.0:
检查gcc和g++版本 :
gcc --version
g++ --version
三. nvidia 驱动安装
如果从nvidia官网下载驱动安装时,有可能重启后进入不了系统,输入我的登录密码会发现屏幕一闪,然后又重新跳回到登录界面,就是进入了login loop的状态,造成这种问题的与原因是更新后的NVIDIA驱动与现在的GPU不匹配。(连接1中的叙述,没有出现过)
让系统自动安装nvidia驱动有两种办法:
(1)第一种是进入ubuntu系统设置-软件与更新-附加驱动中选择下图所示选项进行驱动安装
这种方法的缺点是:所安装的驱动(如图中所示nvidia-361)并不是最新版本的,以至于在最后进行样例测试的时候报错:
cuda driver version is infufficient for cuda runtime version
(2)第二种方法是添加ppa源,同时在nvidia驱动官网上查看自己GPU驱动的最新版本号(不需要下载):(连接1中的ppa源一直打不开,所以使用的另外的方案)
1.禁用nouveau。
Ubuntu系统集成的显卡驱动程序是nouveau,我们需要先将nouveau从linux内核卸载掉才能安装NVIDIA官方驱动。
因为nouveau驱动的影响,ubuntu安装后无法登入桌面,所以在ubuntu系统启动显示登录界面后,需要按ctrl+alt+F1进入tty文本模式进入下面的操作。
由于blacklist.conf文件的属性不允许修改。所以需要先修改文件属性。
查看属性:
ll /etc/modprobe.d/blacklist.conf
修改属性:
sudo chmod 666 /etc/modprobe.d/blacklist.conf
用vi编辑器打开:
sudo vi /etc/modprobe.d/blacklist.conf
在文件末尾添加如下几行:
blacklist vga16fb
blacklist nouveau
blacklist rivafb
blacklist rivatv
blacklist nvidiafb
修改并保存文件后,记得把文件属性复原:
sudo chmod 644 /etc/modprobe.d/blacklist.conf
再更新一下内核:
sudo update-initramfs -u
修改后需要重启系统。
重启系统确认nouveau是否已经被屏蔽掉,使用lsmod命令查看:
lsmod | grep nouveau
lsmod命令用于显示已经加载到内核中的模块的状态信息,参见《lsmod命令》。
2.安装NVIDIA驱动。
因为系统中不光有NVIDIA显卡还有一块集成intel显卡能正常驱动,所以经过上一步禁用nouveau驱动后,再次重启,已经系统可以正常登录进入桌面了。
使用如下命令添加Graphic Drivers PPA:
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
寻找合适的驱动版本:
ubuntu-drivers devices
以上的图片是直接用的链接中的图片。我用的GTX1050ti,目前最适用的版本是nvidia-387.
安装NVIDIA driver:
记住给出的推荐驱动型号(带recommended选项的驱动)。
按ctrl+alt+F1进入tty文本模式 。
关闭(图形)桌面显示管理器LightDM:
sudo service lightdm stop
安装nvidia driver,这一过程是需要联网的。如果网速度不好,可能要花比较长的时间。
安装完成后重启:
sudo apt-get install nvidia-378
sudo reboot
重启系统后,执行下面的命令查看驱动的安装状态显示安装成功:
sudo nvidia-smi
sudo nvidia-settings
(以上图片来自连接3,所以型号不对应,其他一切正常)
四. cuda 8.0 安装
cuda 8.0 Downloads下载cuda 8.0 的 runfile安装包。
以上链接已经是9.1的了,所以提供新链接:https://developer.nvidia.com/cuda-80-ga2-download-archive.
cd切换到下载的文件目录下进行安装:
sudo sh cuda_8.0.44_linux.run --override
启动安装程序,一直按空格到最后,输入accept接受条款。
输入n不安装nvidia图像驱动,之前已经安装过了。
输入y安装cuda 8.0工具 。
回车确认cuda默认安装路径:/usr/local/cuda-8.0 。
输入y用sudo权限运行安装,输入密码 。
输入y或者n安装或者不安装指向/usr/local/cuda的符号链接 。
输入y安装CUDA 8.0 Samples,以便后面测试 。
回车确认CUDA 8.0 Samples默认安装路径,该安装路径测试完可以删除。
五,因为cdnn是NVIDIA专门针对深度神经网络(Deep Neural Networks)中的基础操作而设计基于GPU的加速库。这里用不到cdnn,所以就没有安装,其过程也很简单,只是一个库函数的安装过程。
六。环境变量等
设置环境变量,终端输入:
sudo gedit /etc/profile
在末尾加入:
PATH=/usr/local/cuda/bin:$PATH
export PATH
保存后,创建链接文件(这是一个新建的链接文件):
sudo vim /etc/ld.so.conf.d/cuda.conf
按a进入插入模式,增加下面一行:
/usr/local/cuda/lib64
按esc退出插入模式,按:wq保存退出 。
最后在终端输入:
sudo ldconfig #使链接生效
七.cuda Samples测试
切换到CUDA 8.0 Samples默认安装路径(一般在安装目录的.../cuda/samples目录下),终端输入:
sudo make all -j4 #(4核)
需要几分钟的编译时间。
完成后继续向终端输入:
cd bin/x86_64/linux/release
./deviceQuery
如果看到下面画面,则成功:
通过以上的步骤就完成了所有的工作。
下面这部分留出来作为以后遇到问题的解决板块:
1.遇到一个奇怪的问题:在一般用户的条件下输入:nvcc --version能够正常显示,在root的条件下,说未安装nvcc:
解决办法是重新配置一下环境变量:
1)查看/usr/local/cuda/bin下是否有nvcc可执行程序,如果没有说明cuda没有正常安装,需要重新安装,如果有,进入下一步。
2)添加环境变量,打开~/.bashrc ,添加环境变量export PATH=$PATH:/usr/local/cuda/bin。
3)再在terminal中输入nvcc --version可以看到已经可以显示为8.0版本了。