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/ppasudo apt updatesudo apt install nvidia-384
安好重启,nvidia-smi命令能用了,小伙,这只是第一步而已。。。nvidia驱动装好
五、安装cuda
重启,不登录用户名,密码
按ctrl+alt+f3 进入tty3
关闭图形界面
$ sudo service lightdm stop
注:此时可能关不了,即使现实该操作OK,但是一会再开启时会有问题,可以在此基础上增加操作,自己删除X图像界面
cd /tmpsudo 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 <dir>
因为文档里面有写:这样就能得到一个可读写的sample了,虽然我不大概率不会改这个,不过省得用默认的那个没有写入修改权限,很强迫症。
最后得到
Finished building CUDA samples
还挺高兴,运行试一下 ./deviceQuery
七、以往安装错误分析如下:
$./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
思考:是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等平台,这个才是咱们要花精力去了解学习的东西。加油
有问题评论建议的留言,我会看到的