linux下caffe-gpu的编译安装

服务器的环境

Ubuntu18.04,

python3.6

CUDA 10.0,

cuDNN 7.6.3

opencv3.4.6

查看cuda和cudnn版本

nvcc -V
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

基本上都是在普通用户(caffe)目录下安装的,服务器中的CUDA10和CUDNN已经安装好了(都在正常的位置),python也已经在根目录下安装好了,opencv3.4.6我是直接在自己的用户目录下(caffe)安装完成了,具体可以看我的博客

linux下无权限安装opencv3.4.6

1、源码下载

到Github直接下载Caffe

https://github.com/BVLC/caffe

unzip caffe-master.zip
mv caffe-master caffe

需要的依赖环境安装

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
sudo apt-get install libopenblas-dev liblapack-dev libatlas-base-dev
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev

2、配置文件修改

在caffe目录下

cd caffe

 Makefile.config文件的修改

cp Makefile.config.example Makefile.config 
vim Makefile.config

对Makefile.config的下面几处进行修改

将:
#USE_CUDNN := 1 
改为:
USE_CUDNN := 1 
将:
# USE_OPENCV := 0
改为:
USE_OPENCV := 1
将:
#OPENCV_VERSION := 3  
改为:
OPENCV_VERSION := 3
将:
#WITH_PYTHON_LAYER := 1   
改为:
WITH_PYTHON_LAYER := 1  

在CUDA_ARCH := 后前两行即有*_20和*_21的两行前面添加#,不过我是直接 删除了:

# For CUDA >= 9.0, comment the *_20 and *_21 lines for compatibility.
CUDA_ARCH := #-gencode arch=compute_20,code=sm_20 \
		#-gencode arch=compute_20,code=sm_21 \
		-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

对于python路径也是要修改了(我使用的是根目录下的opencv3.6),还有就是python解释器下的numpy路径也要添加进去。

将python2.7的注释掉
#PYTHON_INCLUDE := /usr/include/python2.7 \
                /usr/lib/python2.7/dist-packages/numpy/core/include

下面添加python3.6的路径
PYTHON_INCLUDE := /usr/include/python3.6 \
                /usr/local/lib/python3.6/dist-packages/numpy/core/include

将下面的注释掉,
#INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
#LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib

然后添加
INCLUDE_DIRS := /home/caffe/opencv34/include/ $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/
LIBRARY_DIRS := /home/caffe/opencv34/lib/ $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial/

注意

我将include和lib中的opencv的安装路径放在了最前面,让编译器最先寻找这个路径才可以找到,我试过,放在后面就失败了。因为编译器比较笨,多个opencv版本容易犯冲突。总是报下面的错误

.build_release/lib/libcaffe.so: undefined reference to `cv::imread(cv::String const&, int)'
.build_release/lib/libcaffe.so: undefined reference to `cv::String::allocate(unsigned long)'
.build_release/lib/libcaffe.so: undefined reference to `cv::String::deallocate()'
.build_release/lib/libcaffe.so: undefined reference to `cv::imencode(cv::String const&, cv::_InputArray const&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<int, std::allocator<int> > const&)'

修改Makefile文件

vim Makefile

如下图()

 

将下面注释
#NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS)
添加
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)

​将下面注释
#LIBRARIES += glog gflags protobuf boost_system boost_filesystem m
添加
LIBRARIES += glog gflags protobuf leveldb snappy \
             lmdb boost_system boost_filesystem hdf5_hl hdf5 m \
             opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs

 3、编译安装

在caffe目录下,make clean主要作用是清理上次编译(第一次编译可以不用执行)。

make clean
make all -j16

成功了

测试 

make test -j16

 

make runtest -j16

出现错误

主要原因是/usr/local/lib没有这个libcudart.so.10.0,现在只需将/usr/local/cuda/lib64文件下的libcudart.so.10.0拷贝一份给/usr/local/lib文件夹下。执行下面的命令就可以了。

sudo cp /usr/local/cuda/lib64/libcudart.so.10.0 /usr/local/lib/ && sudo ldconfig

如果/usr/local/lib文件缺少 libcudart.so.10.0,那估计也缺少libcublas.so.10.0,libcurand.so.10.0,libcudnn.so.7 文件。

sudo cp /usr/local/cuda/lib64/libcublas.so.10.0 /usr/local/lib/ && sudo ldconfig
sudo cp /usr/local/cuda/lib64/libcurand.so.10.0 /usr/local/lib/ && sudo ldconfig
sudo cp /usr/local/cuda/lib64/libcudnn.so.7 /usr/local/lib/ && sudo ldconfig

各种环境ok的话,在caffe目录下

make runtest -j16

 

下面配置安装pycaffe

make pycaffe -j16

 

基本上caffe编译安装就基本完成了

 注意

在caffe目录下输出python,无法使用pycaffe

但是在caffe用户目录下确是可以使用的

4、MNIST 模型训练和测试

训练

在caffe目录下,下载mnist数据集

./data/mnist/get_mnist.sh

转换数据格式

./examples/mnist/create_mnist.sh

 训练  

./examples/mnist/train_lenet.sh

测试

在caffe目录下

touch test_lenet.sh
vim test_lenet.sh

在文件中添加

./build/tools/caffe.bin test -model examples/mnist/lenet_train_test.prototxt -weights examples/mnist/lenet_iter_10000.caffemodel -iterations 100
chmod +x test_lenet.sh
./test_lenet.sh 

测试成功说明caffe的整个环境是ok的。

发布了102 篇原创文章 · 获赞 117 · 访问量 33万+

猜你喜欢

转载自blog.csdn.net/pursuit_zhangyu/article/details/104770610
今日推荐