从1.10号开始装ubuntu开始,1.11-1.14这四天每天下班之后搞到晚上一两点。中间经历了一次系统的崩溃,现在总算是整出了点经验。目前对这些东西进行一次总结。
1.网上资料很多,千万别看排名靠前的
这个血的教训真的要牢记,网上很多排名靠前的,感觉都是刷出来的。其实很多时候真的不能解决你的本质问题。
之前上本科,我的毕设指导老师就说过,配置环境这个工作是很复杂的,甚至可以占到项目开发一半的时间。在毕设的配置环境中,我做的工作就很不好,基本上的配置工作都是由师兄带着完成的。
之后也经历过很多配置工作,但是这次配置环境对我来说无疑在复杂性上更上了一个难度。
这和我的性格也是有关的。因为我自己本身就喜欢用最新的东西。我想用python3,不想用python2。 我要用pycharm,不想用jupyter等其他IDE。我想用TensorFlow最新版本,不想用老版本。这一系列的求新,导致在网上的教程很少。很多坑真的是要自己去填。
2.要搞清楚环境之间的依赖关系和依赖顺序
毫无疑问,环境之间是有依赖关系的。由于各个软件、环境包的持续更新,很有可能旧的东西不能用了。也有可能导致太新的东西无法使用(例如目前CUDA最新版本是9.1,是2017.12月份才发行的。而tensorflow显然没有支持到最新版本)
第二个是要清楚环境之间的依赖顺序。如果没有搞清楚依赖顺序,你在安装的时候,可能是一个紧耦合模型去安装。导致安装环境时,压根理不清楚哪里出错,是在哪里搞出了问题。
现在我来说一下我所能体会到的这几个安装的依赖顺序和依赖关系:
(Ubuntu > CUDA > CUDnn | Anaconda > python 3.6 ) > tensorflow | pycharm
" | " 代表并列关系, “ > ”代表依赖顺序,左侧的优先级更高一些。
可以看出,安装显卡cuda 本质上和anaconda之间是没有任何联系的。安装上述所有环境和 pycharm是没有任何关系的。所以,这就很方便的对你每一步安装的环境进行单元测试,当你能保证每一步测试都通过之后,你再去进行下一步的安装工作。这个会极大的简化你的工作。即便当你某一步出了错,也不用心慌。只需要把你所出现问题的地方再次进行调试就可以了。
tips:说一下依赖的包的关系:tensorflow 目前最新版本是1.5,这个版本能使用CUDA9.0而不能使用CUDA9.1。应该是也不能使用低版本的了,因为我看了一下,他用的库的动态链接库的版本是不对的!!!!!!!千万注意。也就是说,当你想安装最新版本的时候,一定要选对他所能支持的CUDA。
3. 安装步骤
3.1 cuda 9.0 和cudnn 7.5安装
这个没话说,按照网上的安装操作方法就可以。cuda安装完之后,他会在/usr/loca/ 下面生成两个文件夹:cuda和cuda-9.0 需要注意的是,最后要
安装cudnn没什么说的,按照网上的来,该拷贝拷贝。记得往cuda-9.0文件夹里面拷贝。当然,你要不放心,两个文件夹都拷贝,没毛病!!!!
~sudo gedit .bashrc
将 /usr/local/cuda-9.0/ .... 这个东西添加到path里面。我就是这么偏执, 9.0就是9.0。
最后 ~/.bashrc 运行一下,将会把这个环境变量添加到全局中。
网上有往 /etc/profile 里面添加path的,应该也可以。有想尝试的小伙伴可以去试试。
这些工作做完之后,你需要讲动态链接库激活一下。我在这里被坑了很久。使用 ~/sudo ldconfig这个命令之后,很有可能你会看到有一个错误,有个 链接一直报错。我之前没在意,结果tensorflow完全跑不动。
从我的理解来看,这个动态链接,其实真的就是简单的将指定的文件链接过去,加入出现了链接不上,说明他压根没找到这个文件。
这怎么可能!英伟达公司怎么可能把这个问题也没解决。但是,你去仔细的用 sudo ldconfig |grep -v命令去看,你可以复制到文档里仔细的检查。直接搜索一下报错的链接库。你会惊奇的发现,确实,有一个文件报错了,没有链接成功。
你去他提示的路径里去仔细找,发现还真的没有这个文件。那么这个文件到底在哪呢? 很可笑的是:有一个叫 .....so.7.0.5这个文件他就是,但是,动态链接并不认这个文件,他只认, so.7 。 WTF。好了,你现在终于知道了,为什么网上的教程会说让你用 sudo ld -n .....这个命令了吗? 意思是让你把这个so.7.0.5当做 so.7去使用。
遇到其他的动态链接问题也是同样道理。
关于如何检查自己的CUDA是否装对
有个简单的办法,就是进入cuda-9.0/sample里面,你去make一下,之后对sample中的例子实际的用 ./这个命令运行一下试试,如果能运行成功,则说明安装的没问题。
至此,你再也无需考虑cuda的问题了!!!!!!!!!!
3.2 安装Anaconda
这个安装没问题,很好安装,按照网上的教程来。并创建出你的第一个虚拟环境:tensorflow。
接下来,你将遇到另一个大坑。我在这个坑里真的掉了很久。众所周知,conda是一个依赖包管理软件。他会自动的给你安装你所要配置的环境。可是,这个依赖包管理环境,其实是conda在后台直接定义好的模板。其实这样是可以保证你在他的环境之下不出错,但是他并不能保证你在你自己附加了自己的CUDA之后不出错。
注意!!!在我这个时间点,当你用conda安装tensorflow的时候,他给你安装的版本是1.4.1,然后,他会依赖CUDA8.0和CUDNN7.0。所以,当你用conda去做tensorflow的时候,其实你是怎么也安装不正确的。
当然,你用pip进行远程安装也一样,也会蹦出安装的是1.4.1这个版本的tensorflow。当然,这里还有个问题是,在你进入激活环境(tensorflow)进行pip安装的时候,一定不要用sudo。这会默认使用系统自带的python2去安装包,安装的位置也是系统自带的python2中的位置。直接用pip命令,别用pip3命令。
所以,在进行tensorflow-gpu安装的时候,一定要去仔细检查你的版本是否和你当前的CUDA可以匹配上。这下子简单啦,用你的离线包去安装吧!
最后再强调一个事情,在tensorflow-gpu运行中,很多会用到google的protobuf的库。目前,tensorflow1.5版本只支持protobuf-3.4,不支持protobuf-3.5的哦~~~所以。用pip install protobuf==3.4来安装当前这个版本吧!
3.3 安装pycharm
从我给的列表中,你可以发现,这个pycharm跟其他东西是没有关系的。所以,安装好之后就可以了。
新版本的pycharm可以自动创建新的虚拟环境、新的conda环境和纯python解释器。当然,你可以选择用pycharm去创建conda环境。但是,时刻记着,如果用pycharm去创建conda环境,你还是免不了面临着TensorFlow等依赖包的 问题。有兴趣的朋友可以去试试,在这里我就不介绍了。
接下来的问题就是,你将你的解释器指向你的虚拟环境中的/bin/python3.当然,当你这么做的时候,你会发现自己列表中的site-package少得可怜。就一些基础的包,什么都没有。是不是做错了什么。
好,这个坑,我只想说,网上有一个人这么写,我就忍了。网上这么多人都这么写,我就在想,你们这么不负责任吗?写这个文章的,到底有几个人真正的安装配置过环境?只是自己随手整理一份安装配置的步骤,去博取好的名声吗?
我所能见到过的所有网上方案,都是,你去虚拟环境中,把.conda/env/tensorflow/lib/python3.6/site-package里面所有的包拷出来,导入到Anaconda3/lib/python3.6/site-package中,然后用你的pycharm把解释器指向这个文件。
确实,这个问题这样解决未尝不可,绝对是一种好的方法,那么如果你用这种方法,这个虚拟环境存不存在到底有什么用?完全没有任何作用!!!!!以后你用虚拟环境可能也就下载个包,然后再把下载的包复制到你的主目录下面。这叫哪门子虚拟环境,那你不安装anaconda岂不是更省事?
好吧,告诉大家正确的方法,选择完虚拟环境里的python3解释器之后,在你安装的虚拟环境列表中有三个按钮,分别是“+”, “-”, “O”。注意这个"O"是绿色的,有点类似于Anaconda的标志,点击这个刷新键,OK,一切成功!!!!
接下来,请开始你们的表演吧。
4.附加问题
有人可能会出现循环登陆的问题,我之前的环境也崩溃过。是因为进入linux之后,页面卡住不动,只出现一张紫色的背景。我记得当时我用的是cuda8.0这个版本,并且按照网上的教程卸载驱动,之后重新安装。
这个是由于你的驱动问题,这个你在网上搜一下,用他们的解决方案就可以。思路是,用你主板上自带的集成显卡作为你显示器使用,而用你的Nvidia独立显卡用作计算使用。
这个在ubuntu14版本中确实会出现这个问题。如果你不小心出现了这个问题,很有可能是被网上的教程坑掉了。在ubuntu16以及cuda9.0中,这个CUDA9.0自带的显卡驱动貌似是最新的,你完全不用去卸载和重新安装。可以预想到,英伟达公司应该以后会永久解决这个问题。在你们以后的版本中,应该不会再出现循环登陆这一类的问题。