前言
本文适合:
- 给第一次安装的人理清思路。
- 给与本人遇到的同样bug的人提供解决思路。
- 给正在安装的人提供更多的细节!!!
- 注意,本文不是一篇万能博客,里面大部分安装代码细节由于自己安装时一致reboot原因,没有记录,但是,代码是固定的,本人给出了相应参考的博客。
- 本文主要是写给第一次安装的同道中人的经验帖子。
- 如果你在安装,建议你看完整篇有点印象后再去一步一步对着执行,此定理适用于你安装时看到的所有博客,不然会吃亏的。
- 本人CUDA安装时间(仅仅是CUDA) 上午:9.00—下午:17.35左右。
- 本人bug体附身…同样祝你好运。
本人安装信息汇总:
1. nvidia版本:
2. cuda 9.0
3. cudnn 7.5.1
4. tensorflow-gpu == 1.8
精华介绍
本篇适用于本人电脑配置:
系统: ubuntu16.04
显卡: GEFORCE GTX 1050
其余信息下面验证里提到
本篇是自己配置时的一个记录,解决的bug也都有保存,适合同样安装的人整理思路,个人根据惨痛的经验,先来帮你分析以下,整个过程在搞什么??大致说一下:
- 目的: tensorflow可以在gpu上跑。
- 第一步: 根据官网配置,仔细检验一波自己电脑的信息,不然后面遇到bug你会怀疑到毁天灭地,只有坚信自己选择的版本是跟配置信息是对应的,不是gcc版本,内核,系统结构等等的锅,你才有信心去改bug…而且也容易改,不然我见过那种安了好几天,结果回头是内核的原因…那只能恭喜你了。
- 这里提醒:整个流程最难搞的就是装cuda,不同配置再加上个人的粗心和手误,你一定不会顺风顺水(除非欧皇或大佬),一定保证每一步都对,你才会把bug的范围缩小。
- 第二步:首先这里你要面临一个选择(个人翻了好多博客才理清出这个思路):你是自己安装nvidia的驱动 or 在安装cuda时让它自己安装。安装cuda时它会让你accept很多东西,yes很多东西,里面有有一项就是对应nvidia驱动,很明显,你可以自己安装,也可以让它安装。个人在让它默认安装时出现了bug,所以最后只好自己找对应版本手动安装(当然,认识到这一点是因为翻了好多的博客,因为那个bug我只知道是nvidia的bug,其他一概不知)。
- 再提醒一点:cuda,nvidia驱动,tensorflow-gpu的安装方式不止一种!!!,个人这里依据(自己的情况+博客的经验帖子+官方推荐)选择。(当然更多情况是bug原因,不得不屈服)
- 真正开始的第一步(本人是手动安装nvidia驱动,所以这是我的第一步):安装了nvidia驱动,当然这里也有很多bug,见下文。
- 安装cuda,并设置对应的环境变量。
- 检验cuda(很重要的,基本这里过了,后面很容易的)
- 安装cudnn(其实就是复制操作)
- 检验cudnn(也很重要)
- 安装你要的框架(tensorflow等那些框架)
卸载原有cuda
个人的原因:不知道什么原因,电脑里有一个cuda…可能是谁用我电脑是安装过…这里还好看了一下,首先卸载了原来旧版本的cuda
参考:
1.https://blog.csdn.net/jacke121/article/details/55061833
2.https://blog.csdn.net/FIELDOFFIER/article/details/54017297
卸载cuda
1. 注意cuda文件的名称,可别自己直接复制
cd /usr/local/cuda/bin
sudo ./uninstall_cuda_7.5.pl
注:会说你...失败,其实就是没删干净
2.
重启
3. 没删干净的删了
sudo rm -r cuda-7.5
卸载nvidia驱动
最开始自己有一个驱动,但最开始以为nvidia驱动会影响cuda安装,就傻的删了,版本都没检查…
sudo apt-get install autoremove --purge nvidia*
检验电脑信息
这里无非是对着官方教程和博客,把自己的电脑信息总结一遍,用以筛选CUDA版本。
强推官方教程:
https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#pre-installation-actions
个人参考的博客:
https://blog.csdn.net/QLULIBIN/article/details/78714596
你可以对照这食用下面的内容:
1. 检查GPU信息
注意说明:前面说了我最开始有nvidia的驱动,所以这里用了驱动的命令,你也可以自己另外找,很多的,但是思路是这样。
(命令参考:https://blog.csdn.net/dcrmg/article/details/78146797)
nvidia-smi
±----------------------------------------------------------------------------+
| NVIDIA-SMI 384.130 Driver Version: 384.130 |
|-------------------------------±---------------------±---------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|=++==============|
| 0 GeForce GTX 1050 Off | 00000000:01:00.0 Off | N/A |
| N/A 42C P0 N/A / N/A | 365MiB / 2001MiB | 0% Default |
±------------------------------±---------------------±---------------------+
官网查找是否支持:(https://developer.nvidia.com/cuda-gpus)
2. 检验Linux版本,带有gcc编译器和工具链
2.1 检查系统版本
uname -m && cat /etc/*release
x86_64
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION=“Ubuntu 16.04.1 LTS”
NAME=“Ubuntu”
VERSION=“16.04.1 LTS (Xenial Xerus)”
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME=“Ubuntu 16.04.1 LTS”
VERSION_ID=“16.04”
HOME_URL=“http://www.ubuntu.com/”
SUPPORT_URL=“http://help.ubuntu.com/”
BUG_REPORT_URL=“http://bugs.launchpad.net/ubuntu/”
UBUNTU_CODENAME=xenial
2.2 检查内核
(https://www.cyberciti.biz/faq/command-to-show-linux-version/)
cat /proc/sys/kernel/{ostype,osrelease,version}
Linux
4.4.0-31-generic
50-Ubuntu SMP Wed Jul 13 00:07:12 UTC 2016
2.3 查看gcc版本
gcc -v
gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.11)
2.4 GLIBC
getconf GNU_LIBC_VERSION
glibc 2.23
至此,对应官方文档配置都满足,见下:
3 验证kernel header和 package development
sudo apt-get install linux-headers-$(uname -r)
正在读取软件包列表… 完成
正在分析软件包的依赖关系树
正在读取状态信息… 完成
linux-headers-4.4.0-31-generic 已经是最新版 (4.4.0-31.50)。
linux-headers-4.4.0-31-generic 已设置为手动安装。
升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 311 个软件包未被升级。
安装(runfile)
下载安装包
下载链接:
https://developer.nvidia.com/cuda-toolkit-archive
个人依据配置选择版本: 9.0 (CUDA9.0目前支持Ubuntu16.04和Ubuntu17.04两个版本)
下图为选择的信息:
下载后检验(同样重要):
检验信息查询网址:
https://developer.download.nvidia.cn/compute/cuda/9.0/Prod/docs/sidebar/md5sum.txt
命令检验
md5sum cuda_9.0.176_384.81_linux.run
7a00187b2ce5c5e350e68882f42dd507 cuda_9.0.176_384.81_linux.run
————————————检查通过——————————
nvidia驱动
前言
- 个人卸载原有cuda和nvidia驱动后,安装cuda没有成功,报了一个错,大致意思是:libglvnd不完整覆盖错误。
- 意味我的电脑cuda自动下载nvidia驱动是不行,所以需要自己重新下载驱动。
自我洗脑:
静下心来,等待bug…不论你参考的教程是什么,因为配置,个人粗心,操作失误等等原因,你会碰到很多bug…个人给你的建议是,不要怕报错,一定记录好自己的报错是什么,这些报错信息是很有用的。
安装
本人尝试了两种安装方式:
1.使用官方的NVIDIA驱动进行手动安装
2.使用PPA仓库进行自动化安装:
第一种: 本人最后由于gcc版本对应不上的原因无法安装(但是cuda9.0要求就是我电脑的gcc版本,说明我可能选错nvidia安装包了…最后放弃了这种方式)
第二种: PPA方式成功(由于安装过程个人没有记录步骤(一直在rebboot),只能依据个人回忆把上面两个步骤的bug给写下来)
第二步个人成功参考博客:
https://blog.csdn.net/u013082989/article/details/83382230
- 这里型号选择:其他版本试了试没正常安装,查找个人电脑nvidia驱动对应版本号 (430.40),但是仓库里没有,所以这里选用410,然后突然就成功了…
- 安装成功注意重启,安装完没有报错直接运行nvidia命令不成功也可能是没有rebbot
第一种方式个人碰到的bug
-
Ctrl+f1进入文本命令行,别上去就输入命令,需要账户密码登录。
-
最开始能账户密码登录进去,但是突然不能了…所以就是:
Ctrl+f1进入文本命令行后 账户密码登录不进不去
(解决:https://blog.csdn.net/log_zhan/article/details/52085320 看完我简直是woc…,我重启了n次,一度怀疑自己密码错了…)
1)大小写键盘问题,Ubuntu不认小键盘,所以一定要关掉NumLock,使用字母键盘上面的数字按键进行输入。2)用一位大神说的话,Ubuntu和你,我更相信Ubuntu,无论怎样的原因,反正出现login incorrect基本上问题的本质是要么密码错了要么账户错了。
-
lightdm报错 badline。
(解决:https://askubuntu.com/questions/290884/blacklist-conf-ignoring-bad-line-boot-prompt)
原因:自己在往文件里粘贴下面两行代码时,不知道为什么ubuntu默认前几个没粘进去,所以出了错,如下:
blacklist nouveau
options nouveau modeset=0
在直接复制粘贴到文件里是不全的 blacklist变成了cklist,这个问题导致报的上面那个错,并且这个错很恶心,在文本命令行页面,lightdm这个关键字一输入就黑屏…只能reboot,这也是我每没记录下自己操作的原因。
-
运行:
sudo sh NVIDIA-Linux-x86_64-390.25.run –no-x-check –no-nouveau-check –no-opengl-files
报错:大致意思是 gcc版本过高…,我本机的gcc肯定不能改(因为我都对应好cuda9的要求的,只能是这个安装包不对…自己不想找了,准备试试偷懒的方式,所以有了第二种方式安装)
安装cuda
说明
本人因为安装时经常出错和reboot,自己安装的所有命令没有记录全,不想写一篇有错的博客,所以基本上简单的命令的有,个人主要理清出大致框架和基本的细节,命令可以参考我参考的博客。
本人参考的博客,摘了两个参考较多的,这两篇基本思路一样,但是有很多细节不一样: 互为补充:
(https://blog.csdn.net/sinat_24143931/article/details/78690059)
(https://blog.csdn.net/QLULIBIN/article/details/78714596)
对照推荐链接食用下文:
安装cuda
个人依据回忆写几个关键点的步骤:
- cuda选好类型,下载(对应上面那个下载后md5检验的操作)。
- 建议:把下载包放到home路径下(比较好找),文件可以重命名为一个简单的名字。因为反正我tab键自动补充不了这个文件名,还得自己打。
- 禁用nouveau驱动。
- 进入文本模式登录(建议reboot后,进入登录界面不登录,而是按ctrl+alt+f1进入文本登录模式,当然只是建议,因为可能会因为这个出错)
- 简单说一下,文本登录模式。进入需要:ctrl+alt+f1(当然,f2,f3…都可以); 退出:(ctrl+alt+f7)(前提:如果你sudo service lightdm stop了,没有sudo service lightdm start,那你是回不来的); 登录:进入后需要账户密码登录,就是那个log标志,建议一定root账户登录(你可能会由于密码错误等不进去,大概率是和我一样,ubuntu这里不支持小键盘输入,用大键盘上面的数字就行);最后其实这就是一个命令行界面的放大版。
- 登录成功后,关闭图形化界面,sudo service lightdm stop
- 切换到cuda安装文件的路径
- sudo sh ××××××.run --no-opengl-libs 跑下载的,改好名字的run文件,后面是安装时忽视这某些东西,我参考的博客这样写的,我觉得我和它一样,也就这样写了,当然,大部分博客都是直接 sudo sh ××.run
- 第一次会等待一分钟左右,耐心。
- 接着你会进入第一个界面,这里比较坑,它有个进度条,你需要一致摁回车键(它才会开始动…大致是一个安装介绍,我最开始以为是自动的…)
- 接着是一堆让你 自己输入 accept或者yes选择安装哪些插件,这里一定要注意!!!
- 首先,如果你自己安装了nvidia驱动,大约第二个左右是一个关于nvidia的东西,就是让你选择是否安装这个驱动,你需要输入:n,否则就y。
- 注意,不要一路顺丰的yes和accept,一定不要,多看几篇和你配置一样,安装版本一样等等的博客,看他们accpet了哪些或者yes了哪些,虽然我没在这里出问题,但是我看得博客,每一个在这里都不太一样,所以我基本就是看完后,自己思考后,才 accept和yes的。
- 如果错了也别慌,一定要记清楚自己的报错,按照前文卸载内容,卸载了,找到报错原因后,重新状就完事儿了。
- 安装完成后输入重启命令重启:reboot
- 配置 CUDA 环境变量。
- 配置完后,一定要,使该配置生效:source ~/.bashrc
- 这里安装完了,但是还要验证 CUDA是否安装成功:编译/运行编译文件/检验连接情况,如下图:
正常编译例子(挺慢的)
(个人的图忘了保存…但是都出现了finished,里程碑式撒花)
编译结果
编译后的二进制文件 默认存放在NVIDIA_CUDA-9.0_Samples/bin中。
接着在上一个终端中输入 :$ cd /home/lxxx/NVIDIA_CUDA-9.0_Samples/bin/x86_64/linux/release 其中xxx是你自己的用户名
然后在终端输入 :$ ./deviceQuery
结果如下图所示:看到类似如下图片中的显示,则代表CUDA安装且配置成功,其中 Result = PASS代表成功,若失败 Result = FAIL
连接状况
./bandwidthTest
----------------------------------成功撒花-----------------------------------------
cudnn篇
安装(或者说:复制)
下载链接:(需要注册登录,自己对应cuda版本自行选择即可,个人选择的对应cuda的最新的cudnn版本)
https://developer.nvidia.com/rdp/cudnn-archive
强烈建议参考官方教程:
https://docs.nvidia.com/deeplearning/sdk/cudnn-install/index.html
经验分享:
- 到cudnn,就简单了。cudnn没有安装一说,简单来看就是复制粘贴,当然安装完一定要注意检验。
- 补充一句,可能有小白问每一个版本下面都有很多文件,我到底下载哪一个…以我下载的那个版本来说,本人ubuntu16.4系统,见下图:标蓝部分,第一个是对应的cudnn压缩文件,解压复制等操作后(见上面官方教程)意味着你cudnn弄好了,但是还要检验cudnn是否能正常用,所以用到了下面的那三个deb。
- 具体怎么安装看官方教程(个人认为官方教程是最简介明了的,博客只是在你实在看不懂时,对比参考帮你理解官方的)
- 这里我见到有用什么软链接的,见到官方的,好多种,最后我以官方的为标准。
- 如果你参考其他博客,一定注意他们的版本信息(因为他们命令里会夹杂很多带有版本信息的文件名,不仔细看你会哭的)
- 当然,弄好后也要检验。
检验
注意,在检验cudnn检验的时候,
输入:make clean && make(会出来下面的结果)
再: ./mnistCUDNN (才会验证,当然也可以用limux命令与起来…最开始make完以后的输出让那个我一度以为自己安错了)
------------------------------------再次撒花--------------------------------------
tensorflow-gpu安装
cpu和gpu
首先个人特别想弄清楚tensorflow-cpu和gpu之间兼容的问题,所以找了篇博客看了看,看完后决定删除原有的cpu版本,只留gpu版本。
[1]关于tensorflow gpu版和cpu版网上说的容易混淆的一点
安装参考
- 虚拟环境安装:
https://blog.csdn.net/qq_35976351/article/details/79325476
- pip安装:
虚拟环境安装
注意:本人没成功,报错了
安装pip和Virtualenv
sudo apt-get install python3-pip python3-dev python-virtualenv
创造一个虚拟的Python开发环境:
sudo virtualenv --system-site-packages -p python3 ~/tensorflow
没有一帆风顺,报了很长的错:(截了一部分)
最后感觉好麻烦,我就删库跑路了:
(“删库代码”参考: https://github.com/interbrite/letsencrypt-vesta/issues/46)
apt-get purge python-virtualenv python3-virtualenv virtualenv
pip安装
参考:https://blog.csdn.net/MahoneSun/article/details/80809042#commentBox
决定选择:1.8版本tensorflow-gpu
sudo pip install tensorflow-gpu==1.8 -i https://pypi.tuna.tsinghua.edu.cn/simple
安装完查看:
pip show tensorflow-gpu
代码验证
import tensorflow as tf
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
出来一堆信息,我觉得是安装成功了:
2019-08-01 16:06:11.214597: I tensorflow/core/platform/cpu_feature_guard.cc:140] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
2019-08-01 16:06:11.369117: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:898] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2019-08-01 16:06:11.370581: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1356] Found device 0 with properties:
name: GeForce GTX 1050 major: 6 minor: 1 memoryClockRate(GHz): 1.493
pciBusID: 0000:01:00.0
totalMemory: 1.96GiB freeMemory: 1.47GiB
2019-08-01 16:06:11.370614: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1435] Adding visible gpu devices: 0
2019-08-01 16:06:11.566039: I tensorflow/core/common_runtime/gpu/gpu_device.cc:923] Device interconnect StreamExecutor with strength 1 edge matrix:
2019-08-01 16:06:11.566093: I tensorflow/core/common_runtime/gpu/gpu_device.cc:929] 0
2019-08-01 16:06:11.566107: I tensorflow/core/common_runtime/gpu/gpu_device.cc:942] 0: N
2019-08-01 16:06:11.566284: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1053] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 1229 MB memory) -> physical GPU (device: 0, name: GeForce GTX 1050, pci bus id: 0000:01:00.0, compute capability: 6.1)
Device mapping:
/job:localhost/replica:0/task:0/device:GPU:0 -> device: 0, name: GeForce GTX 1050, pci bus id: 0000:01:00.0, compute capability: 6.1
2019-08-01 16:06:11.573855: I tensorflow/core/common_runtime/direct_session.cc:284] Device mapping:
/job:localhost/replica:0/task:0/device:GPU:0 -> device: 0, name: GeForce GTX 1050, pci bus id: 0000:01:00.0, compute capability: 6.1
—————————虽然没有跑大量代码,但是我jio的我是成功了——————————
END
静下心来,祝你成功。