在个人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

cpu跑不满gpu跑满 cpu满载gpu不动_cpu跑不满gpu跑满

cpu跑不满gpu跑满 cpu满载gpu不动_cpu跑不满gpu跑满_02

 

三. nvidia 驱动安装

如果从nvidia官网下载驱动安装时,有可能重启后进入不了系统,输入我的登录密码会发现屏幕一闪,然后又重新跳回到登录界面,就是进入了login loop的状态,造成这种问题的与原因是更新后的NVIDIA驱动与现在的GPU不匹配。(连接1中的叙述,没有出现过) 
让系统自动安装nvidia驱动有两种办法: 
(1)第一种是进入ubuntu系统设置-软件与更新-附加驱动中选择下图所示选项进行驱动安装

cpu跑不满gpu跑满 cpu满载gpu不动_ubuntu_03

 这种方法的缺点是:所安装的驱动(如图中所示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

cpu跑不满gpu跑满 cpu满载gpu不动_ubuntu_04

以上的图片是直接用的链接中的图片。我用的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

cpu跑不满gpu跑满 cpu满载gpu不动_ubuntu_05

cpu跑不满gpu跑满 cpu满载gpu不动_重启_06

(以上图片来自连接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

如果看到下面画面,则成功:

cpu跑不满gpu跑满 cpu满载gpu不动_ubuntu_07

通过以上的步骤就完成了所有的工作。

 

下面这部分留出来作为以后遇到问题的解决板块:

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版本了。