从Hinton在science上发表深度学习训练开创新的文章以来,深度学习火了整整有3年多,而且随着新的硬件和算法的提出,深度学习正在应用于越来越多的领域,发挥其算法的优势。
实验室并没有赶上第一波深度学习热,但是让人高兴的是最近终于配了一台超级电脑,虽说和谷歌、百度几百个上千个GPU跑算法的设备不能比,但是好歹终于有了搭建自己的深度学习平台,想想还很是兴奋。最近这几天忙着搭建深度学习平台,把现在最火的Caffe框架代码跑通,从最初对ubuntu的菜鸟到现在顺利搭建起深度学习平台,中间走了很多弯路,现在把自己从系统安装到最后测试中遇到的问题及关键步骤记录下来,加深对caffe理解的同时,也方便自己后续安装时重新查找资料,避免浪费时间和精力。
一、 深度学习工作站搭建(硬件):
工欲善其事,必先利其器,对于现在大火的深度学习来说更是如此,如果所在实验室或者公司没有相应的人员来进行专门的维护和服务,那么自己掌握这样一项技能,对于自己后续工作开展、以及服务站升级与维护也是非常方便的。
废话不多说,进入正题。
总体思路可参考该连接下filestorm的回答,本文只是告诉你如何进行甄选,以及配置。
如何配备深度学习工作站:链接
如果是使用台式机进行配置,那么必须清楚,配置深度学习工作站和电脑是一样的。
总体原则:如果经费充足,那么所有的硬件都往当前最好的上,显卡,主板,CPU,电源,机箱,内存,硬盘都是最好的,那么该工作站肯定没问题。
但是一般情况下,老师给的经费不那么充裕,所以就需要数着指头过日子,这时候给的建议一句话总结就是:因为显卡贵,所以优先买最好的显卡,让其他硬件适应显卡,而不是让GPU适应其他硬件。
而购买优先权是:显卡,CPU,主板,内存,硬盘,电源。
GPU的型号确定之后,其他的硬件配套就好。
以我的电脑为例,我的电脑配置为:
主板: ASUS Z97-AR
GPU: NVIDIA GTX980 TI(6G)
硬盘: 128G SSD + 2T 机械硬盘
CPU: i7-4790k(8核)
我的主板是ASUS 的Z97-AR,因为主板上提供的物理接口数量直接从硬件上限定死了可并行GPU数量。
我的主板上有两个PCIE X_16 3.0,一个PCIE X_16 2.0,因此最多可以装3个GPU,关于关于PCIE 3.0和PCIE 2.0的区别见下图。
我 们都知道显卡工作流程是由CPU和GPU协作完成的,CPU负 责三角形设定(Triangle Setup)和GPU负责三角形光栅化(Triangle Rasterize)【DirectX 10中加入的几何着色器使GPU可以负责一部分Setup工作】。我们进行游戏时CPU和GPU是不断交换数据的,大部分情况下都是GPU收到CPU的渲 染指令,而他们之间的通信是用PCI-E总线来进行的。
因此,CPU的选取也是限制GPU性能发挥的最主要的因素:
解释见:连接
CPU的规格中一个很重要的参数是:PCI-E的数量
我的cpu型号为i7-4790k, 该CPU提供24条通道(20条是PCI-E 3.0,4条是PCI-E 2.0,其中4条3.0分配给了集成显卡,4条2.0分配给了DMI 2.0总线,剩下的以插槽形式提供给独显等);
因此CPU只剩下16条PCI-E通道留给独显,所以最好是配一个GPU,最多两个GPU进行交火。
根据木桶原理,我这台机器最多可以配2个GPU进行工作,但是由于CPU PCIE数量的限制,使用一个GPU时也可以发挥最大效能。使用两个GPU,那么对于高端显卡,带宽可能会不够。(8GB vs 16GB)
二、 深度学习平台搭建(软件):
软件版本:
Ubuntu 14.04(X_64)
CUDA 7.0
opencv3.0.0
Matlab 2015B
软件平台部分组织结构:
- 第一部分:Ubuntu系统的安装;
- 第二部分:CUDA 7.0的安装;
- 第三部分:安装cuDNN
- 第四部分:安装Intel MKL 或Atlas
- 第五部分:安装opencv 3.0
- 第六部分:安装Caffe所需要的Python环境
- 第七部分:安装Matlab并配置
- 第八部分:编译Caffe
- 第九部分:使用MNIST数据集进行测试
第一部分:Ubuntu14.04安装
1.1 从ubuntu官网或者其它镜像网站下载Ubuntu 14.04(正常情况下,镜像文件名字叫ubuntu-14.04.3-desktop-amd64.iso,1G左右);
1.2 使用nero或者ultraISO 将该镜像文件刻录到DVD。注意在刻录ISO文件时,选择“刻录镜像文件到光盘”这个选项,该选项刻录的光盘选择光驱启动时,可以直接进行光盘安装;
1.3 从光盘启动后,会出现14.04这样一个画面,接下来就是满屏字母文字,可主要参考Ubuntu安装方法 ,设置略有不同。
1.3.1. 这时候只是建立了Ubuntu14.04的引导项,需要使用桌面的安装图标进行安装->选择语言,配置caffe时最好选用English,因为Ubuntu对中文支持并不是特别好,使用过程中选择英文会方便很多。
(安装时可以选用中文,安装好之后可以在设置中将语言更改为英文,不过最好刚开始时就选择英文)
1.3.2. 安装类型:其它选项
1.3.3. 接下来需要设置分区,首先设置交换空间大小,与电脑内存差不多或为电脑内存的两倍
分区设置时
swap 交换分区,主要用于休眠时系统文件,一般设置内存大小,32G
/boot Ubuntu内核目录,网上一般建议100M,个人建议硬盘空间够的话1G左右,因为系统内核虽然不大,但是更新占空间还是挺大,至少300M
/ Ubuntu根目录,这里建议硬盘剩余所有空间都分配给根目录,至少保证有100G左右,因为后续安装的很多程序包都会在/根目录下面
这3个分区均为ext4文件系统,注意linux系统的1G对应1000M。
1.3.4. 接下来就是设置地区、键盘布局,接着就是用户名和密码,参照网上其它教程。
安装过程中遇到问题时,请善用百度和谷歌,推荐使用谷歌镜像 对遇到的问题进行及时搜索。
现在我们已经安装好了Ubuntu(64bit),接下来就进行CUDA7.0安装。
注:安装了Win+Ubuntu双系统,特别是先安装win之后,再安装Ubuntu系统,引导项会默认选择Ubuntu。如果常用系统是windows的话,每次都需要手动选取,特别不方便。
因此需要更改默认引导系统,对Ubuntu下面的Grub进行修改:修改教程请戳我
第二部分:CUDA 7.0
在安装好Ubuntu(64bit)系统之后,在配置Caffe环境之前,请先连上互联网。ubuntu在某些情况下不安装mentohust也可以联网,这部分可参见:Linux使用mentohust连接锐捷校园网教程
经测试,在Ubuntu下直接在网络连接里面输入用户名,密码即可连上网络,推测Ubuntu14.04应该自身集成锐捷协议。
2.1. 安装CUDA7.0
2.1.1 安装Caffe所需依赖包
sudo apt-get install build-essential # basic requirement sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-dev libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler #required by caffe
2.1.2 安装CUDA7.0
安装CUDA有两种方法,
离线.run安装:从官网下载对应版本的.run安装包安装。
在离线.deb安装:deb安装分离线和在线,我都尝试过都安装成功了,官网下载地址
推荐使用在线deb安装方法。ps:在安装cuda时,已经同时安装显卡驱动,所以没有必要再装显卡驱动。
sudo dpkg -i cuda-repo-ubuntu1404-7-0-local_7.0-28_amd64.deb sudo apt-get update sudo apt-get install cuda
然后重启电脑。
Tips:如果安装不成功,卸载多试几次。
2.1.3 设置环境变量:
(设置环境变量时,首先确定好cuda安装路径和位置,这一步非常重要,在安装时不需要对下面位置进行修改,系统会自动建立连接)
sudo gedit /etc/profile
添加内容:
PATH=/usr/local/cuda/bin:$PATH
export PATH
保存后, 执行下列命令, 使环境变量立即生效
source /etc/profile
同时需要添加lib库路径: 在 /etc/ld.so.conf.d/加入文件 cuda.conf, 内容如下
/usr/local/cuda/lib64
保存后,执行下列命令使之立刻生效
sudo ldconfig
2.2 安装CUDA SAMPLE:
进入/usr/local/cuda/samples, 执行下列命令来build samples
sudo make all -j8
全部编译完成后, 进入 ./bin/x86_64/linux/release, 运行deviceQuery
./deviceQuery
如果出现显卡信息, 则驱动及显卡安装成功:
CUDA Device Query (Runtime API) version (CUDART static linking) Detected 1 CUDA Capable device(s) Device 0: "GeForce GTX 980 Ti" CUDA Driver Version / Runtime Version 7.0 / 7.0 CUDA Capability Major/Minor version number: 5.2 Total amount of global memory: 6136 MBytes (6433828864 bytes) (22) Multiprocessors, (128) CUDA Cores/MP: 2816 CUDA Cores GPU Max Clock rate: 1076 MHz (1.08 GHz) Memory Clock rate: 3505 Mhz Memory Bus Width: 384-bit L2 Cache Size: 3145728 bytes Maximum Texture Dimension Size (x,y,z) 1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096) Maximum Layered 1D Texture Size, (num) layers 1D=(16384), 2048 layers Maximum Layered 2D Texture Size, (num) layers 2D=(16384, 16384), 2048 layers Total amount of constant memory: 65536 bytes Total amount of shared memory per block: 49152 bytes Total number of registers available per block: 65536 Warp size: 32 Maximum number of threads per multiprocessor: 2048 Maximum number of threads per block: 1024 Max dimension size of a thread block (x,y,z): (1024, 1024, 64) Max dimension size of a grid size (x,y,z): (2147483647, 65535, 65535) Maximum memory pitch: 2147483647 bytes Texture alignment: 512 bytes Concurrent copy and kernel execution: Yes with 2 copy engine(s) Run time limit on kernels: Yes Integrated GPU sharing Host Memory: No Support host page-locked memory mapping: Yes Alignment requirement for Surfaces: Yes Device has ECC support: Disabled Device supports Unified Addressing (UVA): Yes Device PCI Domain ID / Bus ID / location ID: 0 / 1 / 0 Compute Mode: < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) > deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 7.0, CUDA Runtime Version = 7.0, NumDevs = 1, Device0 = GeForce GTX 980 Ti Result = PASS
*注:我安装时CUDA Driver Version和CUDA Runtime Version不同,不过暂时不影响,安装时候两个版本最好一样。
如果没有这些信息,那肯定是安装不成功,可以逐步排除一下原因!
第三部分:安装cuDNN
这里强烈建议大家安装与cuda版本相匹配的cudnn,这样会避免很多不必要的兼容麻烦。比如我安装的是cuda-7.0版本,那么安装cudnn-v3以上会比较好。
下载cudnn-7.0-linux-x64-v3.0-prod.tgz。
链接cuDNN的库文件
如果在使用cudnn的lib 或者cudnn.h 时出现Permission denied提示,那么说明copy过去的文件当前系统没有权限使用,那么在拷贝过去之前,先对文件授权
修复方式:
cd /usr/local/cuda/lib64/
sudo su
chmod 777 -R libcudnn.so
chmod 777 -R libcudnn.so.7.0
chmod 777 -R libcudnn.so.7.0.64
cd ..
cd include
chmod 777 -R cudnn.h
cudnn-v4安装,适用于cuda7.0 以及later
a. 安装前请去先官网下载最新的cuDNN (cudnn-7.0-linux-x64-v4.0-rc.tgz)。
sudo cp include/cudnn.h /usr/local/include
sudo cp lib64/libcudnn.* /usr/local/lib
b. 链接cuDNN的库文件
sudo ln -sf /usr/local/lib/libcudnn.so.4.0.4 /usr/local/lib/libcudnn.so.4 sudo ln -sf /usr/local/lib/libcudnn.so.4 /usr/local/lib/libcudnn.so sudo ldconfig -v
cudnn-v5.1-cuda8.0 安装:
a. 安装前请去先官网下载最新的cuDNN (cudnn-8.0-linux-x64-v5.1.tgz)。
sudo cp include/cudnn.h /usr/local/include
sudo cp lib64/libcudnn.* /usr/local/lib
b. 链接cuDNN的库文件
sudo ln -sf /usr/local/lib/libcudnn.so.5.1.10 /usr/local/lib/libcudnn.so.5
sudo ln -sf /usr/local/lib/libcudnn.so.5 /usr/local/lib/libcudnn.so
sudo ldconfig -v
第四部分:安装Intel MKL 或Atlas
Atlas安装命令(caffe默认也是atlas,Intel MKL需要申请):
sudo apt-get install libatlas-base-dev
**注:这里最好直接安装intel的mkl核心,因为后面调试matlab接口时候还是需要用到mkl库,所以虽然比较麻烦,但是在安装时候直接安装mkl会好一些。
在这一模块可以选择(ATLAS,MKL或者OpenBLAS),我这里使用MKL,首先下载并安装英特尔® 数学内核库 Linux* 版MKL,下载链接, 请下载Student版,先申请,然后会立马收到一个邮件(里面有安装序列号),打开照着下载就行了(可以下载离线版或在线安装版,在线版名称为parallel_studio_xe_2016_online.sh)。通过在线版可以直接安装。
若使用离线版安装,文件下载完之后,要把文件解压到home文件夹(或直接 把tar.gz文件拷贝到home文件夹,为了节省空间,安装完记得把压缩文件给删除喔~),或者其他的ext4的文件系统中。
tar zxvf parallel_studio_xe_2015.tar.gz chmod a+x parallel_studio_xe_2015 -R sudo ./install_GUI.sh
安装完成之后,需要设置mkl的配置文件
1. 新建intel_mkl.conf, 并编辑之:
sudo gedit /etc/ld.so.conf.d/intel_mkl.conf
在文件中加入配置路径
/opt/intel/lib/intel64
/opt/intel/mkl/lib/intel64
第五部分:安装opencv3.0
切换目录Ubuntu\3.0\安装OpenCV 3.0.0rc1:
sudo sh opencv3_0_0-rc1.sh
保证网络畅通,因为软件需要联网这里时间较长,请耐心等待。
*注:打开.sh文件可以看到,在安装过程中需要下载opencv-3.0.0-rc1.zip文件,如果下载过程中出现问题,安装过程则会失败。这时可以选择自己下载,然后执行.sh文件中的安装编译过程。
懒人版:
如果对opencv版本没有特殊要求,为了省时间,可以直接通过Ubuntu的包管理进行安装,即通过apt-get install进行安装,该安装方法会根据现在系统的版本,cuda版本以及其他信息自动安装caffe所需要的库,极大地缩短了安装时间。
(因为通过上述方式进行安装的过程,需要在本地使用cmake软件进行编译,所以非常耗时)
sudo apt-get install libopencv-dev
使用该命令安装的opencv版本为2.8.4,安装的为caffe最小依赖的包(个人理解),但是使用该方法安装opencv速度快,可以很快的部署好caffe的环境。
第六部分:安装Caffe所需要的Python环境
python选用环境较多,根据个人喜好进行安装。常用的有:
bash Anaconda-2.3.0-Linux-x86_64.sh
使用anaconda,则需要在Makefile.config中进行配置:
把之前的PYTHON_INCLUDE一定不加注释,把ANACONDA_HOME以及下面的PYTHON_INCLUDE 都去掉,并且改为如下图最终的样子:
# NOTE: this is required only if you will compile the python interface. # We need to be able to find Python.h and numpy/arrayobject.h. PYTHON_INCLUDE := /usr/include/python2.7 \ /usr/lib/python2.7/dist-packages/numpy/core/include # Anaconda Python distribution is quite popular. Include path: # Verify anaconda location, sometimes it\'s in root. ANACONDA_HOME := $(HOME)/anaconda2 PYTHON_INCLUDE := $(ANACONDA_HOME)/include \ $(ANACONDA_HOME)/include/python2.7 \ $(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include \ # We need to be able to find libpythonX.X.so or .dylib. PYTHON_LIB := /usr/lib # PYTHON_LIB := $(ANACONDA_HOME)/lib
在执行make all -j8过程中遇到错误:
error: ./include/caffe/util/cudnn.hpp:8:34: fatal error: caffe/proto/caffe.pb.h: No such file or directory #include "caffe/proto/caffe.pb.h"
解决方案:
cd caffe protoc src/caffe/proto/caffe.proto --cpp_out=. mkdir include/caffe/proto mv src/caffe/proto/caffe.pb.h include/caffe/proto
在执行make all -j8 时遇到的另外一个错误:
fatal error: pyconfig.h: No such file or directory
解决方案:
export CPLUS_INCLUDE_PATH=/usr/include/python2.7/:$CPLUS_INCLUDE_PATH source ~/.bashrc
安装python环境就是为了提供一个好的python开发环境,因此推荐大家安装caffe官网推荐的ipython-notebook,安装方便,使用也简单, Jupyter安装地址
python由于其语言的特殊性,因此对编辑软件依赖较高。但是大神一般都用vim编辑器,一般刚入门也推荐使用sublime,配置编译环境以及需要的各种package,网上搜索教程,很方便。
第七部分:安装Matlab2014a
1. 下载
由于该软件为商业软件,请大家自行寻找,安装学习,并确保不使用做商业目的,下载24小时删除......(地址)2. 预准备
选择Mathworks.Matlab.R2014a.Unix.iso - 右键 - 使用磁盘映像挂载器打开”
进入装载的虚拟光盘,拷贝全部文件至home/Matlab 文件夹
(PS:我的原则是能GUI就GUI,喜欢CMD的可以参照执行)
复制Crack/install.jar至 home/Matlab/java/jar/ 并覆盖源文件
3. 授权安装文件夹
4. 安装
选项:不使用Internet安装
序列号: 12345-67890-12345-67890
默认路径:/usr/local/MATLAB/R2014a
5.激活
激活文件:Crack/license_405329_R2014a.lic
拷贝 license_405329_R2014a.lic 至 /usr/local/MATLAB/
将Crack/Linux文件夹下的libmwservices.so copy到 /usr/local/MATLAB/R2014A/bin/gln
sudo cp Crack/Linux/license_405329_R2014a.lic /usr/local/MATLAB/R2014a/bin/glnxa64
安装完毕,程序默认启动路径:
第八部分:编译Caffe
Caffe下载 ,进入caffe-master文件夹的python目录,执行如下命令:
for req in $(cat requirements.txt); do pip install $req; done
下载安装所需依赖包。
进入caffe-master目录,复制一份Makefile.config.examples
cp Makefile.config.example Makefile.config
修改其中的一些路径,如果前边和我说的一致,都选默认路径的话,那么配置文件应该为:
USE_CUDNN := 1 #cudnn加速 CUDA_DIR := /usr/local/cuda BLAS := atlas MATLAB_DIR := /usr/local/MATLAB/R2014a PYTHON_INCLUDE := /usr/include/python2.7 \ /usr/lib/python2.7/dist-packages/numpy/core/include PYTHON_LIB := /usr/lib INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/lib/x86_64-linux-gnu/hdf5/serial/include LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial BUILD_DIR := build DISTRIBUTE_DIR := distribute TEST_GPUID := 0
因为安装的时opencv-3.0,因此配置好Makefile.config文件之后,需要对Makefile进行修改(实现对OpenCV 3.x的支持)
查找“Derive include and lib directories”一节,修改“LIBRARIES +=”的最后一行,增加opencv_imgcodecs
opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs
保存,退出。
caffe编译和测试:
"-j8"是使用CPU的多核进行编译,可以极大地加速编译的速度,建议使用。
cd caffe-master #打开caffe所在文件夹 make all -j8 #在build文件夹下进行编译
make test -j8 make runtest -j8 #使用CPU多核同时进行编译
make matcaffe -j8
注:编译matcaffe时,需要使用g++和gcc,Ubuntu14.04的g++是4.8+,而matlab为4.7,但是在编译时并不需要对g++进行降级,编译有warning但是还是会通过。
想对g++编译器进行降级的见连接 Caffe + Ubuntu 15.04 + CUDA 7.0 新手安装配置指南 。
*********************Caffe 的python接口配置*********************
caffe的python 接口是配置过程中最容易出问题的地方,因为python可以从很多地方启动,而python的编辑软件也很多,因此需要设置。
推荐使用第二种环境变量设置方法,即/etc/profile中写入环境变量。
使用下面命令进行python接口生成
make pycaffe -j8
make distribute
如果上述步骤没有错误,那么配置路径:
一般情况下,如果从terminal启动,则只需要在~/.bashrc中进行PYTHONPATH环境变量的添加
配置python接口时,需要将环境变量写入~/.bashrc文件中,命令为:
sudo gedit ~/.bashrc
但是如sublime等GUI软件,如果不从terminal使用命令启动,则有时不会读到PYTHONPATH环境变量,因此最稳妥的方法是将PYTHONPATH写入/etc/profile中,命令为:
sudo gedit /etc/profile
写入的环境变量为:
export LD_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_PATH export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libstdc++.so.6:$LD_PRELOAD export PYTHONPATH=/home/startag/caffe/distribute/python:$PYTHONPATH
在写入环境变量时,需要注意自己的拼写是否正确,需要认真检查,确认无误。
执行完这一步骤之后,注销或者重启让环境变量生效。
注:如果使用的不是系统自带的终端工具(bash),如比较好用的oh-my-zsh,那么在写入PATH和PYTHONPATH时应该写入~/.zshrc文件中
(每个软件对应的配置文件名为~/.xxxrc)
第九部分:使用MNIST数据集进行测试
Caffe默认情况会安装在$CAFFE_ROOT,就是解压到那个目录,例如:$ home/username/caffe-master,所以下面的工作,默认已经切换到了该工作目录。下面的工作主要是,用于测试Caffe是否工作正 常,不做详细评估。具体设置请参考官网:http://caffe.berkeleyvision.org/gathered/examples /mnist.html
1. 数据预处理
sh data/mnist/get_mnist.sh
2. 重建lmdb文件。Caffe支持三种数据格式输入网络,包括Image(.jpg, .png等),leveldb,lmdb,根据自己需要选择不同输入吧。
sh examples/mnist/create_mnist.sh
生成mnist-train-lmdb 和 mnist-train-lmdb文件夹,这里包含了lmdb格式的数据集
sh examples/mnist/train_lenet.sh
至此,Caffe安装的所有步骤完结。
后续继续更新。
参考博客:
2015.08.17 Ubuntu 14.04+cuda 7.0+caffe安装配置
Caffe + Ubuntu 15.04 + CUDA 7.0 新手安装配置指南
Caffe + Ubuntu 14.04 64bit + CUDA 6.5 配置说明
本文系本人原创,其中某些部分借鉴其中3个博客和网络上的资料,如需转载,注明出处,谢谢。
请发表评论