实验室并没有赶上第一波深度学习热,但是让人高兴的是最近终于配了一台超级电脑,虽说和谷歌、百度几百个上千个GPU跑算法的设备不能比,但是好歹终于有了搭建自己的深度学习平台,想想还很是兴奋。最近这几天忙着搭建深度学习平台,把现在最火的Caffe框架代码跑通,从最初对ubuntu的菜鸟到现在顺利搭建起深度学习平台,中间走了很多弯路,现在把自己从系统安装到最后测试中遇到的问题及关键步骤记录下来,加深对caffe理解的同时,也方便自己后续安装时重新查找资料,避免浪费时间和精力。
机器配置:
GPU:NVIDIA GTX960 TI
硬盘:1T 机械硬盘
CPU:i5(4核)
软件版本
Ubuntu 14.04
CUDA 7.5
本文的框架如下:
- 第一部分:Ubuntu系统的安装;
- 第二部分:CUDA 7.5的安装;
- 第三部分:安装cuDNN
- 第四部分:安装Intel MKL 或Atlas
- 第五部分:安装opencv 3.1
- 第六部分:安装Caffe所需要的Python环境
- 第七部分:编译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 交换分区,主要用于休眠时系统文件,一般设置内存大小,6G足够
/ Ubuntu根目录,10G
/boot Ubuntu内核目录,网上一般建议100M,个人建议硬盘空间够的话1G左右,因为系统内核虽然不大,但是更新占空间还是挺大,至少300M
/home 剩余所有空间,鉴于Imagenet,PASCAL VOC之类的大客户,建议500G,至少300G以上
这3个分区均为ext4文件系统,注意Linux系统的1G对应1000M。
1.3.4. 接下来就是设置地区、键盘布局,接着就是用户名和密码,参照网上其它教程。
安装过程中遇到问题时,请善用百度和谷歌,推荐使用谷歌镜像 对遇到的问题进行及时搜索。
现在我们已经安装好了Ubuntu(64bit),接下来就进行CUDA7.0安装。
第二部分:CUDA 7.5
在安装好Ubuntu(64bit)系统之后,在配置Caffe环境之前,请先连上互联网。ubuntu在某些情况下不安装mentohust也可以联网,这部分可参见:Linux使用mentohust连接锐捷校园网教程
经测试,在Ubuntu下直接在网络连接里面输入用户名,密码即可连上网络,推测Ubuntu14.04应该自身集成锐捷协议。
2.1. 安装CUDA7.5
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.5
安装CUDA有两种方法,
离线.run安装:从官网下载对应版本的.run安装包安装。
在离线.deb安装:deb安装分离线和在线,我都尝试过都安装成功了,官网下载地址
推荐使用在线deb安装方法。ps:在安装cuda时,已经同时安装显卡驱动,所以没有必要再装显卡驱动。
sudo dpkg -i cuda-repo-ubuntu1404-7-5-local_7.5-18_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
如果出现显卡信息, 则驱动及显卡安装成功:
./deviceQuery Starting...CUDA Device Query (Runtime API) version (CUDART static linking)Detected 1 CUDA Capable device(s)Device 0: "GeForce GTX 960"CUDA Driver Version / Runtime Version 7.5 / 7.5CUDA Capability Major/Minor version number: 5.2Total amount of global memory: 4095 MBytes (4294246400 bytes)( 8) Multiprocessors, (128) CUDA Cores/MP: 1024 CUDA CoresGPU Max Clock rate: 1329 MHz (1.33 GHz)Memory Clock rate: 3600 MhzMemory Bus Width: 128-bitL2 Cache Size: 1048576 bytesMaximum 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 layersMaximum Layered 2D Texture Size, (num) layers 2D=(16384, 16384), 2048 layersTotal amount of constant memory: 65536 bytesTotal amount of shared memory per block: 49152 bytesTotal number of registers available per block: 65536Warp size: 32Maximum number of threads per multiprocessor: 2048Maximum number of threads per block: 1024Max 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 bytesTexture alignment: 512 bytesConcurrent copy and kernel execution: Yes with 2 copy engine(s)Run time limit on kernels: YesIntegrated GPU sharing Host Memory: NoSupport host page-locked memory mapping: YesAlignment requirement for Surfaces: YesDevice has ECC support: DisabledDevice supports Unified Addressing (UVA): YesDevice PCI Domain ID / Bus ID / location ID: 0 / 1 / 0Compute Mode:< Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 7.5, CUDA Runtime Version = 7.5, NumDevs = 1, Device0 = GeForce GTX 960
Result = PASS
*注:我安装时CUDA Driver Version和CUDA Runtime Version不同,不过暂时不影响,安装时候两个版本最好一样。
如果没有这些信息,那肯定是安装不成功,可以逐步排除一下原因!
第三部分:安装cuDNN
这里强烈建议大家安装与cuda版本相匹配的cudnn,这样会避免很多不必要的兼容麻烦。比如我安装的是cuda-7.0版本,那么安装cudnn-v3以上会比较好。
下载cudnn-7.0-linux-x64-v4.0-prod.tgz,
cudnn-v4安装,适用于cuda7.0 以及later
a. 安装前请去先官网下载最新的cuDNN (cudnn-7.0-linux-x64-v4.0-prod.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.7 /usr/local/lib/libcudnn.so.4 sudo ln -sf /usr/local/lib/libcudnn.so.4 /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_2016.tar.gz chmod a+x parallel_studio_xe_2016 -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.1
参考如下教程
https://scivision.co/anaconda-Python-opencv3/
cmake -DBUILD_TIFF=ON -DENABLE_AVX=ON -DWITH_OPENGL=ON -DWITH_OPENCL=ON -DWITH_IPP=ON -DWITH_TBB=ON -DWITH_EIGEN=ON -DWITH_V4L=ON -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=$(python -c "import sys; print(sys.prefix)") -DPYTHON_EXECUTABLE=$(which python) -DPYTHON_INCLUDE_DIR=$(python -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") -DPYTHON_PACKAGES_PATH=$(python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())") ..
或者使用conda下载
conda install --channel https://conda.anaconda.org/menpo opencv3
第六部分:安装Caffe所需要的python环境(spyder)
bash Anaconda3-4.0.0-Linux-x86_64.sh
因为在安装Anaconda时一直提示错误,因此本人直接下载Ubuntu软件中心的一个python开发环境spyder。
安装python环境就是为了提供一个好的python开发环境,因此推荐大家安装caffe官网推荐的ipython-notebook,安装方便,使用也简单, Jupyter安装地址
第七部分:编译Caffe
Caffe下载 ,进入caffe-master文件夹的python目录,执行如下命令:
for req in $(cat requirements.txt); do conda install $req; done
下载安装所需依赖包。
进入caffe-master目录,复制一份Makefile.config.examples
cp Makefile.config.example Makefile.config
修改其中的一些路径,如果前边和我说的一致,都选默认路径的话,那么配置文件应该为:
USE_CUDNN := 1 #cudnn加速 CUDA_DIR := /usr/local/cuda
OPENCV_VERSION := 3
BLAS := mkl
ANACONDA_HOME := $(HOME)/anaconda3 # PYTHON_INCLUDE := $(ANACONDA_HOME)/include \ # $(ANACONDA_HOME)/include/python2.7 \ # $(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include \PYTHON_INCLUDE := $(ANACONDA_HOME)/include \ $(ANACONDA_HOME)/include/python3.5m \ $(ANACONDA_HOME)/lib/python3.5/site-packages/numpy/core/include \ # Uncomment to use Python 3 (default is Python 2) PYTHON_LIBRARIES := boost_python3 python3.5m# PYTHON_INCLUDE := /usr/include/python3.5m \ # /usr/lib/python3.5/dist-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
WITH_PYTHON_LAYER := 1
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.1,因此配置好Makefile.config文件之后,需要对Makefile进行修改(实现对opencv 3.x的支持)
查找“Derive include and lib directories”一节,修改“LIBRARIES +=”的最后一行,增加opencv_imgcodecs
opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs
并且 一定要修改 BLAS?=mkl
否则会报错,报错如下:
/usr/bin/g++ src/caffe/solver.cpp -pthread -fPIC -DNDEBUG -O2 -I/usr/local/include/python2.7 -I/usr/local/lib/python2.7/dist-packages/numpy/core/include -I/usr/local/include -Ibuild/src -I./src -I./include -I/usr/local/cuda/include -c -o build/src/caffe/solver.o
In file included from ./include/caffe/util/math_functions.hpp:12:0,
from src/caffe/solver.cpp:13:
./include/caffe/util/mkl_alternate.hpp:13:19: fatal error: cblas.h: No such file or directory
compilation terminated.
保存,退出。
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接口配置:
make pycaffe -j8
make distribute
如果上述步骤没有错误,那么配置路径:
export LD_LIBRARY_PATH=/opt/intel/mkl/lib/intel64:/home/gallup/anaconda3/lib;$LD_LIBRARY_PATH
export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libstdc++.so.6:$LD_PRELOAD
export PYTHONPATH=/home/gallup/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安装的所有步骤完结。
后续继续更新。