centos 6.5安裝caffe
總結:在安裝protobuf,hdf5等的時候指定了安裝路徑,這導致在11、12兩個步驟中要配置編譯選項及連結庫的位置,這些軟體預設應該是安裝在
/usr/local
下的,如果這個推斷是正確的,那麼只需要編譯caffe之前在/etc/ld.so.conf
中新增如下內容:
/usr/local/lib
/usr/local/lib64
一、伺服器配置
作業系統:centos 6.5
GPU:
[[email protected] ~]# lspci | grep -i nvidia
02:00.0 3D controller: NVIDIA Corporation GK110GL [Tesla K20c] (rev a1)
04 :00.0 3D controller: NVIDIA Corporation GK110GL [Tesla K20c] (rev a1)
83:00.0 3D controller: NVIDIA Corporation GK110GL [Tesla K20c] (rev a1)
84:00.0 3D controller: NVIDIA Corporation GK110GL [Tesla K20c] (rev a1)
注意:這裡使用的是命令列版的centos,如果是圖形介面,需要另外配置。
二、安裝過程1
在安裝之前,建議建立一個檔案件,將涉及到的安裝包放入其內,便於管理:
$ mkdir caffe
$ cd caffe
另外,記得更新一下系統:
$ yum update -y
1.安裝cuda
nvidia官網提供了yum源,因此只需安裝yum源,便可輕鬆安裝cuda,省去編譯的複雜過程。需要注意的是一定要根據直接的作業系統選擇合適的版本,詳情點這裡:
$ yum install epel-release
$ wget http://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/cuda-repo-rhel7-7.0-28.x86_64.rpm
$ rpm -iv cuda-repo-rhel7-7.0-28.x86_64.rpm
$ yum search cuda
$ yum install cuda
2.安裝opencv
$ yum install opencv-devel
# 配置 OpenCV 環境
$ git clone https://github.com/jayrambhia/Install-OpenCV
$ cd Install-OpenCV/RedHat
$ ./opencv_latest.sh
在一些資料上看到這樣的安裝過程,有兩個問題:(1)是否需要執行yum install opencv-devel
,根據Install-OpenCV/RedHat/opencv_install.sh
檔案,應該是不需要的,有勇氣的同學可以試一下!(2)執行./opencv_latest.sh
後發現安裝不成功,原因可能是centos一些軟體版本過低造成的。沒辦法選擇手動安裝,記得參考Install-OpenCV/RedHat/opencv_install.sh
2:
$ yum -y groupinstall "Development Tools"
$ yum -y install wget unzip opencv opencv-devel gtk2-devel cmake
$ wget -O opencv-2.4.9.tar.gz
$ http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.9/opencv-2.4.9.tar.gz/download
$ tar -zxf opencv-2.4.9.tar.gz
$ cd opencv-2.4.9
$ mkdir build
$ cd build
$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D CUDA_GENERATION=Kepler ..
$ make -j8
$ make install
cmake需要指定GPU架構3 :-D CUDA_GENERATION=Kepler,否則報錯:Unsupported gpu architecture ‘compute_11’
安裝的過程可能沒那麼順利,經常會遇到各種錯誤。例如生成lib/libopencv_highgui.so.2.4.9找不到png_set_longjmp_fn
,可以這樣解決:
#google之後發現這個函式定義在libpng中
#檢視libopencv_highgui.so.2.4.9引用了哪個libpng
$ ldd lib/libopencv_highgui.so.2.4.9 | grep libpng
#檢視該lipng中是否定義了png_set_longjmp_fn,注意根據自己的環境替換掉/usr/lib64/libpng12.so.0.49.0
$ readelf -s /usr/lib64/libpng12.so.0.49.0 | grep png_set_longjmp_fn
#沒有任何輸出,說明沒有定義,則需要安裝更新的版本
$ wget http://github.com/glennrp/libpng-releases/raw/master/libpng-1.5.23.tar.xz
$ tar -xvf libpng-1.5.23.tar.xz
$ cd libpng-1.5.23
$ make install
安裝後發現仍然找不到,這是因為連結時查詢路徑的問題4:
$ cd /usr/local/lib
$ cp -d libpng15.a libpng15.la libpng15.so* libpng.a libpng.* /usr/lib64
另外可能遇到的問題是編譯過程中提示:
opencv-2.4.9/modules/gpu/src/nvidia/core/NCVPixelOperations.hpp(51): error: a storage class is not allowed in an explicit specialization
3.安裝atlas、snappy、boost
$ yum install atlas-devel snappy-devel boost-devel
4.安裝protobuf
$ cd ~/caffe
$ tar –xvf protobuf-2.5.0.tar.gz
$ cd protobuf-2.5.0
$ ./configure --prefix=/opt/protobuf
$ make
$ make install
5.安裝leveldb
$ cd ~/caffe
$ tar –xvf leveldb-1.7.0.tar.gz
$ cd leveldb-1.7.0
$ make
$ cp libleveldb* /usr/lib/
$ cp –r include/leveldb /usr/local/include
6.安裝hdf5
$ cd ~/caffe
$ tar –xvf hdf5-1.8.8.tar.bz2
$ cd hdf5-1.8.8
$ ./configure --prefix=/opt/hdf5
$ make
$ make install
7.安裝glog
$ cd ~/caffe
$ tar –xvf glog-0.3.3.tar.gz
$ cd glog-0.3.3
$ ./configure
$ make
$ make install
8.安裝gflags
$ cd ~/caffe
$ unzip master.zip
$ cd gflags-master
$ mkdir build
$ cd build
$ export CXXFLAGS=”-fPIC”
$ cmake ..
$ make
$ make install
9.安裝lmdb
$ wget https://codeload.github.com/LMDB/lmdb/tar.gz/LMDB_0.9.15
$ tar -xvf LMDB_0.9.15.tar.gz
$ make
$ make install
10.將 /opt/protobuf/bin 加入到 PATH
echo 'export PATH=$PATH:/opt/protobuf/bin' >> ~/.bashrc
11.安裝caffe
$ cd ~/caffe
$ unzip caffe-master.zip
$ cd caffe-master
$ cp Makefile.config.example Makefile.config
$ vi Makefile
# 修改內容為:
# COMMON_FLAGS 加上 –I/opt/protobuf/include –I/opt/hdf5/include
# LDFLAGS 加上 –L/opt/protobuf/lib –L/opt/hdf5/lib
# LIBRARIES += boost_thread 改為 LIBRARIES += boost_thread-mt
$ vi Makefile.config
# 修改內容為:
# LIBRARY_DIRS 加上 /usr/lib64/atlas
$ make all
12. 配置執行環境
$ vi /etc/ld.so.conf.d/caffe.conf
# 增加內容
# /usr/local/cuda/lib64
# /opt/protobuf/lib
# /opt/hdf5/lib
# /usr/local/lib
$ ldconfig
13. 執行
$ reboot
$ sh data/mnist/get_mnist.sh
$ sh examples/mnist/create_mnist.sh
$ vi examples/mnist/lenet_solver.prototxt
# 修改 ~/caffe/caffe-master/examples/mnist/lenet_solver.prototxt 檔案設定執行 CPU 版本或者 GPU 版本。
# 修改最後一行: solver_mode: CPU 或者 solver_mode: GPU
$ time sh examples/mnist/train_lenet.sh