1. 安裝顯卡驅動
個人覺得安裝顯卡驅動是最煩的,所以單獨寫了博客,參考 Ubuntu16.04系統下裝顯卡驅動 ,在這就不再敘述。
2.安裝相關依賴
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
3. 安裝cuda
如果在cuda官網上下載的是最新版本,安裝起來可能會出現錯誤,於是我安裝的cuda8.o版本
鏈接: https://developer.nvidia.com/cuda-80-ga2-download-archive
下載好之後,在下載的文件夾中打開終端,輸入命令:
sudo sh cuda_8.0.61_375.26_linux.run
出現這個界面,然後一直按enter鍵,直到進度條爲100%,然後根據提示,依次輸入accept,n,y,y,y
安裝結束後,設置變量環境,輸入命令:
sudo gedit ~/.bashrc
將以下內容寫入到~/.bashrc尾部:(別忘了改你安裝的對應的版本)
export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda8.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
保存退出,輸入source ~/.bashrc
檢查是否安裝成功,輸入命令nvcc --version
如果出現上圖信息,說明cuda安裝成功。
4.安裝cudnn8.0
cudnn8.0下載連接:https://developer.nvidia.com/rdp/cudnn-archive
下載好之後,同樣在文件中打開終端,輸入命令
sudo tar -zxvf cudnn-8.0-linux-x64-v5.1.tgz
解壓後,接着輸入命令
cd cuda/include
sudo cp cudnn.h /usr/local/cuda/include
cd ..
cd lib64
sudo cp lib* /usr/local/cuda/lib64/
cd /usr/local/cuda/lib64/
sudo rm -rf libcudnn.so libcudnn.so.5
sudo ln -s libcudnn.so.5.0.5 libcudnn.so.5
sudo ln -s libcudnn.so.5 libcudnn.so
測試一下是否安裝成功,輸入命令
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
如果出現上圖信息,說明配置成功。
5.安裝opencv
ubuntu安裝caffe之前,必定要安裝opencv,網上很多教程都是說安裝opencv3.1版本,不知道什麼原因,可能是因爲版本舊的原因,怎麼都安裝不上,於是我選擇了opencv3.4.6版本,直接在opencv官網上就能下載。
同樣在下載的文件下打開終端,輸入命令
unzip opencv-3.4.6.zip
sudo mv opencv-3.4.6 opencv
cd ~/opencv
mkdir build
cd build
開始配置
sudo apt install cmake
sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
編譯
sudo make -j8
以上只是編譯,下面開始安裝,輸入命令
sudo make install
檢測是否安裝成功
pkg-config opencv --modversion
如果顯示對應的安裝版本號,則說明安裝成功。
6. 安裝anaconda2
在anaconda官網上下載anaconda2,下載完後,在該文件中右擊,打開終端,輸入命令:
bash Anaconda2-2019.03-Linux-x86_64.sh
一直按enter鍵,在安裝過程中,會問安裝路徑,按回車即可。詢問是否添加到~/.bashrc中,回覆yes即可。
安裝完成後,執行命令如下:
echo 'export PATH="/home/csm/anaconda2/bin:$PATH"' >> ~/.bashrc
其中csm是我電腦用戶名,你得根據你電腦用戶名修改,接着輸入命令
source ~/.bashrc
測試一下是否安裝成功,輸入命令conda --version
,如果出現如下圖所示,則說明安裝成功。
如果你看到這裏的話,說明你前面安裝的都很順利,喝杯水冷靜一下,因爲後面還有更大的坑等着我們。
7.安裝caffe
(1)首先最下載安裝包:https://github.com/BVLC/caffe
然後進行解壓unzip caffe-master.zip
(2)然後進入caffe-master文件夾,打開終端,輸入命令,複製Makefile.config文件
sudo cp Makefile.config.example Makefile.config
(3)打開Makefile.config文件sudo gedit Makefile.config
(4)修改Makefile.config文件內容:
- 應用 cudnn
#USE_CUDNN := 1
#修改成:
USE_CUDNN := 1
- 應用 opencv 版本
#OPENCV_VERSION := 3
#修改爲:
OPENCV_VERSION := 3
- 使用 python 接口
#WITH_PYTHON_LAYER := 1
#修改爲
WITH_PYTHON_LAYER := 1
- 修改 python 路徑
在PYTHON_INCLUDE前面加一個#
#PYTHON_INCLUDE := /usr/include/python2.7 \
/usr/lib/python2.7/dist-packages/numpy/core/include
將ANACONDA_HOME和PYTHON_INCLUDE前面的#去掉,anaconda修改爲anaconda2
ANACONDA_HOME := $(HOME)/csm/anaconda2
PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
$(ANACONDA_HOME)/include/python2.7 \
$(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include
如下圖所示
5. 重要的一步
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
修改爲
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial
保存退出。
6. 在caffe-master文件夾下打雙擊打開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 hdf5_hl hdf5
#改爲:
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial
- 安裝依賴
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 libatlas-base-dev
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
conda install protobuf
- 編譯
make all -j8
,這時候你會發現各種各樣的錯,到這我都有點崩潰了,已經研究了好幾天了。 - 可能的錯誤
(1)nvcc fatal : Unsupported gpu architecture ‘compute_20’
修改方法,在caffe-master/cmake文件夾下,雙擊打開Cuda.cmake文件,將第7行修改爲第8行
1 if(CPU_ONLY)
2 return()
3 endif()
4
5 # Known NVIDIA GPU achitectures Caffe can be compiled for.
6 # This list will be used for CUDA_ARCH_NAME = All option
7 #set(Caffe_known_gpu_archs "20 21(20) 30 35 50 52 61")
8 set(Caffe_known_gpu_archs "30 35 50 52 61")
(2)In file included from /usr/include/boost/python/detail/prefix.hpp:13:0,
from /usr/include/boost/python/args.hpp:8,
from /usr/include/boost/python.hpp:11,
from tools/caffe.cpp:2:
/usr/include/boost/python/detail/wrap_python.hpp:50:23: fatal error: pyconfig.h: 沒有那個文件或目錄
這是因爲當前環境下沒有安裝的Python的開發庫,使用yum安裝一下即可,解決辦法
conda install python-devel
(3)make: *** [.build_release/src/caffe/layer_factory.o] Error 1
解決方案
make clean
export CPLUS_INCLUDE_PATH=/usr/include/python2.7
make all -j8
(4)make: *** [.build_release/lib/libcaffe.so.1.0.0] Error 1
解決方案
進入cuda/include文件夾中,打開終端命令
sudo cp cudnn.h /usr/local/cuda/include/
進入cuda/lib64文件夾中,打開終端命令
sudo cp {libcudnn.so,libcudnn.so.5,libcudnn.so.5.1.10,libcudnn_static.a} /usr/local/cuda/lib64
雖然說無法通過符號鏈接,但是不影響編譯
(5)find /usr/include -name pyconfig.h
/usr/include/boost/python/detail/wrap_python.hpp:50:23: fatal error: pyconfig.h: No such file or directory
解決方案:
注意你的anaconda2的路徑
make clean
export CPLUS_INCLUDE_PATH=/usr/include/python2.7
make all -j8
(6).build_release/tools/caffe: error while loading shared libraries: libcudart.so.8.0: cannot open shared object file: No such file or directory
Makefile:542: recipe for target ‘runtest’ failed
解決方案:
sudo cp /usr/local/cuda-8.0/lib64/libcudart.so.8.0 /usr/local/lib/libcudart.so.8.0 && sudo ldconfig
sudo cp /usr/local/cuda-8.0/lib64/libcublas.so.8.0 /usr/local/lib/libcublas.so.8.0 && sudo ldconfig
sudo cp /usr/local/cuda-8.0/lib64/libcurand.so.8.0 /usr/local/lib/libcurand.so.8.0 && sudo ldconfig
sudo cp /usr/local/cuda-8.0/lib64/libcudnn.so.5 /usr/local/lib/libcudnn.so.5 && sudo ldconfig
到這我真的無力吐槽了,就算前面出現這些個錯誤,按照百度的一一去解決,但是發現根本不管用,就在我快放棄的時候,第二天我又重新試了一遍,結果莫名其妙的就成功了,裝caffe真的需要靠運氣。
10 . 編譯成功後,即使沒報錯,也別高興的太早,在測試一下
sudo make runtest
如果運行出現下圖所示,表面安裝成功
11. 安裝 pycaffe
我以爲到這總能成功了吧,但是依然想多了,心裏是一萬cnm在崩騰。
輸入命令
sudo make pycaffe -j8
結果又報錯:
Makefile:517: recipe for target ‘python/caffe/_cmakaffe.so’ failed
解決方案:
首先確保Makefile.config中你的anaconda2的路徑是正確的,就是ANACONDA_HOME後面的路徑
然後輸入命令
sudo apt-get install python-numpy
重啓電腦,重新編譯
make clean
make all -j8
sudo make pycaffe -j8
md。終於編譯成功了,測試一下,輸入
python
import caffe
在這花了一個星期的時間終於成功了,真的很心酸