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的。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章