- 前言
网上现已有不少在TX2上配置Caffe的教程,但在实际操作过程中还是遇到了一些意想不到的问题。所以将整个配置过程作一个总结,以备后续参考。
2. 组件检查
首先需要说明的是,配置Caffe需要在正确安装Jetpack和设置环境变量之后方可进行。并且在配置Caffe之前,最好先进行一下各组件的检查。
1. 查看CUDA版本
打开终端输入,
nvcc -V
注意记住版本号。(Jetpack3.2附带的是CUDA9.0)
2. 查看OpenCV版本
pkg-config --modversion opencv
同样需要记住版本号。(Jetpack3.2附带的是OpenCV 3)
3. 查看Cmake是否安装
cmake --version
不知为何Jetpack并没有装上Cmake,故需要输入
apt-get install cmake
3. 安装与下载
安装一般依赖项
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install --no-install-recommends libboost-all-dev
安装BLAS依赖项
sudo apt-get install libatlas-base-dev
安装Python及其依赖项
sudo apt-get install python
sudo apt-get install python-dev
sudo apt-get install python-numpy
sudo apt-get install ipython
sudo apt-get install ipython-notebook
sudo apt-get install python-sklearn
sudo apt-get install python-skimage
sudo apt-get install python-protobuf
安装谷歌glog和gflags和lmdb依赖项
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
安装Git并下载源码(或者离线安装,推荐)
sudo apt-get install git
git clone https://github.com/BVLC/caffe.git
此处需要注意的是,git clone的过程可能会十分缓慢,并且可能中途崩掉。主要有以下几种问题,并附上解决办法:
- git clone下载速度0bytes 出现error: RPC failed; curl 18 transfer closed with outstanding read data,这是因为curl的postBuffer默认值太小的原因。打开终端输入
git config –global http.postBuffer 524288000
- 下载速度过慢,可以尝试将https更改为git。
- 亲测在国内上午下载速度非常快(可能是因为对应美帝深夜?)
- 如果下载速度还是过慢,可以使用离线安装的方式。先从https://github.com/BVLC/caffe.git下载Caffe,然后解压到home下。(推荐)
4.修改Makefile与编译Caffe
这里遇到一个问题是,通过前文步骤安装下来的caffe文件夹的Owner是root(可以看到caffe文件夹上有一个锁),也就是说没有对caffe文件夹内文件进行修改的权限。所以这里通过以下代码对caffe文件夹进行解锁。(重要)
sudo chown nvidia caffe/ -R
-----------------------------------------------------------------------------------------------------
接下来转到caffe文件夹下,
cd caffe
生成Makefile.config
cp Makefile.config.example Makefile.config
打开Makefile.config进行必要的修改(重要)
gedit Makefile.config
需要进行更改的条目有以下几项(后续开发环境如有变动,需要及时再次更改Makefile.config,并重新编译caffe)
- 需要使用cuDNN,去掉注释
# USE_CUDNN := 1
- 匹配数据类型,去掉注释后,将对应代码改为以下;
USE_OPENCV := 1
USE_LEVELDB := 1
USE_LMDB := 1
- 匹配OpenCV版本
OPENCV_VERSION := 1
- 匹配CUDA版本,删掉该部分的前两句
-gencode arch=compute_20,code=sm_20 \
-gencode arch=compute_25,code=sm_25 \
得到如下形式,
CUDA_ARCH := -gencode arch=compute_30,code=sm_30 \
-gencode arch=compute_35,code=sm_35 \
-gencode arch=compute_50,code=sm_50 \
-gencode arch=compute_52,code=sm_52 \
-gencode arch=compute_60,code=sm_60 \
-gencode arch=compute_61,code=sm_61 \
-gencode arch=compute_61,code=compute_61
- 需要使用到caffe的Python layer,去掉注释
WITH_PYTHON_LAYER := 1
- 添加haf5路径,将以下代码
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
改为,
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
值得说明的是,如果后续开发环境变动(比如将Python从2.x升级到3.x),需要对makefile.config进行对应修改,然后重新编译。
-----------------------------------------------------------------------------------------------------
打开Make.file进行修改,
gedit Makefile
搜索到以下代码处,
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5
将其更改为,
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial
关闭Makeflie,打开终端,输入
sudo make clean
sudo make all -j8
开始编译,直到编译完成。
5. 测试
对编译结果进行检查,打开终端输入,
sudo make test -j8
执行完成后输入,
sudo make runtest -j8
检查过程如下图所示,最后输出PASS即说明检查无误。
运行minst demo进行测试,打开终端输入
cd caffe;
# 下载mnist数据集
sudo sh data/minst/get_mnist.sh
# 运行demo
sudo sh example/mnist/create_mnist.sh
sudo sh example/mnist/train_lenet.sh
运行结果如下,可以看到准确率为99%。
至此Caffe配置完成,后续还需要进行caffe的python接口的编译。