windows、visual studio 2015上編譯Caffe2
一、軟件準備
- Windows 10 64位;
- Visual studio 2015 64位;
- CUDA v9.2;
- cuDNN v7.4.2 for CUDA 9.2;
- OpenCV 3.4.1;
- Python2.7;
- pip;
- Conda(在屬性中獲取所有權限)。
二、CMD窗口安裝模塊
以管理員身份打開CMD窗口,執行如下命令:
pip install future ^
hypothesis ^
numpy ^
protobuf ^
six ^
flask ^
glog ^
graphviz ^
jupyter ^
matplotlib ^
pydot python-nvd3 ^
pyyaml ^
requests ^
scikit-image ^
scipy ^
setuptools ^
tornado ^
lmdb
編譯過程中如果出現缺少某個模塊,例如提示缺少lmdb,則用conda install lmdb再安裝一次。
三、增加/修改環境變量
- 根據FindLMDB.cmake中的find_path(LMDB_INCLUDE_DIR NAMES lmdb.h PATHS “ENV{LMDB_DIR}/lib” ),設置include和lib文件夾所在目錄爲LMDB_DIR:
LMDB_DIR C:\Tools\vcpkg\packages\lmdb_x64-windows - 找到電腦中Release版本Opencv的OpenCVConfig.cmake所在目錄,設置爲OpenCV_DIR:
OpenCV_DIR C:\Tools\vcpkg\buildtrees\opencv\x64-windows-rel - 設置PYTHONPATH:
PYTHONPATH CAFFE2_ROOT\build - 增加PATH:
C:\Python27;
C:\Python27\bin;
C:\Python27\DLLs;
C:\Python27\Scripts;
C:\ProgramData\Anaconda2;
C:\ProgramData\Anaconda2\bin;
C:\ProgramData\Anaconda2\DLLs ;
C:\ProgramData\Anaconda2\Scripts;
C:\Tools\vcpkg\buildtrees\opencv\x64-windows-rel\bin。 - 重新啓動電腦。
四、修改build_host_protoc.bat
設置編譯Release版本,設置VS2015爲編譯生成器。
set CMAKE_BUILD_TYPE=Release
set CMAKE_GENERATOR="Visual Studio 14 2015 Win64"
五、修改build_windows.bat
設置編譯Release版本,設置VS2015爲編譯生成器,選中CUDA、LMDB、OPENCV和PYTHON作爲一同編譯項目。
set USE_CUDA=ON
set CMAKE_BUILD_TYPE=Release
set CMAKE_GENERATOR="Visual Studio 14 2015 Win64"
-DUSE_CUDA=%USE_CUDA% ^
-DCUDA_GENERATION=Pascal ^
-DUSE_NNPACK=OFF ^
-DUSE_GLOG=OFF ^
-DUSE_GFLAGS=OFF ^
-DUSE_LMDB=ON ^
-DUSE_LEVELDB=OFF ^
-DUSE_ROCKSDB=OFF ^
-DUSE_OPENCV=ON ^
-DBUILD_SHARED_LIBS=OFF ^
-DBUILD_PYTHON=ON
六、修改Cuda.cmake
增加對CUDA9.2的編譯支持。
# set(Caffe2_known_gpu_archs9 "30 35 50 52 60 61 70 71") # for CUDA 9.x, not supported yet
set(Caffe2_known_gpu_archs9 "30 35 50 52 60 61") # for CUDA 9.x, not supported yet
if (${CUDA_VERSION} LESS 7.0)
message(FATAL_ERROR "Caffe2 requires CUDA 7.0 or later version")
elseif (${CUDA_VERSION} LESS 8.0) # CUDA 7.x
set(Caffe2_known_gpu_archs ${Caffe2_known_gpu_archs7})
list(APPEND CUDA_NVCC_FLAGS "-D_MWAITXINTRIN_H_INCLUDED")
list(APPEND CUDA_NVCC_FLAGS "-D__STRICT_ANSI__")
elseif (${CUDA_VERSION} LESS 9.0) # CUDA 8.x
set(Caffe2_known_gpu_archs ${Caffe2_known_gpu_archs8})
list(APPEND CUDA_NVCC_FLAGS "-D_MWAITXINTRIN_H_INCLUDED")
list(APPEND CUDA_NVCC_FLAGS "-D__STRICT_ANSI__")
# CUDA 8 may complain that sm_20 is no longer supported. Suppress the
# warning for now.
list(APPEND CUDA_NVCC_FLAGS "-Wno-deprecated-gpu-targets")
elseif (${CUDA_VERSION} EQUAL 9.0) # CUDA 9.0
set(Caffe2_known_gpu_archs ${Caffe2_known_gpu_archs9})
list(APPEND CUDA_NVCC_FLAGS "-D_MWAITXINTRIN_H_INCLUDED")
list(APPEND CUDA_NVCC_FLAGS "-D__STRICT_ANSI__")
elseif (${CUDA_VERSION} GREATER 9.0) # CUDA 9.x
set(Caffe2_known_gpu_archs ${Caffe2_known_gpu_archs9})
list(APPEND CUDA_NVCC_FLAGS "-D_MWAITXINTRIN_H_INCLUDED")
list(APPEND CUDA_NVCC_FLAGS "-D__STRICT_ANSI__")
endif()
七、CMD窗口編譯
以管理員身份打開cmd窗口,切換到caffe2/src/scripts目錄,先執行build_host_protoc.bat,再執行build_windows.bat(需一個小時)。
八、VS編譯
CMD窗口編譯成功後,以管理員身份打開visual studio 2015,打開caffe2/src/build/Caffe2.sln,切換到Release模式,先rebuild ALL(需一個小時),再rebuild Install(需一個小時),此時在C:\Program Files中可以看到Caffe2文件夾。
九、拷貝
- 拷貝caffe2\src\build\caffe2\python\Release目錄下的caffe2_pybind11_state.pyd及該文件夾下的所有項目到C:\Python27\DLLs和C:\ProgramData\Anaconda2\DLLs;
- 拷貝caffe2/src/build目錄下的caffe和caffe2文件夾到C:\Python27\Lib和C:\ProgramData\Anaconda2\Lib。
十、運行MNIST.PY檢驗
- 下載Caffe2的tutorial:https://github.com/caffe2/tutorials;
- 打開tutorial下的MNIST.PY,點擊save_db函數找到其定義文件predictor_exporter.py和predictor_py_utils;
- 修改predictor_exporter.py:
#ws = ws or workspace.C.Workspace.current
ws = ws or workspace - 修改predictor_py_utils.py:
#shape = ws.blobs[blob].fetch().shape
shape = ws.FetchBlob(blob).shape - 執行MNIST.PY,如果流程完全正確則Caffe2編譯成功。