windows、visual studio 2015上編譯Caffe2

一、軟件準備

  1. Windows 10 64位;
  2. Visual studio 2015 64位;
  3. CUDA v9.2;
  4. cuDNN v7.4.2 for CUDA 9.2;
  5. OpenCV 3.4.1;
  6. Python2.7;
  7. pip;
  8. 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再安裝一次。

三、增加/修改環境變量

  1. 根據FindLMDB.cmake中的find_path(LMDB_INCLUDE_DIR NAMES lmdb.h PATHS “ENVLMDBDIR/include")findlibrary(LMDBLIBRARIESNAMESlmdbPATHS"ENV{LMDB_DIR}/include")和find_library(LMDB_LIBRARIES NAMES lmdb PATHS "ENV{LMDB_DIR}/lib” ),設置include和lib文件夾所在目錄爲LMDB_DIR:
    LMDB_DIR C:\Tools\vcpkg\packages\lmdb_x64-windows
  2. 找到電腦中Release版本Opencv的OpenCVConfig.cmake所在目錄,設置爲OpenCV_DIR:
    OpenCV_DIR C:\Tools\vcpkg\buildtrees\opencv\x64-windows-rel
  3. 設置PYTHONPATH:
    PYTHONPATH CAFFE2_ROOT\build
  4. 增加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。
  5. 重新啓動電腦。

四、修改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文件夾。

九、拷貝

  1. 拷貝caffe2\src\build\caffe2\python\Release目錄下的caffe2_pybind11_state.pyd及該文件夾下的所有項目到C:\Python27\DLLs和C:\ProgramData\Anaconda2\DLLs;
  2. 拷貝caffe2/src/build目錄下的caffe和caffe2文件夾到C:\Python27\Lib和C:\ProgramData\Anaconda2\Lib。

十、運行MNIST.PY檢驗

  1. 下載Caffe2的tutorial:https://github.com/caffe2/tutorials;
  2. 打開tutorial下的MNIST.PY,點擊save_db函數找到其定義文件predictor_exporter.py和predictor_py_utils;
  3. 修改predictor_exporter.py:
    #ws = ws or workspace.C.Workspace.current
    ws = ws or workspace
  4. 修改predictor_py_utils.py:
    #shape = ws.blobs[blob].fetch().shape
    shape = ws.FetchBlob(blob).shape
  5. 執行MNIST.PY,如果流程完全正確則Caffe2編譯成功。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章