Caffe - Ubuntu 安装及问题解决
- Ubuntu14.04
- CUDA 8.0
- cuDNN
Caffe 安装
Step 1 CUDA安装
要结合使用 Caffe 和 NVIDIA GPU,需要安装CUDA 工具包.Step 2 cuDNN 安装
- 下载适用于Linux的cuDNN库,这里需要注册加速计算开发人员计划;
- 下载后,解压缩文件并将其复制到CUDA目录, 以cuDNN v5.1 为例:
tar zvxf cudnn-8.0-linux-x64-v5.1.tgz
cd cuda/
sudo cp lib64/lib* /usr/local/cuda/lib64/
sudo cp include/cudnn.h /usr/local/cuda/include/
- 建立软链接,并更新:
cd /usr/local/cuda/lib64/
sudo rm -rf libcudnn.so libcudnn.so.5
sudo ln -s libcudnn.so.5.1.10 libcudnn.so.5
sudo ln -s libcudnn.so.5 libcudnn.so
sudo ldconfig -v
注:cuDNN在很多工程中兼容性较差,可能需要安装特定的历史版本,只需对如上命令中的版本进行修改.
查看caffe 是否成功使用cuDNN v5:
ldd ./build/tools/caffe.bin | grep cudnn
- Step 3 安装依赖项
$ sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler libgflags-dev libgoogle-glog-dev liblmdb-dev libatlas-base-dev git
$ sudo apt-get install --no-install-recommends libboost-all-dev
$ sudo apt-get install libatlas-base-dev # 安装 ATLAS
$ sudo apt-get install libopenblas-dev # 安装OpenBLAS
$ sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
- Step 4 安装 NCCL库
多GPUs进行并行计算,Caffe自带实现. 在多个 GPU 上运行 Caffe 需要使用 NVIDIA NCCL.
$ git clone https://github.com/NVIDIA/nccl.git
$ cd nccl
$ sudo make install -j4
$ sudo ldconfig
NCCL 库和文件头将安装在 /usr/local/lib 和 /usr/local/include 中.
NCCL主要是为了加速在多GPU环境,同时用多块GPU做training的时候,它做出一个同步,或者说Reduction时候,加速collective的过程。
它的最核心思想是什么呢?在做数据传输的时候,把大块数据切成小块,同时利用系统里面的多条链路,比如现在是PCI-E链路,同时利用PCI-E的上行和下行,尽量去避免不同的数据同时用某一个上行或者下行通道,可能会造成数据的contention,大大降低传输效率。
- Step 5 编译Caffe
- 下载Caffe
$ git clone https://github.com/BVLC/caffe.git
$ cd caffe/
$ cp Makefile.config.example Makefile.config
- 编辑 Makefile.config,进行修改:
取消 USE_CUDNN := 1 的注释,启用 cuDNN 加速;
取消 USE_NCCL := 1 的注释,启用在多个 GPU 上运行 Caffe 所需的 NCCL
- 编译安装Caffe
$ make all -j8
$ make test -j8
$ make pycaffe # python API
$ make matcaffe # matlab API,需定义matlab路径
完成安装,即可在 build/tools/caffe 中获得 Caffe 二进制文件.
查看 Caffe 库版本信息
ldd build/tools/caffe # 查看所有的库
ldd build/tools/caffe | grep cudnn # 查看cudnn 版本信息
ldd build/tools/caffe | grep openblas # 查看 openblas 库信息
Caffe 实例
- Step1 - 准备图像数据库
测试 Caffe 的训练性能需要使用图像数据库作为输入资源。Caffe 自带多个模型,可使用来自 ILSVRC12 挑战赛(“ImageNet”)的图像.
原始图像文件可从 http://image-net.org/download-images 下载(您将需要开通帐户并同意其条款.
下载原始图像文件并解压,假设原始图像存储方式如下:
/path/to/imagenet/train/n01440764/n01440764_10026.JPEG
/path/to/imagenet/val/ILSVRC2012_val_00000001.JPEG
- Step2 - 下载辅助数据
$ ./data/ilsvrc12/get_ilsvrc_aux.sh
- Step3 - 创建数据库
#更改 examples/imagenet/create_imagenet.sh 脚本中的 TRAIN_DATA_ROOT 和 VAL_DATA_ROOT 为解压后的原始图像路径
# 设置 RESIZE=true 以便在将图像添加到数据库之前将其调整到适当大小
# 创建图像数据库
$ ./examples/imagenet/create_imagenet.sh
# 创建所需的图像均值文件
$ ./examples/imagenet/make_imagenet_mean.sh
- Step4 - 训练模型
$ export LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/lib:$LD_LIBRARY_PATH
# 编辑 models/bvlc_alexnet/solver.prototxt 文件
$ ./build/tools/caffe train –solver=models/bvlc_alexnet/solver.prototxt –gpu 0
# 可以通过指定多个设备 ID(例如 0、1、2、3)或指定“-gpu all”以使用系统中所有可用的 GPU,在多个 GPU 上进行训练.
安装问题及解决
问题1 - python 相关项安装
$ sudo apt-get install python-numpy python-scipy python-matplotlib python-sklearn python-skimage python-h5py python-protobuf python-leveldb python-networkx python-nose python-pandas python-gflags Cython ipython
$ sudo apt-get install python-pip wget
问题2 - No module named lmdb
$ sudo apt-get install liblmdb-dev
或
$ sudo pip install lmdb