1.更换linux内核
首先查看Ubuntu系统的内核,Ubuntu16.04一般都是4.15的内核,而cuda9.0不支持此版本的内核,因此需要将内核更换为4.4版本。
(1)查看已安装的内核版本
dpkg -l|grep linux-image
(2)查看当前使用的内核,若为4.15,则需更换为4.4:
uname -r
(3)查看可以更换的内核
sudo apt-cache search linux-image
(4)安装新内核
sudo apt-get install linux-image-4.4.0-77-generic linux-image-extra-4.4.0-77-generic
(5)更新grub引导
sudo update-grub
(6)重启,在grub引导界面进入Ubuntu高级选项,选择4.4内核
(7)安装对应内核版本的headers文件(一定要先装好4.4版本的headers文件再删除多余内核,否则会出现网卡配置等问题)
sudo apt-get install linux-headers-$(uname -r)
(8)删除多余内核
linux-headers-版本号:内核头文件
linux-image-版本号:内核映像文件
linux-image-extra-版本号:内核扩展文件
sudo apt-get purge linux-*4.15*
(9)更新grub引导
sudo update-grub
2.检查CUDA安装环境
(1)GPU是否支持CUDA
lspci | grep -i nvidia
然后去CUDA的官网查看自己的GPU版本是否在CUDA的支持列表中。
(2)linux版本是否支持CUDA
uname -m && cat /etc/*release
(3)安装缺少的依赖库
sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev
3.禁用nouveau驱动
(1)打开/etc/modprobe.d下的blacklist.conf
sudo gedit /etc/modprobe.d/blacklist.conf
(2)在blacklist.conf的末尾添加:
blacklist nouveau
options nouveau modeset=0
(3)执行生效并重启(注:这条命令可能不会生效。如果终端运行了一会儿说明已经生效,重启电脑;如果没有生效可以多运行几次)
sudo update-initramfs –u
(4)查看是否已禁用
lsmod | grep nouveau
若无内容输出,则表示禁用成功。
4.安装NVIDIA驱动以及cuda
在安装cuda时会自动安装NVIDIA驱动,但是可能会安装失败所以在这里先安装NVIDIA驱动。下载对应gpu版本的NVIDIA驱动、runfile版本的cuda9.0,分别修改文件名为NVIDIA.run、cuda.run,最好放在home目录下。
(1)安装NVIDIA驱动。重启到登录界面时按Ctrl+Alt+F1进入文字用户界面输入自己的用户名和密码,然后运行
sudo su
输入密码,运行
init 3
然后输入
sh NVIDIA.run
安装完成后输入以下命令,可以查看显卡驱动的详细信息
nvidia-smi
(2)输入reboot重启,到登录界面会发现分辨率恢复正常(也有特殊情况)。按Ctrl+Alt+F1进入文字用户界面,运行,关闭图形化界面
sudo service lightdm stop
(3)安装cuda9.0
sudo sh cuda.run
等待一段时间到协议界面,按Ctrl+c跳过协议,因为已经先安装好了NVIDIA驱动,NVIDIA Accelerate Graphics Driver选no;其他yes或default。
(4)重启图形化界面
sudo service lightdm start
按Ctrl+Alt+F7返回图形化登录界面并登录。
(5) 检查Device Node Verification
ls /dev/nvidia*
a.显示
/dev/nvidia0 /dev/nvidiactl /dev/nvidia-modeset
或类似信息(/dev/nvidia*),则安装成功。
b.显示
ls: cannot access/dev/nvidia*: No such file or directory
或者 /dev/nvidia0 /dev/nvidiactl ,a中的一个或两个,但没有/dev/nvidia-modeset
则需要添加一个启动脚本
sudo vi /etc/rc.local
首先把文件的第一行 #!/bin/sh -e 中的 -e 去掉(这步很重要,否则它不会加载文本的内容)
然后把下列除了 #!/bin/bash 的内容复制到 exit 0 之前,保存退出。
#!/bin/bash
/sbin/modprobe nvidia
if [ "$?" -eq 0 ]; then
# Count the number of NVIDIA controllers found.
NVDEVS=`lspci | grep -i NVIDIA`
N3D=`echo "$NVDEVS" | grep "3D controller" | wc -l`
NVGA=`echo "$NVDEVS" | grep "VGA compatible controller" | wc -l`
N=`expr $N3D + $NVGA - 1`
for i in `seq 0 $N`; do
mknod -m 666 /dev/nvidia$i c 195 $i
done
mknod -m 666 /dev/nvidiactl c 195 255
else
exit 1
fi
/sbin/modprobe nvidia-uvm
if [ "$?" -eq 0 ]; then
# Find out the major device number used by the nvidia-uvm driver
D=`grep nvidia-uvm /proc/devices | awk '{print $1}'`
mknod -m 666 /dev/nvidia-uvm c $D 0
else
exit 1
fi
下次重启时,应该能直接看到/dev目录下的三个nvidia的文件
(6) 设置环境变量
sudo gedit /etc/profile
在文件末尾添加以下两行:
export PATH=/usr/local/cuda-9.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64\
${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
保存文件并重启,因为profile在重启电脑之后才永久生效
reboot
(7) 检查上述的环境变量是否设置成功。
a.验证驱动版本
cat /proc/driver/nvidia/version
b.验证CUDA Toolkit,会输出CUDA的版本信息
nvcc -V
(8)尝试编译cuda提供samples
a.打开终端输入:
cd /home/xxx/NVIDIA_CUDA-9.0_Samples
其中xxx是自己的用户名
然后输入:
make
系统就会自动进入到编译过程,整个过程大概需要十几到二十分钟,请耐心等待。如果出现错误的话,系统会立即报错停止。第一次运行时可能会报错,提示的错误信息可能会是系统中没有gcc,解决办法就是通过命令重新安装gcc,在终端输入:$ sudo apt-get install gcc 安装完gcc后, 再make就正常了。如果编译成功,最后会显示Finished building CUDA samples。
b.运行编译生成的二进制文件
编译后的二进制文件默认存放在NVIDIA_CUDA-9.0_Samples/bin中,接着输入:
cd /home/lxxx/NVIDIA_CUDA-9.0_Samples/bin/x86_64/linux/release
然后
./deviceQuery
最后显示Result = PASS代表成功,若失败 Result = FAIL。
c.最后再检查一下系统和CUDA-Capable device的连接情况
./bandwidthTest
最后显示Result = PASS代表成功,若失败 Result = FAIL。
5.安装CuDNN
在文件所在目录解压,xx是自己的cudnn版本号
sudo tar -xzvf cudnn-xx.tgz
执行
sudo cp cuda/include/cudnn.h /usr/local/cuda/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
添加权限
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*