Caffe作为较早的一款深度学习框架,很是流行。然而,由于依赖项众多,而且Jia Yangqing已经毕业,所以留下了不少的坑。这篇博客记录了我在一台操作系统为Ubuntu14.04.3的DELL游匣7559笔记本上编译Caffe的过程,主要是在编译python接口时遇到的import error问题的解决和找不到HDF5链接库的问题。
修改Makefile.config
当从github上clone下来Caffe的源码之后,我们首先需要修改Makefile.config文件,自定义配置。下面是我的配置文件,主要修改了CUDNN部分和Anaconda Python部分。
1 | ## Refer to http://caffe.berkeleyvision.org/installation.html |
对于CUDNN,从Nvidia官方网站上下载后,可不按照官方给定的方法安装。直接将include
中的头文件放于/usr/local/cuda-8.0/include
下,将lib
中的库文件放于/usr/loca/cuda-8.0/lib64
文件夹下即可。
构建
使用make -j8
进行编译,并使用make pycaffe
生成python接口。并在.bashrc
中添加内容:1
export PYTHONPATH=/path_to_caffe/python:$PYTHONPATH
结果在import caffe
时出现问题如下:1
ImportError: libcudnn.so.5: cannot open shared object file: No such file or directory
解决方法如下,详见GitHub issue讨论。1
sudo ldconfig /usr/local/cuda/lib64
然而仍有问题,如下:1
ImportError: No module named google.protobuf.internal
解决方法如下,详见G+ caffe-user group的帖子。1
pip install protobuf
不过仍然存在的问题是远程SSH登录时,不能在ipython
环境下导入caffe,不知为何。
使用make test; make runtest
进行测试,结果提示HDF5动态链接库出现问题,怀疑与Anaconda中的HDF5冲突有关。错误信息如下:
1 | error while loading shared libraries: libhdf5_hl.so.10: cannot open shared object file: No such file or directory |
解决方法为手动添加符号链接,详见GitHub讨论帖。
1 | cd /usr/lib/x86_64-linux-gnu |
另外,在另一台机器上使用MKL库时,发现会提示找不到相关动态链接库的问题。找到MKL的安装位置,默认应该在目录/opt/intel/mkl
下。使用sudo
权限,在目录/etc/ld.so.conf.d/
下建立一个名为intel_mkl_setttings.conf
的文件,将MKL安装位置下的链接库目录添加进去,如下所示:1
/opt/intel/mkl/lib/intel64_lin/
接着,运行sudo ldconfig
命令,就可以了。
测试
首先,通过make runtest
看是否全部test可以通过。其次,可以试运行example
下的LeNet训练。1
2
3
4cd $CAFFE_ROOT
./data/mnist/get_mnist.sh
./examples/mnist/create_mnist.sh
./examples/mnist/train_lenet.sh