ubuntu16.04 + cuda9.0 神踩坑 安装

写在前面:

首先感激这两位博主,没有他们就没有我成功的环境配置(当然一些细节还参考了很多很多位博主,这里写下主要的)

https://www.jianshu.com/p/7acb5688f2dd

https://blog.csdn.net/QLULIBIN/article/details/78714596

从这次安装过程中我学到了什么

1.做事一定要有记录,不然会重复造*

2.复制过去的东西一定要检查,很容易不全

3.自己敲的命令很容易敲错,要仔细或者直接复制别人的

4.官网说的话一定要听,没有废话。。

5.安装前多参考几篇安装教程,做好受挫的心理准备,别安疯了

 

-------------------------------------------------我是分割线---------------------------------------------------------------------

有了重装了七八遍系统之后又回到最初的起点的惨痛经历后

痛定思痛决定记录下每一个步骤

从重装系统开始

1.首先学会了用winscp和puTTY组合远程控制ubuntu(拷贝文件很方便)

2.重装系统

在六维空间上下一个 ubuntu16.04的源

下一个软碟通

格式化一个u盘

准备好电脑的磁盘空间

用软碟通把镜像文件写入u盘

写入教程:

https://blog.csdn.net/s717597589/article/details/79117112/

可以重做系统了

------------------------------------------------------------我是分割线----------------------------------------------------------

从一个崭新的系统开始

就把配置环境比喻成做一道菜吧

必须先要有匹配的食材

必须有得当的处理顺序

 

一、看官网,准备食材

https://www.jianshu.com/p/7acb5688f2dd

1.你需要有

(我一般先设置su密码"sudo passwd"   然后安装ssh"sudo apt-get install openssh-server" )

1)支持cuda的GPU:http://developer.nvidia.com/cuda-gpus

$ lspci | grep -i nvidia

(我的没有显示型号不知道为啥,可能是我看不懂?我在双系统windows上查看的)

 

2)支持cuda的linux版本:

$ uname -m && cat /etc/*release

 

3)安装一个gcc编译器(注意版本)

$ gcc --version

 

4)一个支持cuda在本系统上的内核(ubuntu16.04是4.4.0注意一下子,第一次装就是内核版本不合适所以没装上,但是我看有人在别人的帖子下面回复说4.15版本装上了,难道cuda歧视我?)

ubuntu16.04 + cuda9.0 神踩坑 安装

为了抵抗歧视,我决定再试一次

$ uname -r

查出我的内核版本为4.15.0-45

$ sudo apt-get install linux-headers-$(uname -r)

下载headers 和 development packages 

 

5)检查NVIDIA显卡,查看显卡能装的最新NVIDIA驱动的版本号,据此选择需要安装的cuda版本。

ubuntu16.04 + cuda9.0 神踩坑 安装

https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html可查看最新

注:要用命令:ubuntu-drivers devices测得的为准,这里可用最新的驱动为nvidia-384。

ubuntu16.04 + cuda9.0 神踩坑 安装

6)选择runfile安装方式(有好几种方式,但是感觉网上这种的可参考资料比较多,就选了这种)

下载一个NVIDIA CUDA Toolkit :http://developer.nvidia.com/cuda-downloads

ubuntu16.04 + cuda9.0 神踩坑 安装

我下的cuda9.0,不是最新版本,是自己找的网址

下载完后,用MD5 检验,如果序号不和,得重新下载(由于当时没有保存,这里我采用了别人的截图,注意这里的cuda版本号,人家采用的cuda_8.0)

输入命令:$  md5sum cuda_9.0.176_linux.run

ubuntu16.04 + cuda9.0 神踩坑 安装

 

二、炒菜工序

1.禁用 nouveau驱动

终端中运行:$  lsmod | grep nouveau,如果有输出则代表nouveau正在加载。需要我们手动禁掉nouveau。

Ubuntu的nouveau禁用方法:
a、在/etc/modprobe.d中创建文件blacklist-nouveau.conf

输入命令:$  sudo vi /etc/modprobe.d/blacklist-nouveau.conf                       (利用vi编辑器编辑和保存文件)

在文件中输入一下内容:

blacklist nouveau
options nouveau modeset=0

b、执行:
$ sudo update-initramfs –u

(执行过程中 出现 possible missing firmware  /lib/fiemwar/i915/kbl_guc_ver9_14.bin for module i915,百度说无伤大雅,我就暂时不管它)

c、再执行:
$  lsmod | grep nouveau

(我还是有内容输出,我准备重启试试,根本进入不了图形界面了,在text界面又验证一次,没有内容输出了)
若无内容输出,则禁用成功,若仍有内容输出,请检查操作,并重复上述操作。

 

2.关闭图形化界面

sudo service lightdm stop

3.sudo sh cuda.run

在安装选项中,不要安装OpenGL,不然后循环停留在登录界面

(又一次安装失败:

显示

installing the nvidia display driver..

the driver installation is unable to locate the kernel source please make sure that kernel source packages are installed and set up correctly

如果你知道核源包是对的,you may pass the location of the kernel source with the '--kernel-source-path' flag)

由于我清楚的知道我是安装了headers 和 development packages的,所以应该不是我操作出了问题,所以应该是kernel内核版本的问题

果然凭借一己之力是无法消除歧视的

现在我有3条路可以走

一是手动安装驱动,看看在安装好驱动后cuda剩下部分能不能顺利安装

二是降低内核版本到4.4.0,重新安装

三是放弃runfile安装的方法采用另外一种

 

一、

ubuntu16.04 + cuda9.0 神踩坑 安装

我的u盘挂在不上,不会配置文件,也不会让其生效,我决定换一条路先

哎呀

刚才忘记了可以通过winscp把安装包传过去的

罪过啊,一会不行再回来试这种方法吧。。。

二、

一个ubuntu系统里面有多个 内核是不牢靠的,会出现你禁用了这个内核的nouveau而没禁用另一个,也安装不上,所以首先要做的是

重装系统

安装4.4.0内核

卸载其他内核

a.查看当前安装的内核版本
$uname -r

b.查看可以更新的内核版本
sudo apt-cache search linux-image
c.安装新内核
sudo apt-get install linux-image-4.4.0-77-generic linux-image-extra-4.4.0-77-generic
d.更新grub引导
sudo update-grub
e.重启按Esc或Shift+Tab选择Ubuntu高级选项,进入4.4的内核
f.安装headers 和 development packages,前面有命令(之前有有两次安装,安装不上headers,现在想想原因大概是上来就换了软件源?源可能不太可靠。。。这次安装可以安装上)

g.卸载不要的内核

先看看自己有几个内核版本

sudo dpkg --get-selections |grep linux-image
再卸载不用的
sudo apt-get purge linux-image-xx-xx-generic linux-image-extra-xx-xx-generic

(卸载时候出现问题 unable to locate package linux-imag-4.15.0-29-generic ,少打了个e。。。)

(加上还是有问题 failed to remove /lib/modules/ linux-image-4.15.0-29-generic: directory not empty)

(我有两个4.15的内核一个是-29,一个是-45,第一种卸载方法用了purge方法,有个问题就是没有卸载掉上述文件,第二种我用了 autoremove 卸载的很干净sudo apt-get autoremove linux-image-xx-xx-generic linux-image-extra-xx-xx-generic,

把那个文件单独删除一下)
h.更新grub引导

sudo update-grub

重启一下,看看能不能从正常方式进入到gui界面

可以进来,无敌开心

接下来。。重复周而复始的工作

安装又又又失败了

这次啥错误

it appears that an X server is running please exit X before installation if you are sure that  X is not running ,but are gettinng this error,please delete any X lock files in /tmp

查了第一种解决方法

ubuntu16.04 + cuda9.0 神踩坑 安装

ubuntu16.04 + cuda9.0 神踩坑 安装

这种,不luck,我执行了stop命令,如果这个是关闭X server 的命令,显然,没有关闭

第二种

ubuntu16.04 + cuda9.0 神踩坑 安装

找到PID查杀,不好使,第一条命令执行无结果

第三种,不好使

ubuntu16.04 + cuda9.0 神踩坑 安装

第四种

ubuntu16.04 + cuda9.0 神踩坑 安装

显示 no process found

目录换成tmp也不好使

第五种

ubuntu16.04 + cuda9.0 神踩坑 安装

显示这两种服务没有加载

有人评论说系统版本不同所以禁用X服务的方式也不同,我试了这么多种都没中奖?

我看看能不能查到系统对应的命令

查着查着发现可能是系统runlevel3压根没进去

官方文档明白说要进去

我就是这么无视权威

ubuntu16.04 + cuda9.0 神踩坑 安装

按照这里面的指导

ubuntu16.04 + cuda9.0 神踩坑 安装

然后

ubuntu16.04 + cuda9.0 神踩坑 安装

重启后没有进入图形界面,一些乱七八糟看不懂的之后进入了命令行界面

上面显示我主机的名字和tty1

now

周而复始

成功了我的天

amazing!

接下来怎么启动图形界面呢

是不是不用进入runlevel3了

怎么退出啊

输入 $ sudo service lightdm start 重新启动图形化界面。

同时按住Alt + ctrl +F7,返回到图形化登录界面,输入密码登录。
如果能够成功登录,则表示不会遇到循环登录的问题,基本说明CUDA的安装成功了。

 重启电脑,检查Device Node Verification。

执行
$ ls /dev/nvidia*
可能出现a、b两种结果,请对号入座。

a、若结果显示

/dev/nvidia0      /dev/nvidiactl      /dev/nvidia-uvm

或显示出类似的信息,应该有三个(包含一个类似/dev/nvidia-nvm的),则安装成功。
原文:https://blog.csdn.net/QLULIBIN/article/details/78714596 


$ sudo vi /etc/rc.local
如果你是第一次打开这个文件,它应该是空的(除了一行又一行的#注释项外)。这文件的第一行是
#!/bin/sh -e
把-e去掉(这步很重要,否则它不会加载这文本的内容)
然后把下列内容除了#!/bin/bash外复制到其中,(before 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的文件
输入:$ ls /dev/nvidia*
结果显示:/dev/nvidia0       /dev/nvidiactl       /dev/nvidia-uvm

成功!

7) 设置环境变量。

终端中输入 $ sudo gedit /etc/profile
在打开的文件末尾,添加以下两行。
64位系统:
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}}

32位系统:

export PATH=/usr/local/cuda-9.0/bin${PATH:+:${PATH}}

export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib\
                                                   ${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

保存文件,并重启。因为source /etc/profile是临时生效,重启电脑才是永久生效。

这里有点与官方安装文档稍有不同,需要说明:
官方文档里说只需在终端中运行上述两条export语句即可,但如果不将它们不写入/etc/profile文件的话,这样的环境变量在你退出终端后就消失了,不起作用了,所以写入才是永久的做法。

8) 重启电脑,检查上述的环境变量是否设置成功。

a、 验证驱动版本
敲入
$ cat /proc/driver/nvidia/version
结果显示
NVRM version: NVIDIA UNIX x86_64 Kernel Module 384.81 Sat Sep 2 02:43:11 PDT 2017
GCC version: gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.5) 

b、 验证CUDA Toolkit
敲入
$ nvcc -V       会输出CUDA的版本信息

 

测试例子

测试CUDA的samples

1 cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery
2 sudo make
3 sudo ./deviceQuery

https://blog.csdn.net/hhhuua/article/details/80013566

成功了,了无激动之情,前前后后安了有5天

下一步干点啥

啊可以写代码了