1. 程式人生 > >dlib的gpu環境配置

dlib的gpu環境配置

背景

dlib預設的是隻在cpu上,但是在cpu上一張影象進行人臉檢測以及特徵提取需要2.5秒左右,很顯然不能滿足需求,所以我們需要dlib配置成提供gpu的環境。

gpu環境

nvidia驅動

本身自帶有驅動。

cuda

wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_9.1.85-1_amd64.deb
​
sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
​
sudo dpkg -i cuda-repo-ubuntu1604_9.1.85-1_amd64.deb
sudo apt-get update
sudo apt-get install cuda-9.1
reboot
vim ~/.bashrc
export PATH=/usr/local/cuda-9.1/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-9.1/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
source ~/.bashrc
sudo ldconfig
nvidia-smi
沒有報錯,說明安裝成功。

nvcc

nvcc是cuda的開發工具,可以使用下面的命令進行安裝:

apt-get install nvidia-cuda-toolkit
安裝完成輸入nvcc沒有報錯,則說明安裝成功。

cudnn

除了安裝cuda,cudnn也是必須的。

基本上所有的深度學習框架都支援cuDNN這一加速工具,例如:Caffe、Caffe2、TensorFlow、Torch、Pytorch、Theano等。

Caffe可以通過修改Makefile.config中的相應選項來修改是否在編譯Caffe的過程中編譯cuDNN,如果沒有編譯cuDNN的話,執行一些基於Caffe這一深度學習框架的程式速度上要慢3-5倍

(Caffe官網上說不差多少,明明差很多嘛)。Caffe對cuDNN的版本不是很嚴格,只要大於cuDNN 4就可以。

cudnn安裝比較簡單,可以參考:

配置

通過pip安裝的dlib是沒有開啟gpu的,需要我們下載原始碼,手動進行編譯。

git clone https://github.com/davisking/dlib.git
cd dlib
mkdir build
cd build
cmake .. -DDLIB_USE_CUDA=1 -DUSE_AVX_INSTRUCTIONS=1
cmake --build .
cd ..
python setup.py install --yes USE_AVX_INSTRUCTIONS --yes DLIB_USE_CUDA

在編譯的時候提示下面的錯誤:

CUDA_TOOLKIT_ROOT_DIR not found or specified
-- Could NOT find CUDA (missing:  CUDA_TOOLKIT_ROOT_DIR CUDA_NVCC_EXECUTABLE CUDA_INCLUDE_DIRS CUDA_CUDART_LIBRARY)

這是因為dlib發現不了上面四個目錄,需要安裝或者配置目錄。

1.確保nvcc已經安裝,沒有安裝的話可以用下面的命令:

apt-get install nvidia-cuda-toolkit
如果nvcc成功,說明nvidia-cuda-toolkit安裝成功。

2.cmake .. -DDLIB_USE_CUDA=1 -DUSE_AVX_INSTRUCTIONS=1 -DCMAKE_PREFIX_PATH=/usr/local/cuda編譯出錯,提示找不到CUDA_cublas_LIBRARY,CUDA_curand_LIBRARY和cusolver,

將路徑加上。

cmake .. -DDLIB_USE_CUDA=1 -DUSE_AVX_INSTRUCTIONS=1 -DCMAKE_PREFIX_PATH=/usr/local/cuda -DCUDA_cublas_LIBRARY=/usr/local/cuda/lib64/libcublas.so.9.0.176 -DCUDA_curand_LIBRARY=/usr/local/cuda/lib64/libcurand.so.9.0.176 -Dcusolver=/usr/local/cuda/lib64/libcusolver.so.9.0.176
  1. 繼續編譯,出現下面的問題:

解決:

網上說是gcc版本的問題,ubuntu16.04使用gcc5,需要升級到gcc6,但是16.04源裡面沒有gcc6,如果用原始碼編譯會遇到各種問題,所以使用ubuntu18.04。

測試

python
import dlib
dlib.DLIB_USE_CUDA
如果輸入為True,則說明gpu載入成功。

如果dlib的gpu環境實在編譯不成功,可以嘗試oenblas優化庫,

apt-get install libatlas-base-dev libopenblas-dev liblapack-dev

有了openblas,可以使人臉特徵提取時間縮短一倍以上,由原來的2.5秒變為1s左右。