贼心不死安cuda记录-双显卡笔记本Ubuntu安装cuda9.0

Acer宏碁

Aspier E 14系列,型号 E5-471G-57-WZ

Intel集成显卡Intel® HD Graphics 5500 (Broadwell GT2) + Nvidia Geforce 820M独显

小破笔记本,就为了安个环境跑跑小的demo,双显卡安cuda真费劲,贼心不死,记录下尝试的各种过程,也许成了也能为类似情况提供一些建议。

安装准备

多次重装,Ubuntu18出了好多问题,于是安了Ubuntu16 LTS,裸系统,别的都没装

2018.11.7 终于装好了,兴奋之余溢然言表,属予作文以记之

安装搜狗输入法

因为过程中各种各样问题要查询,安个输入法才能用啊不是嘛,点下面链接

搜狗输入法安装教程

安装包准备

UBUNTU只提供cuda10,都说是高版本兼容低版本,我就下载的Ubuntu16下面的cuda9.0了,Ubuntu18也可以下这个

Nvidia下载的cuda_9.0.176_384.81_linux.run

一、检查电脑是都支持Nvidia

lspci | grep -i nvidia

肯定出现NVIDIA字样,否则你都不会看到这篇博客

二、检查系统、GCC版本

1、检查自己的GPU是否支持CUDA

$ lspci | grep -i nvidia

去官网上查看http://developer.nvidia.com/cuda-gpus

 

有的话就可以继续啦

2.检查自己的系统,以方便日后找相关安装包

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

3.检查自己的gcc版本

$ gcc --version

attention,gcc版本不能太高,ubuntu16安装cuda9,gcc要低于5.3 ,我有一篇更改gcc版本的教程,装完系统我改成了gcc 4.8

如何降低gcc和g++以安装cuda9

查看 kenel header信息

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

请看Ubuntu内核如何降级,这篇文章我把Ubuntu16的4.10.0内核降级到cuda要求的4.4了。这一步要在gcc版本改好了之后再做,否则再一次因为core用gcc6编译,然后gcc才改成了4.8出了问题,导致重装一次。

我以为这几步都很无聊,提示有问题再补也来得及,结果重装好几次,实际上很多关键就在这一步。

 

三、检查ubuntu显卡驱动状态

lsmod | grep nouveau

查一下教程,禁用ubuntu自带的nouveau驱动

打开

sudo gedit /etc/modprobe.d/blacklist-nouveau.conf

输入:

blacklist nouveau
options nouveau modset=0

再执行

sudo update-initramfs -u

来进行更新,再重启,确保nouveau被禁止

四、安装Nvidia驱动

看躲坑攻略都说安这个时不安装Opengl

否则容易出现循环登录问题,我都是按照教程每次都禁用OpenGL来的,所以没出现过循环登录问题

【此处官方大坑】

都说上nvidia选驱动版本,我显卡820M最新驱动为18年更新的NVIDIA-Linux-x86_64-410.78.run

官网找到历史版本有NVIDIA-Linux-x86_64-390.48.run等,都是18年更新的,再老的就没有了

这三个我都试了,有的装的时候时候有问题,有更坑的,装完cuda,验证完整性时告诉我版本号码不对应WTF

后来百思不得其解,看了半天好像通用性挺强,剑走偏锋

想安装cuda为cuda_9.0.176_384.81_linux.run

末尾这个数字384琢磨了半天,就装这个驱动了!这一步有点玄学,不过nvidia通用性强,而之前各种driver版本不适配,所以这么试了一下

(PS.nvidia驱动的官网文档了有这么一句话,大意是,”不同笔记本开发商往往会使用集显+独显方案,并且有一些按钮等设置可以将两种方法一起混合使用,比如屏幕用集显,计算用独显,因而有时候下载品牌商提供的英伟达驱动可能更适配,更好用。“我还没来及试用这个方法就装好了,希望笔记本集显+独显的你不用走这个弯路)

按照某个教程装了一些依赖,但是看来没什么用,不装也行

sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install --no-install-recommends libboost-all-dev  
sudo apt-get install git cmake build-essential

不管这三个命令了

命令行能找到384的版本,我就直接命令行了,没有先下载后安装

sudo apt update  

sudo add-repository ppa:graphics-drivers/ppa

sudo apt update

sudo apt install nvidia-384  

安好重启,nvidia-smi命令能用了,小伙,这只是第一步而已。。。nvidia驱动装好

 

五、安装cuda

重启,不登录用户名,密码

按ctrl+alt+f3 进入tty3

关闭图形界面

$ sudo service lightdm stop

注:此时可能关不了,即使现实该操作OK,但是一会再开启时会有问题,可以在此基础上增加操作,自己删除X图像界面

cd /tmp

sudo rm -rf .X*

这里要注意自己下载的文件名字,直接按Tab键盘输入最保险

sudo chmod a+x cuda_9.0.176_384.81_linux.run

运行安装,不安装opengl我就在后面加了个  --no-opengl-libs

sudo sh cuda_9.0.176_384.81_linux.run --no-opengl-libs

各种回车、accept之后

安装nvidia驱动 (N)  因为刚才装好了

install nvidia accelerated Graphics Driver (y)

等等都是yes,默认路径

前面都躲开了坑,这一步十分钟后installed还是比较容易的

(有几次没装好前面写了,开始想一次通过cuda 装nvidia驱动失败的,版本不对、还有内核core编译时gcc版本不对应的,各种问题,导致cuda装不好,或者装好了其实也没法编译sample的)

sudo service lightdm start 

重启

notice(几个我没用过但是以后可能会用到的,卸载nvidia、cuda,省得每次错了都得重装)

如果要重装NVIDIA  driver,需要首先卸载掉之前的显卡驱动:

sudo apt-get remove -purge nvidia*

1

sudo apt-get remove –purge nvidia*

如果CUDA存在之前的旧版本,可以选择先卸载,以免和新的 CUDA 版本产生冲突,在 /usr/local/cuda/bin 目录下有一个 uninstallcuda*.pl 文件,可以直接运行卸载,命令如下:

sudo ./uninstall_cuda_*.pl

1

sudo ./uninstall_cuda_*.pl

检查是否安装成功

 

检查路径/dev/下 有无存在名为nvidia*,我的有三个

如果没有的话官方也给了解决方案,

添加环境变量

输入

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}}
#64位系统写这两句,32位系统写另外两句,documents里面有,(本句话不要加进环境变量)

再更新一下环境变量

输入

sudo source /etc/profile

问题来了,我的显示

sudo: source: command not found

查了半天没太理解,好像有的解释是说就是不能这么使用,(这句话我从博客抄来的,不知道是不是坑我,还是他真能用)

不过不设置在系统里,只设置在我的账户里不就好了(反正我系统里就我一个用户)

设置环境变量。```````````````````````````````````````````````````````````````````````

打开主目录下的 .bashrc文件添加如下路径,例如我的.bashrc文件在/home/wangyuanwei下,如果没有找到,则按Ctrl+H键显示隐藏文件。在末尾添加刚才那两句话

终端运行:

source ~/.bashrc

就装好了,env | grep cuda 就能看到cuda相关环境变量了
```````````````````````````````````````````````

 

六、安装sample

把sample安装到一个自定义的新建路径,

cuda-install-samples-9.0.sh

因为文档里面有写:这样就能得到一个可读写的sample了,虽然我不大概率不会改这个,不过省得用默认的那个没有写入修改权限,很强迫症。

最后得到

Finished building CUDA samples

还挺高兴,运行试一下     ./deviceQuery

贼心不死安cuda记录-双显卡笔记本Ubuntu安装cuda9.0_第1张图片

 

七、以往安装错误分析如下:

$./deviceQuery
./deviceQuery Starting...

 CUDA Device Query (Runtime API) version (CUDART static linking)

cudaGetDeviceCount returned 35
-> CUDA driver version is insufficient for CUDA runtime version
Result = FAIL

这段话说是CUDA驱动和CUDA.run文件版本不对应。Emmmm...

也就是说找到某个帖子讲如何对应版本,再重装NVIDIA驱动(或者重装系统)就会好嘛。我去查查

我现在nvidia驱动的版本是

$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2017 NVIDIA Corporation
Built on Fri_Sep__1_21:08:03_CDT_2017
Cuda compilation tools, release 9.0, V9.0.176

使用nvidia-smi

NVIDIA-SMI 340.107

Driver Version 340.107

贼心不死安cuda记录-双显卡笔记本Ubuntu安装cuda9.0_第2张图片

思考:是driver版本不对,还是cuda版本不对。

这个340好像是用这个包里cuda自己安装的,(年代久远忘了)cuda版本坑定没错,所以我后来在选nvidia驱动版本上花了一些心思,解决了这个问题。

 

我去查查driver版本问题,之前用上面链接里教程里是自动选择版本的,他自动选对了,别人不一定自动都能选对啊。真坑

$ ./deviceQueryDrv
./deviceQueryDrv Starting...

CUDA Device Query (Driver API) statically linked version
Detected 1 CUDA Capable device(s)

Device 0: "GeForce 820M"
  CUDA Driver Version:                           6.5
  CUDA Capability Major/Minor version number:    2.1
  Total amount of global memory:                 2048 MBytes (2147221504 bytes)
MapSMtoCores for SM 2.1 is undefined.  Default to use 64 Cores/SM
MapSMtoCores for SM 2.1 is undefined.  Default to use 64 Cores/SM
  ( 2) Multiprocessors, ( 64) CUDA Cores/MP:     128 CUDA Cores
  GPU Max Clock rate:                            1250 MHz (1.25 GHz)


这里写的CUDA Driver Version是 6.5 呵呵,哪个才是版本号啊,论坛里都讨论类似340的那个,没人说个位数的版本号

$ cat /proc/driver/nvidia/version
NVRM version: NVIDIA UNIX x86_64 Kernel Module  340.107  Thu May 24 21:54:01 PDT 2018
GCC version:  gcc version 7.3.0 (Ubuntu 7.3.0-27ubuntu1~18.04)


这里给的是340.107版本,gcc是7.3,Ubuntu18自带的版本,但是我降低了的啊,通过gcc --version 看是4.8版本的啊

$ gcc --version
gcc (Ubuntu 4.8.5-4ubuntu8) 4.8.5

【这个不是大问题】因为新系统ubuntu16的gcc是5.4,我降低到4.8,装完cuda

cat /proc/driver/nvidia/version
NVRM version: NVIDIA UNIX x86_64 Kernel Module  384.130  Wed Mar 21 03:37:26 PDT 2018
GCC version:  gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.10)

还是显示5.4,不过gcc --version 显示4.8就好,可以忽略掉

有一步骤

以为要重新编译内核,查到一个办法安装sudo apt install dkms竟然就解决了这个问题,但是我不理解这句话原理,后来还是没用这个教程,老老实实重新编译了内核,毕竟符合官方我放心,不走未知博客的野路子

装不同版本的cuda等的时候,提供的选项还不太一样,有一次试错过程中,

cuda***.run文件里nvidia x Service默认是no,我也就选了no(第一次选yes安装失败)

然后安装成功,但是很奇怪

nvidia-smi  和  nvcc -V 命令都不能用。可能是环境变量还没弄好。暂时弄好之后后者可以用了,前者还不行

同时也没有生成nvidia×的那三个文件,手动生成也出问题,后来就没用这种搭配安装了

$ sudo ./nvi.sh
modprobe: FATAL: Module nvidia not found in directory /lib/modules/4.10.0-28-generic

编译内核的时候,之前的内核没卸载干净,系统有点问题。后来一步一步来没有吓使用各种来历不明的命令,就没有这个bug了

 

装了一周,每天白天黑夜,终于装好了。最后一次我其实挺心有成竹,因为各个步骤了然于心,不用各个教程打开看了,按照我这个教程,一步一步稳扎稳打,装系统、gcc降级、内核降级、安装nvidia驱动(这一步官方有大坑,我自己躲过去了)、安cuda,验证cuda。

其实这才是第一步,咱们装cuda不是为了cuda,是为了装Tendorflow、Caffe等平台,这个才是咱们要花精力去了解学习的东西。加油

有问题评论建议的留言,我会看到的

你可能感兴趣的:(解决问题,深度学习)