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倍
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
-
繼續編譯,出現下面的問題:
解決:
網上說是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左右。