码迷,mamicode.com
首页 > 系统相关 > 详细

(原)Ubuntu16中编译caffe

时间:2016-08-23 01:02:18      阅读:983      评论:0      收藏:0      [点我收藏+]

标签:

 转载请注明出处:

http://www.cnblogs.com/darkknightzh/p/5797526.html

参考网址:

http://caffe.berkeleyvision.org/installation.html#prerequisites

1. 必须的依赖:Boost >= 1.55,CUDA,BLAS

看一下自己的CUDA安装在哪个目录下了。Makefile.config默认CUDA_DIR := /usr/local/cuda

依赖库:protobuf, glog, gflags, hdf5。安装:

sudo apt-get install libgflags-dev
sudo apt-get install libgoogle-glog-dev
sudo apt-get install libhdf5-serial-dev

BLAS可以使用atlas,mkl或者openblas。atlas是caffe默认选择的。mkl和openblas性能更好。安装atlas:

sudo apt-get install libatlas-base-dev

2. 可选的:OpenCV >= 2.4 including 3.0(默认使用2.4。如果想不使用,则将Makefile.config中11行取消注释;如果使用opencv3,将Makefile.config中21行取消注释)

IO库:lmdb(默认使用。如果想不使用,则将Makefile.config中13行取消注释)、leveldb (note: leveldb requires snappy;默认使用。如果想不使用,则将Makefile.config中12行取消注释)

pip install lmdb(可能需要先安装pip:sudo apt install python-pip)

cuDNN

3. 如果只使用cpu的话,将Makefile.config中的CPU_ONLY := 1取消注释。

使用cuDNN的话,取消注释Makefile.config中的USE_CUDNN := 1。

使用mkl的话,设置Makefile.config中BLAS := mkl

使用openblas的话,设置Makefile.config中BLAS := open

说明:装完依赖的库之后,最好重启一下(比如装完boost,重启一下),因为装完boost没有重启,然后make all时能通过了。

此处make all和make test都通过了,但是make runtest会提示libboost_system未定义(实际上装的是中文的ubuntu,因而显示信息时未定义。但是开始没截图。现在成功了,没法截图了。只能找一个英文的信息贴这里。。。):

undefined reference to `boost::system::generic_category()‘

4. 编译caffe:终端中输入如下命令:

cp Makefile.config.example Makefile.config
# Adjust Makefile.config (for example, if using Anaconda Python, or if cuDNN is desired)
make all
make test
make runtest

如果想用多线程编译,使用make all -j8,其中8为并行的线程数。

ps:使用cmake编译(CMake version >= 2.8.7):

首先定位到caffe文件夹内。之后:

mkdir build
cd build
cmake ..
make all
make install
make runtest

说明:使用cmake编译没成功。。。总是有问题。最终又回到了make编译。

5. 将caffe的头文件拷贝到系统目录下:

sudo cp -a build/lib /usr
sudo cp –a include /usr

刚才很奇怪,用第二句就一直提示:

cp: 无法获取‘–a‘ 的文件状态(stat): 没有那个文件或目录

cp: 略过目录‘include‘

之后第二句开始的include改成了绝对路径,就可以了。。。(关键的在另一台电脑上,第二句是可以用的):

sudo cp -a /home/XXX/caffe-master/include /usr

6. 遇到的问题:

1)fatal error: hdf5.h: 没有那个文件或目录”解决方法

http://blog.csdn.net/xue_wenyuan/article/details/52037121

在Makefile.config文件的第90行,添加/usr/include/hdf5/serial/ 到 INCLUDE_DIRS。

INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial

在Makefile文件的第181行,把 hdf5_hl 和hdf5修改为hdf5_serial_hl 和 hdf5_serial。

LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial

2)/usr/local/cuda/bin/nvcc:命令未找到:

在Makefile.config的第28行内容从CUDA_DIR := /usr/local/cuda修改为(我这边nvcc所在位置为/usr/lib/nvidia-cuda-toolkit/bin/nvcc):

CUDA_DIR := /usr/lib/nvidia-cuda-toolkit

3)error: ‘memcpy’ was not declared in this scope

   return (char *) memcpy (__dest, __src, __n) + __n;

http://blog.csdn.net/eagelangel/article/details/51531801

Makefile中409行,增加-D_FORCE_INLINES

NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)

4)直接使用make all,提示下面的内容。

技术分享

网上说是protobuf 版本不一致。重新装了最新版的protobuf,然后用make all,还是会提示上面的内容。此时显示所有文件夹的话,实际上在caffe根目录下有.build_release的目录,里面就有caffe.pb.cc。

用make clean,提示权限不足(caffe放在了usr/local目录下),然后使用sudo make clean(如果是在home的路径下,应该不需要sudo的),成功清除了.build_release里面的文件。之后再make all,就不会有上面的提示了。

(原)Ubuntu16中编译caffe

标签:

原文地址:http://www.cnblogs.com/darkknightzh/p/5797526.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!