工欲善其事,必先利其器,对于现在大火的深度学习来说更是如此,如果所在实验室或者公司没有相应的人员来进行专门的维护和服务,那么自己掌握这样一项技能,对于自己后续工作开展、以及服务站升级与维护也是非常方便的。
废话不多说,进入正题。
总体思路可参考该连接下filestorm的回答,本文只是告诉你如何进行甄选,以及配置。
如果是使用台式机进行配置,那么必须清楚,配置深度学习工作站和电脑是一样的。
总体原则:如果经费充足,那么所有的硬件都往当前最好的上,显卡,主板,CPU,电源,机箱,内存,硬盘都是最好的,那么该工作站肯定没问题。
但是一般情况下,老师给的经费不那么充裕,所以就需要数着指头过日子,这时候给的建议一句话总结就是:因为显卡贵,所以优先买最好的显卡,让其他硬件适应显卡,而不是让GPU适应其他硬件。
而购买优先权是:显卡,CPU,主板,内存,硬盘,电源。
GPU的型号确定之后,其他的硬件配套就好。
以我的电脑为例,我的电脑配置为:
主板:ASUSZ97-AR
GPU:NVIDIAGTX980TI(6G)
硬盘:128GSSD+2T机械硬盘
CPU:i7-4790k(8核)
我的主板是ASUS的Z97-AR,因为主板上提供的物理接口数量直接从硬件上限定死了可并行GPU数量。
我的主板上有两个PCIEX_163.0,一个PCIEX_162.0,因此最多可以装3个GPU,关于关于PCIE3.0和PCIE2.0的区别见下图。
我们都知道显卡工作流程是由CPU和GPU协作完成的,CPU负责三角形设定(TriangleSetup)和GPU负责三角形光栅化(TriangleRasterize)【DirectX10中加入的几何着色器使GPU可以负责一部分Setup工作】。我们进行游戏时CPU和GPU是不断交换数据的,大部分情况下都是GPU收到CPU的渲染指令,而他们之间的通信是用PCI-E总线来进行的。
因此,CPU的选取也是限制GPU性能发挥的最主要的因素:
CPU的规格中一个很重要的参数是:PCI-E的数量
我的cpu型号为i7-4790k,该CPU提供24条通道(20条是PCI-E3.0,4条是PCI-E2.0,其中4条3.0分配给了集成显卡,4条2.0分配给了DMI2.0总线,剩下的以插槽形式提供给独显等);
因此CPU只剩下16条PCI-E通道留给独显,所以最好是配一个GPU,最多两个GPU进行交火。
根据木桶原理,我这台机器最多可以配2个GPU进行工作,但是由于CPUPCIE数量的限制,使用一个GPU时也可以发挥最大效能。使用两个GPU,那么对于高端显卡,带宽可能会不够。(8GBvs16GB)
二、深度学习平台搭建(软件):
软件版本:
Ubuntu14.04(X_64)
CUDA7.0
opencv3.0.0
Matlab2015B
软件平台部分组织结构:
第一部分:Ubuntu14.04安装
1.2使用nero或者ultraISO将该镜像文件刻录到DVD。注意在刻录ISO文件时,选择“刻录镜像文件到光盘”这个选项,该选项刻录的光盘选择光驱启动时,可以直接进行光盘安装;
1.3.1.这时候只是建立了Ubuntu14.04的引导项,需要使用桌面的安装图标进行安装->选择语言,配置caffe时最好选用English,因为Ubuntu对中文支持并不是特别好,使用过程中选择英文会方便很多。
(安装时可以选用中文,安装好之后可以在设置中将语言更改为英文,不过最好刚开始时就选择英文)
1.3.2.安装类型:其它选项
1.3.3.接下来需要设置分区,首先设置交换空间大小,与电脑内存差不多或为电脑内存的两倍
分区设置时
swap交换分区,主要用于休眠时系统文件,一般设置内存大小,32G
/bootUbuntu内核目录,网上一般建议100M,个人建议硬盘空间够的话1G左右,因为系统内核虽然不大,但是更新占空间还是挺大,至少300M
/Ubuntu根目录,这里建议硬盘剩余所有空间都分配给根目录,至少保证有100G左右,因为后续安装的很多程序包都会在/根目录下面
这3个分区均为ext4文件系统,注意linux系统的1G对应1000M。
1.3.4.接下来就是设置地区、键盘布局,接着就是用户名和密码,参照网上其它教程。
现在我们已经安装好了Ubuntu(64bit),接下来就进行CUDA7.0安装。
注:安装了Win+Ubuntu双系统,特别是先安装win之后,再安装Ubuntu系统,引导项会默认选择Ubuntu。如果常用系统是windows的话,每次都需要手动选取,特别不方便。
第二部分:CUDA7.0
经测试,在Ubuntu下直接在网络连接里面输入用户名,密码即可连上网络,推测Ubuntu14.04应该自身集成锐捷协议。
2.1.安装CUDA7.0
2.1.1安装Caffe所需依赖包
sudoapt-getinstallbuild-essential#basicrequirementsudoapt-getinstalllibprotobuf-devlibleveldb-devlibsnappy-devlibopencv-devlibboost-all-devlibhdf5-serial-devlibgflags-devlibgoogle-glog-devliblmdb-devprotobuf-compiler#requiredbycaffe
2.1.2安装CUDA7.0
安装CUDA有两种方法,
sudodpkg-icuda-repo-ubuntu1404-7-0-local_7.0-28_amd64.debsudoapt-getupdatesudoapt-getinstallcuda然后重启电脑。
Tips:如果安装不成功,卸载多试几次。
2.1.3设置环境变量:
(设置环境变量时,首先确定好cuda安装路径和位置,这一步非常重要,在安装时不需要对下面位置进行修改,系统会自动建立连接)
sudogedit/etc/profile添加内容:
PATH=/usr/local/cuda/bin:$PATHexportPATH保存后,执行下列命令,使环境变量立即生效
source/etc/profile同时需要添加lib库路径:在/etc/ld.so.conf.d/加入文件cuda.conf,内容如下
/usr/local/cuda/lib64保存后,执行下列命令使之立刻生效
sudoldconfig
2.2安装CUDASAMPLE:
进入/usr/local/cuda/samples,执行下列命令来buildsamples
sudomakeall-j8全部编译完成后,进入./bin/x86_64/linux/release,运行deviceQuery
./deviceQuery如果出现显卡信息,则驱动及显卡安装成功:
如果没有这些信息,那肯定是安装不成功,可以逐步排除一下原因!
第三部分:安装cuDNN
这里强烈建议大家安装与cuda版本相匹配的cudnn,这样会避免很多不必要的兼容麻烦。比如我安装的是cuda-7.0版本,那么安装cudnn-v3以上会比较好。
下载cudnn-7.0-linux-x64-v3.0-prod.tgz。
sudocpinclude/cudnn.h/usr/local/include
sudocplib64/libcudnn.*/usr/local/lib
链接cuDNN的库文件
sudoln-sf/usr/local/lib/libcudnn.so.7.0.64/usr/local/lib/libcudnn.so.7.0
sudoln-sf/usr/local/lib/libcudnn.so.7.0/usr/local/lib/libcudnn.so
sudoldconfig-v
修复方式:
cd/usr/local/cuda/lib64/sudosuchmod777-Rlibcudnn.sochmod777-Rlibcudnn.so.7.0chmod777-Rlibcudnn.so.7.0.64cd..cdincludechmod777-Rcudnn.h
cudnn-v4安装,适用于cuda7.0以及later
a.安装前请去先官网下载最新的cuDNN(cudnn-7.0-linux-x64-v4.0-rc.tgz)。
sudocpinclude/cudnn.h/usr/local/includesudocplib64/libcudnn.*/usr/local/libb.链接cuDNN的库文件
sudoln-sf/usr/local/lib/libcudnn.so.4.0.4/usr/local/lib/libcudnn.so.4sudoln-sf/usr/local/lib/libcudnn.so.4/usr/local/lib/libcudnn.sosudoldconfig-v
cudnn-v5.1-cuda8.0安装:
a.安装前请去先官网下载最新的cuDNN(cudnn-8.0-linux-x64-v5.1.tgz)。
sudocpinclude/cudnn.h/usr/local/includesudocplib64/libcudnn.*/usr/local/lib
b.链接cuDNN的库文件
sudoln-sf/usr/local/lib/libcudnn.so.5.1.10/usr/local/lib/libcudnn.so.5sudoln-sf/usr/local/lib/libcudnn.so.5/usr/local/lib/libcudnn.sosudoldconfig-v
第四部分:安装IntelMKL或Atlas
Atlas安装命令(caffe默认也是atlas,IntelMKL需要申请):
sudoapt-getinstalllibatlas-base-dev
**注:这里最好直接安装intel的mkl核心,因为后面调试matlab接口时候还是需要用到mkl库,所以虽然比较麻烦,但是在安装时候直接安装mkl会好一些。
若使用离线版安装,文件下载完之后,要把文件解压到home文件夹(或直接把tar.gz文件拷贝到home文件夹,为了节省空间,安装完记得把压缩文件给删除喔~),或者其他的ext4的文件系统中。
tarzxvfparallel_studio_xe_2015.tar.gzchmoda+xparallel_studio_xe_2015-Rsudo./install_GUI.sh安装完成之后,需要设置mkl的配置文件
1.新建intel_mkl.conf,并编辑之:
sudogedit/etc/ld.so.conf.d/intel_mkl.conf在文件中加入配置路径
/opt/intel/lib/intel64/opt/intel/mkl/lib/intel64
第五部分:安装opencv3.0
切换目录Ubuntu\3.0\安装OpenCV3.0.0rc1:
*注:打开.sh文件可以看到,在安装过程中需要下载opencv-3.0.0-rc1.zip文件,如果下载过程中出现问题,安装过程则会失败。这时可以选择自己下载,然后执行.sh文件中的安装编译过程。
懒人版:
(因为通过上述方式进行安装的过程,需要在本地使用cmake软件进行编译,所以非常耗时)
sudoapt-getinstalllibopencv-dev使用该命令安装的opencv版本为2.8.4,安装的为caffe最小依赖的包(个人理解),但是使用该方法安装opencv速度快,可以很快的部署好caffe的环境。
第六部分:安装Caffe所需要的Python环境
python选用环境较多,根据个人喜好进行安装。常用的有:
bashAnaconda-2.3.0-Linux-x86_64.sh使用anaconda,则需要在Makefile.config中进行配置:
把之前的PYTHON_INCLUDE一定不加注释,把ANACONDA_HOME以及下面的PYTHON_INCLUDE都去掉,并且改为如下图最终的样子:
#NOTE:thisisrequiredonlyifyouwillcompilethepythoninterface.#WeneedtobeabletofindPython.handnumpy/arrayobject.h.PYTHON_INCLUDE:=/usr/include/python2.7\/usr/lib/python2.7/dist-packages/numpy/core/include#AnacondaPythondistributionisquitepopular.Includepath:#Verifyanacondalocation,sometimesit'sinroot.ANACONDA_HOME:=$(HOME)/anaconda2PYTHON_INCLUDE:=$(ANACONDA_HOME)/include\$(ANACONDA_HOME)/include/python2.7\$(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include\#WeneedtobeabletofindlibpythonX.X.soor.dylib.PYTHON_LIB:=/usr/lib#PYTHON_LIB:=$(ANACONDA_HOME)/lib在执行makeall-j8过程中遇到错误:
error:./include/caffe/util/cudnn.hpp:8:34:fatalerror:caffe/proto/caffe.pb.h:Nosuchfileordirectory#include"caffe/proto/caffe.pb.h"解决方案:
cdcaffeprotocsrc/caffe/proto/caffe.proto--cpp_out=.mkdirinclude/caffe/protomvsrc/caffe/proto/caffe.pb.hinclude/caffe/proto
在执行makeall-j8时遇到的另外一个错误:
fatalerror:pyconfig.h:Nosuchfileordirectory解决方案:
exportCPLUS_INCLUDE_PATH=/usr/include/python2.7/:$CPLUS_INCLUDE_PATHsource~/.bashrc
python由于其语言的特殊性,因此对编辑软件依赖较高。但是大神一般都用vim编辑器,一般刚入门也推荐使用sublime,配置编译环境以及需要的各种package,网上搜索教程,很方便。
第七部分:安装Matlab2014a
1.下载
2.预准备
选择Mathworks.Matlab.R2014a.Unix.iso-右键-使用磁盘映像挂载器打开”
进入装载的虚拟光盘,拷贝全部文件至home/Matlab文件夹
(PS:我的原则是能GUI就GUI,喜欢CMD的可以参照执行)
复制Crack/install.jar至home/Matlab/java/jar/并覆盖源文件
$sudocpinstall.jar/home/Matlab/java/jar/
$chmoda+xMatlab-R
4.安装
$sudo./install
选项:不使用Internet安装
序列号:12345-67890-12345-67890
默认路径:/usr/local/MATLAB/R2014a
5.激活
激活文件:Crack/license_405329_R2014a.lic
拷贝license_405329_R2014a.lic至/usr/local/MATLAB/
sudocpCrack/license_405329_R2014a.lic/usr/local/MATLAB/
将Crack/Linux文件夹下的libmwservices.socopy到/usr/local/MATLAB/R2014A/bin/gln
sudocpCrack/Linux/license_405329_R2014a.lic/usr/local/MATLAB/R2014a/bin/glnxa64
安装完毕,程序默认启动路径:
sh/usr/local/MATLAB/R2014a/bin/matlab
第八部分:编译Caffe
forreqin$(catrequirements.txt);dopipinstall$req;done
下载安装所需依赖包。
进入caffe-master目录,复制一份Makefile.config.examples
cpMakefile.config.exampleMakefile.config修改其中的一些路径,如果前边和我说的一致,都选默认路径的话,那么配置文件应该为:
USE_CUDNN:=1#cudnn加速CUDA_DIR:=/usr/local/cudaBLAS:=atlasMATLAB_DIR:=/usr/local/MATLAB/R2014aPYTHON_INCLUDE:=/usr/include/python2.7\/usr/lib/python2.7/dist-packages/numpy/core/includePYTHON_LIB:=/usr/libINCLUDE_DIRS:=$(PYTHON_INCLUDE)/usr/local/include/usr/lib/x86_64-linux-gnu/hdf5/serial/includeLIBRARY_DIRS:=$(PYTHON_LIB)/usr/local/lib/usr/lib/usr/lib/x86_64-linux-gnu/hdf5/serialBUILD_DIR:=buildDISTRIBUTE_DIR:=distributeTEST_GPUID:=0因为安装的时opencv-3.0,因此配置好Makefile.config文件之后,需要对Makefile进行修改(实现对OpenCV3.x的支持)
查找“Deriveincludeandlibdirectories”一节,修改“LIBRARIES+=”的最后一行,增加opencv_imgcodecs
opencv_coreopencv_highguiopencv_imgprocopencv_imgcodecs
保存,退出。
caffe编译和测试:
"-j8"是使用CPU的多核进行编译,可以极大地加速编译的速度,建议使用。
caffe的python接口是配置过程中最容易出问题的地方,因为python可以从很多地方启动,而python的编辑软件也很多,因此需要设置。
推荐使用第二种环境变量设置方法,即/etc/profile中写入环境变量。
使用下面命令进行python接口生成
makepycaffe-j8makedistribute如果上述步骤没有错误,那么配置路径:
一般情况下,如果从terminal启动,则只需要在~/.bashrc中进行PYTHONPATH环境变量的添加
配置python接口时,需要将环境变量写入~/.bashrc文件中,命令为:
sudogedit~/.bashrc
但是如sublime等GUI软件,如果不从terminal使用命令启动,则有时不会读到PYTHONPATH环境变量,因此最稳妥的方法是将PYTHONPATH写入/etc/profile中,命令为:
sudogedit/etc/profile写入的环境变量为:
exportLD_LIBRARY_PATH=/opt/intel/mkl/lib/intel64:/usr/local/cuda/lib64:/home/startag/caffe/distribute/lib:/home/startag/Documents/Caffe-soft/opencv_linux/Install-OpenCV/Ubuntu/3.0/OpenCV/opencv-3.0.0-rc1/build/lib:$LD_LIBRARY_PATHexportLD_PRELOAD=/usr/lib/x86_64-linux-gnu/libstdc++.so.6:$LD_PRELOADexportPYTHONPATH=/home/startag/caffe/distribute/python:$PYTHONPATH在写入环境变量时,需要注意自己的拼写是否正确,需要认真检查,确认无误。
执行完这一步骤之后,注销或者重启让环境变量生效。
注:如果使用的不是系统自带的终端工具(bash),如比较好用的oh-my-zsh,那么在写入PATH和PYTHONPATH时应该写入~/.zshrc文件中
(每个软件对应的配置文件名为~/.xxxrc)
第九部分:使用MNIST数据集进行测试
1.数据预处理
shdata/mnist/get_mnist.sh
2.重建lmdb文件。Caffe支持三种数据格式输入网络,包括Image(.jpg,.png等),leveldb,lmdb,根据自己需要选择不同输入吧。
shexamples/mnist/create_mnist.sh生成mnist-train-lmdb和mnist-train-lmdb文件夹,这里包含了lmdb格式的数据集
3.训练mnist
shexamples/mnist/train_lenet.sh至此,Caffe安装的所有步骤完结。
后续继续更新。
参考博客:
本文系本人原创,其中某些部分借鉴其中3个博客和网络上的资料,如需转载,注明出处,谢谢。