1. 程式人生 > >【Caffe2】Windows7下caffe2編譯配置全記錄(GPU版)

【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