deepin15.4.1安裝caffe
此安裝僅僅針對intel核顯及NVIDIA獨顯用戶
cpu:intel core i7 6700Q
顯卡:NVIDIA gt960m
操作系統: deepin15.4.1 x64
步驟
- cuda及cudnn安裝
- opencv3.2編譯安裝
- caffe安裝
1.安裝nvidia-bumblebee,實現雙顯卡切換
對於筆記本用戶來說,一直開着獨顯的話發熱量會明顯增大,並且耗電也會變快,所以需要安裝bumblebee來切換顯卡,平時只用核顯就足夠了,需要運行cuda或者玩遊戲的話纔開啓獨顯。
2.安裝cuda開發工具
cuda在linux下的開發工具基本上夠用了,有基於eclipse 的nsight,有visual profiler性能分析工具,還有pycuda庫實現對python運算的加速。但是我以前在deepin上面嘗試安裝官方的.run包,均以失敗告終,很容易把電腦搞崩潰。最近終於找到了從軟件源直接安裝cuda的方法。
具體安裝方法:
1.安裝nvidia-bumblebee
sudo apt update
sudo apt install bumblebee bumblebee-nvidia nvidia-smi
一行命令搞定nvidia驅動、bumblebee切換程序、和顯卡狀態監控程序。
不用管nouveau驅動,系統會自己屏蔽掉。
然後重啓
sudo reboot
重啓後測試
nvidia-smi
和
optirun nvidia-smi
2.cuda開發工具
首先安裝配置g++,gcc
因爲cuda版本原因,cuda8之前都只支持g++-4.8,gcc-4.8
所以gcc需要降級
sudo apt install g++-4.8 gcc-4.8
然後更改軟連接
cd /usr/bin
sudo rm gcc g++
sudo ln -s g++-4.8 g++
sudo ln -s gcc-4.8 gcc
然後下載開發工具
sudo apt install nvidia-cuda-dev nvidia-cuda-toolkit nvidia-nsight nvidia-visual-profiler
使用nsight的方法爲:在終端下輸入
optirun nsight
3.安裝pycuda擴展
有的同學有使用python 寫cuda的需求,推薦pycuda,能夠自定義核函數,並且裏面帶的GpuArray這個數據結構很好用安裝方法爲:
sudo apt install python-pycuda
寫一個簡單的測試代碼
from __future__ import print_function
from __future__ import absolute_import
import pycuda.autoinit
import pycuda.gpuarray as gpuarray
import pycuda.driver as cuda
import numpy
import time
free_bytes, total_bytes = cuda.mem_get_info()
exp = 10
while True:
fill_floats = free_bytes / 4 - (1<<exp)
if fill_floats < 0:
raise RuntimeError("couldn't find allocatable size")
try:
print("alloc", fill_floats)
ary = gpuarray.empty((fill_floats,), dtype=numpy.float32)
break
except:
pass
exp += 1
ary.fill(float("nan"))
print("filled %d out of %d bytes with NaNs" % (fill_floats*4, free_bytes))
time.sleep(10)
另存爲cuda_test.py
然後
optirun python python cuda_test.py
至此cuda的安裝完成,爲了用NVIDIA顯卡加速深度學習,還需要安裝cudnn
cudnn詳細安裝步驟
1、從官網上下載cudnn的安裝包。
2、將安裝包解壓,將此安裝包放在常用的放遠嗎路徑下即可,並在當前路徑下進行解壓,解壓後的文件夾名爲cuda。
3、在終端上編輯如下代碼:
cd ./cuda/include
sudo cp *.h /usr/include (這裏是你安裝cuda的地址,由於使用apt安裝,系統講cuda直接安裝在/usr目錄)
cd ./cuda/lib64
sudo cp libcudnn.so.7.0.1 /usr/lib
sudo cp libcudnn_static.a /usr/lib
sudo ln -s /usr/libcudnn.so.7.0.1 /usr/libcudnn.so.7
sudo ln -s /usr/libcudnn.so.7 /usr/libcudnn.so
至此cudnn安裝完畢,第一步完成。
opencv的編譯安裝過程用到cmake,cmake命令行參數配置太複雜,這裏採用他的圖形化工具
1.安裝OpenCV所需要的庫
sudo apt-get install build-essential (如果按照之前的流程一路走下來,此步驟省略,因爲會造成gcc/g++從4.8升級到當前最新版本,後面的cuda及cudnn加速程序編譯報錯)
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
sudo apt-get install libglu1-mesa-dev (OpenGL相關的依賴項)
2.從github上下載OpenCV源代碼
git clone https://github.com/opencv/opencv.git
3.安裝cmake的GUI工具,方便配置
sudo apt-get install cmake-gui
然後打開該軟件,輸入OpenCV源碼在本地的路徑,已經編譯配置過程產生的中間文件保存在本地的路徑
× 路徑配置完之後,澱積左下角的Configure按鈕,開始執行依賴檢查等環境配置
× 成功之後,會在上面產生一個列表,是將來編譯時需要的一些環境配置,一般默認即可,這裏我們稍作修改,修改CMAKE_BUILD_TYPE爲Release,修改CMAKE_INSTALL_PREFIX爲/usr/local,選中WITH-OPENGL
× 完了之後,澱積左下角的Generate按鈕,將會根據上面的配置生成Makefile文件
在build路徑下執行命令
make -j8 (多線程編譯,注意散熱,這裏的數字8根據自己計算機cpu核心的個數自行調整)
編譯過程耗時很久,大概一個半小時左右,編譯完成之後安裝即可
sudo make install
sudo ldconfig
測試opencv安裝是否成功,opencv完全編譯安裝會安裝對應的python接口,在終端中簡單測試即可
至此opencv3.2安裝完成
終於來到重頭戲了,caffe的安裝
1.依賴庫安裝
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install --no-install-recommends libboost-all-dev
安裝ATLAS,輸入下述命令:
sudo apt-get install libatlas-base-dev
安裝剩餘依賴項
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
2.刪除deepin軟件源中太新的庫,這些庫採用比gcc/g++4.8.5更新的編譯器編譯,有不兼容部分,後續的caffe編譯中會出現找不到對應函數的情況
sudo apt-get remove libleveldb-dev
sudo apt-get remove libprotobuf-dev
sudo apt-get remove libgflags-dev
sudo apt-get remove libgoogle-glog-dev
3.重新編譯安裝上述庫
leveldb
git clone https://github.com/google/leveldb.git
cd ./leveldb/
make -j8
安裝leveldb
sudo cp -r /leveldb/include/ /usr/include/
sudo cp /leveldb/out-shared/libleveldb.so.1.20 /usr/lib/
sudo ln -s /usr/lib/libleveldb.so.1.20 /usr/lib/libleveldb.so.1
sudo ln -s /usr/lib/libleveldb.so.1.20 /usr/lib/libleveldb.so
sudo ldconfig
查看安裝是否成功
ls /usr/lib/libleveldb.so*
# 顯示下面 3 個文件即安裝成功
/usr/lib/libleveldb.so.1.20
/usr/lib/libleveldb.so.1
/usr/lib/libleveldb.so
protobuf編譯安裝
deepin庫中默認採用的是protobuf-3.0x,而caffe的github代碼中兼容protobuf2.5
protobuf2.5在其官方的github中已經沒法提供下載,這裏提供一個鏈接https://code.google.com/p/protobuf/downloads/list,網絡不行的話,可以去簡單檢索一下,到csdn下載即可
tar -zxvf protobuf-2.5.0
cd protobuf-2.5.0
./autogen.sh
./configure --prefix=/usr/
make -j8
make check -j8
sudo make install
sudo ldconfig
查看版本
gflags安裝
git clone https://github.com/gflags/gflags.git
cd gflags
mkdir build
cd build
export CXXFLAGS="-fPIC" && cmake .. && make VERBOSE=1
make -j8
sudo make install
glog安裝
git clone https://github.com/golang/glog.git
cd glog
./configure
make
sudo make install
下載caffe源碼
git clone https://github.com/BVLC/caffe.git
修改Makefile.config
cp Makefile.config.example Makefile.config
vim Makefile.config
根據個人情況修改
#USE_CUDNN := 1
改爲
USE_CUDNN := 1
opencv3版本
#OPENCV_VERSION := 3
改爲
OPENCV_VERSION := 3
使用python layer
#WITH_PYTHON_LAYER := 1
改爲
WITH_PYTHON_LAYER := 1
最重要的一項
1 INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
2 LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
修改爲
1 INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial /usr/liclude /usr/include/leveldb /usr/local/include/gflags /usr/include/google/protobuf
2 LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr /usr/lib/x86_64-linux-gnu/hdf5/serial
修改Makefile
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
至此準備工作結束,開始編譯
make all -j8
make test -j8
編譯完成,以最簡單的MNIST手寫體數據集做一個簡單測測試
# 下載MNIST數據
./data/mnist/get_mnist.sh
# 數據格式轉換
./examples/mnist/create_mnist.sh
# 訓練LeNet-5超參數(hyperparameters)
optirun ./examples/mnist/train_lenet.sh
# 測試集上做預測測試
optirun ./build/tools/caffe.bin test \
-model examples/mnist/lenet_train_test.prototxt \
-weights examples/mnist/lenet_iter_10000.caffemodel \
-iterations 100
至此,全部教程結束。
參考文獻
1.http://blog.csdn.net/liaodong2010/article/details/71482304
2.https://jingyan.baidu.com/article/36d6ed1f95e0b91bcf4883a6.html