@H_502_1@
原始地址:http://hyichao.github.io/cv/2016/10/15/ubuntu-cuda-caffe.html
本文实际上是旧文翻新,不小心弄坏了自己的cuda环境,折腾了一天左右重新搞好,然后加深了一点点对整个安装过程的理解,以及更新一点相关问题的解决方案。
Motivation
在近年的深度学习热潮里面,研究者都离不开使用一些流行的深度学习框架,较早期是caffe,后面各大公司各大团队纷纷开源出新的深度框架,各有特色,呈百家争鸣之势,如tensorflow,mxnet等。关于这些框架的优劣比较,可以参考这篇文章。当然,如题所示,本文的重点不在于这些框架,而是在于如何安装使用这些框架。实际上,网络上充斥着各种教程,大部分都是知其然不知其所以然,即使是stackoverflow或者是askubuntu,也遇到大量无用答案,遇到问题搜索起来还是比较痛苦。本文算是为自己做一点笔记,也希望有一天能帮助到有需要的人。
Must Know
无论我们最终选择使用哪个深度学习框架,都必须使用Nvidia的显卡和cuda(Nvidia是这次深度大潮的真正大赢家)。那么在我们入坑的第一天,毫无疑问,需要做的事情就是装cuda环境。接下俩我们一一分析一些常见教程里面的每一个步骤究竟做了什么,在什么情况下会出问题,又该如何修复。在开始之前,首先问自己以下几个问题:
- 你的机器是什么系统?(本文暂时支持Ubuntu14.04 64bit,16.04有特殊的打开方式..)
- 你的显卡是什么型号?(本人使用的是TitanX,1000系列有特殊的打开方式..)
- 你的系统现在处于什么状态?(新装/装过驱动/装过cuda)
- 你使用独显渲染GUI吗?还是使用集显输出GUI而独显仅作计算?(非常重要!本人使用集显输出显示独显仅做计算,好处是训练的时候不会卡..)
对于第一个问题和第二个问题,主要是考虑一些驱动的兼容性问题。一般而言14.04相对比较稳定,大多数显卡都能够在14.04使用。然而比较新的型号入NVidia 1070或者1080这个系列仅支持Ubuntu16.04,然后就引起一些编译器版本的兼容性问题,据说是16.04的gcc版本太高,cuda-8.0无法编译,也是比较搞笑。如果显卡不是这么高端的话,且还可以选择系统的话,建议14.04。
对于第三个问题,主要是考虑驱动残留的问题。有时候,小白会根据网上一些教程胡乱安装导致系统残留各种奇怪的程序。大部分情况下,其实都没有什么问题,但是一旦涉及到驱动,很容易就出现无法进入图形界面,登陆循环等问题。一般而言,比较理想的安装环境就是没有任何nvidia驱动,而为了达到这个目的,我们可以通过卸载所有nvidia驱动实现。
# the command uninstall all driver remain in system.
sudo apt-get remove --purge nvidia-*
# if this cause GUI problem,try the following
sudo apt-get install ubuntu-desktop
如果是安装过cuda但是想卸载掉现有的cuda重新安装更新的版本,比较简单的做法自然是进入cuda的安装路径,直接删除,包括一个cuda-x.x和一个软连接。
OK,该卸的卸该删的删,既然决定了要重新安装,那就说明你和现有的这个cuda没有感情了,当断则断,否则剪不断理还乱。然后,我们开始选择一个合适的方式去安装。
Installation Guide
为了使用GPU跑深度框架,我们需要完成以下几项安装流程:
1. 必要的基本依赖
参考caffe的instruction。这里面所安装的有些是caffe的依赖如protobuf/leveldb/opencv,有些是c++环境如build-essential,有些是计算库如blas。其中opencv基本上是视觉领域的标配,protobuf和leveldb是caffe为了加速io选择的技术,build-essential包含了如编译器gcc等内容,etc. 那么因为这些依赖基本对系统核心不影响,全部装上即使不用也无所谓,可以放心安装。 ### 2. Nvidia驱动的安装 从此处开始,我们要小心翼翼的选择我们的安装方式,安装驱动这件事情坑实在太多,一不小心就把自己陷入麻烦的漩涡。首先这里我们提出两种安装NvidiaDriver的方式.
两种安装方式都可行,如使用方案一,那么在安装cuda的时候可以选择安装驱动;否则,在cuda安装的同时把驱动也装上其实也是可以的。
!!有一个地方一定要注意!!
假如使用独显仅作计算而使用集显输出GUI,那么我们需要在安装驱动的时候加上一个高级选项--no-opengl-libs
。原因是,NVidia的驱动默认会安装openGL,而实际上ubuntu内核本身也有openGL而且和GUI显示息息相关,那么一旦NVidia的驱动覆写了opengl,在GUI需要动态链接opengl库的时候就引起问题。本人遇到的就是登陆界面死循环,英语一般称为“login loop”或者”stuck in login”。所以,如果是使用.run
的方式安装,在运行.run
的时候,就带上刚刚提到的高级选项。完整流程如下:
可能遇到的问题以及解决方案
上述要注意的这个地方,万一一个不小心手抖了添加no-opengl的选项,那么如无意外会遇到循环登陆(login loop)的问题。不要慌,首先把刚刚安装的NVIDIA驱动全部卸载干净。
@H_301_112@sudo apt-get remove --purge nvidia-* # reboot computer.. sudo reboot now