【Caffe2】Windows7下caffe2編譯配置全記錄(GPU版)
caffe2跟老版caffe相比變化較大,更容易上手和使用。但caffe2的windows版配置比linux下要麻煩一些、且更容易出錯,把全過程記錄下,以供參考。
1. 準備工作
準備工作與Caffe和TF等框架類似,大部分人可以選擇性跳過~
(1)安裝CUDA、cuDNN
【CUDA下載地址】https://developer.nvidia.com/cuda-downloads
【cuDNN下載地址】https://developer.nvidia.com/cudnn
本文采用的是CUDA8.0+cuDNN7,把cuDNN的lib和include下檔案分別複製到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0下的對應資料夾。
(2)安裝Python
caffe2支援Python 2.7.6 - Python 2.7.14。
推薦Anaconda安裝,一步到位:
【Anaconda下載地址】https://www.anaconda.com/download/#windows
(3)安裝Visual Studio
本文采用的是Visual Studio 2015,VS2017也可以。
【Visual Studio 下載地址】https://www.visualstudio.com/zh-hans/downloads/
(4)安裝Cmake
【Cmake下載地址】https://cmake.org/download/
(5)安裝依賴庫
新增python路徑到環境變數中,如 C:\Python27 和 C:\Python27\scripts
安裝必需的python依賴:
pip install future ^
hypothesis ^
numpy ^
protobuf ^
six
非必選的python依賴,用於執行caffe2自帶的tutorials:
pip install flask ^
glog ^
graphviz ^
jupyter ^
matplotlib ^
pydot python-nvd3 ^
pyyaml ^
requests ^
scikit-image ^
scipy ^
setuptools ^
tornado
2. 編譯Caffe2
(1)獲取原始碼
https://github.com/caffe2/caffe2.git
(2)構建sln工程
- 首先執行 ‘\scripts\build_host_protoc.bat’,生成build_host_protoc資料夾和protobuf.sln工程,用於編譯;
- 然後執行 ‘\scripts\build_windows.bat’ ,對相關配置進行修改,這一步可能會報錯,可以採用Cmake GUI進行直觀的配置。由於Win版的部分可選軟體包(gflags、glog、leveldb)需要從原始碼構建,而大部分訓練和測試過程都在linux下完成,windows下主要進行模型部署,所以gflags、glog、leveldb並非必須,以下過程跳過這幾個庫。
- build_windows.bat中的最簡配置如下:
cmake .. ^
-G%CMAKE_GENERATOR% ^
-DBUILD_TEST=OFF ^
-DCMAKE_BUILD_TYPE=%CMAKE_BUILD_TYPE% ^
-DUSE_CUDA=ON ^
-DUSE_NNPACK=OFF ^
-DUSE_CUB=OFF ^
-DUSE_GLOG=OFF ^
-DUSE_GFLAGS=OFF ^
-DUSE_LMDB=OFF ^
-DUSE_LEVELDB=OFF ^
-DUSE_ROCKSDB=OFF ^
-DUSE_OPENCV=ON ^
-DBUILD_SHARED_LIBS=OFF ^
-DBUILD_PYTHON=OFF^
- Cmake GUI中配置好路徑,點選Configure + Generate。如果Cmake提示第三方庫NOT FOUND,可以在Cmake裡對各個第三方庫的DIR地址進行手動配置,大多位於caffe2\third_party資料夾中。
- 成功之後會生成build資料夾和Caffe2.sln工程。
(3)編譯protobuf庫
開啟protobuf.sln,編譯成功後生成以下檔案:
libprotobuf.lib
libprotobuf-lite.lib
libprotoc.lib
protoc.exe
js_embed.exe
(4)編譯Caffe2原始碼
開啟Caffe2.sln,進行編譯。
【常見問題】
在Caffe2.sln的編譯中,可能會遇到以下幾個問題:
- 錯誤C1083: cub/util_allocator.cuh : No such file or directory
解決方法:
在專案屬性->VC++目錄->包含目錄中新增:$你的地址\caffe2\third_party\cub 錯誤C4146: 一元負運算子應用於無符號型別,結果仍為無符號型別
解決方法:
專案屬性->配置屬性->C/C++->SDL檢查,改成否連結類錯誤:error LNK2001 …cuda…
一般是沒有找到cuda對應的lib,在專案屬性->連結器->輸入中新增:
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64\cuda.lib
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64\curand.lib
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64\cublas.lib
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64\cublas_device.lib
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64\cudnn.lib
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64\nvrtc.lib
3.測試Caffe2
開啟caffe2\build\bin\Release資料夾,已經生成了所有binary資料夾下對應的exe。
執行其中的樣例exe,可以看到此時的caffe2配置:
執行predictor_verifier.exe等樣例時,記得把glog和gflag相關程式碼註釋掉,再執行測試。
參考官方樣例編寫C++程式碼,分別對squeezenet[3],detectron[4]中模型進行單張影象測試:
squeezenet:0.015s/img 227x227
detectron-faster-C4:0.28s/img 1920x1080
速度比linux下慢不少,原因暫時未知。。
[1] https://caffe2.ai/docs/getting-started.html?platform=windows&configuration=compile
[2] https://github.com/caffe2/caffe2
[3] https://github.com/caffe2/models
[4] https://github.com/facebookresearch/Detectron