1. 程式人生 > >caffe + mkl2018 + cuda9.1 + cudnn7.0.5 @ windows vs2015

caffe + mkl2018 + cuda9.1 + cudnn7.0.5 @ windows vs2015

新年編譯。

新年伊始發現mkl、cuda、cudnn都有了新版本,於是在筆記本上重新編譯了一下caffe。

首先還是官網下載最新版本的mkl、cuda、cudnn對應的windows平臺版本並安裝。

cudnn要解壓到cuda工具的安裝目錄方便使用(C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.1)。

caffe checkout到windows branch。

編譯環境我一直用的是vs2015,另外裝一個miniconda(python環境)。這次miniconda安裝也碰到個坑,安裝時一定要選“只有我”,不然conda install需要管理員許可權。另外最好選擇新增系統路徑,不然總是找不到conda.exe。

安裝好miniconda後,就可以用anaconda的conda install安裝ninja和cmake,用來編譯caffe。

編譯要在caffe資料夾的cmd下執行scripts\build_win.cmd,注意要修改這個檔案把需要的mkl以及cuda配好。

    :: Change the settings here to match your setup
    :: Change MSVC_VERSION to 12 to use VS 2013, 14 to use VS 2015
    if NOT DEFINED MSVC_VERSION set MSVC_VERSION=14
    :: Change to 1 to use Ninja generator (builds much faster)
    if NOT DEFINED WITH_NINJA set WITH_NINJA=1
    :: Change to 1 to build caffe without CUDA support
    if NOT DEFINED CPU_ONLY set CPU_ONLY=0
    :: Change to generate CUDA code for one of the following GPU architectures
    :: [Fermi  Kepler  Maxwell  Pascal  All]
    if NOT DEFINED CUDA_ARCH_NAME set CUDA_ARCH_NAME=Auto
    :: Change to Debug to build Debug. This is only relevant for the Ninja generator the Visual Studio generator will generate both Debug and Release configs
    if NOT DEFINED CMAKE_CONFIG set CMAKE_CONFIG=Release
    :: Set to 1 to use NCCL
    if NOT DEFINED USE_NCCL set USE_NCCL=1
    :: Change to 1 to build a caffe.dll
    if NOT DEFINED CMAKE_BUILD_SHARED_LIBS set CMAKE_BUILD_SHARED_LIBS=0
    :: Change to 3 if using python 3.5 (only 2.7 and 3.5 are supported)
    if NOT DEFINED PYTHON_VERSION set PYTHON_VERSION=2
    :: Change these options for your needs.
    if NOT DEFINED BUILD_PYTHON set BUILD_PYTHON=1
    if NOT DEFINED BUILD_PYTHON_LAYER set BUILD_PYTHON_LAYER=1
cmake -G"!CMAKE_GENERATOR!" ^
      -DBLAS:STRING=mkl ^
      -DMKL_INCLUDE_DIR:STRING="C:/Program Files (x86)/IntelSWTools/compilers_and_libraries_2018.1.156/windows/mkl/include" ^
      -DMKL_RT_LIBRARY:STRING="C:/Program Files (x86)/IntelSWTools/compilers_and_libraries_2018.1.156/windows/mkl/lib/intel64_win/mkl_rt.lib" ^
      -DCMAKE_BUILD_TYPE:STRING=%CMAKE_CONFIG% ^
      -DBUILD_SHARED_LIBS:BOOL=%CMAKE_BUILD_SHARED_LIBS% ^
      -DBUILD_python:BOOL=%BUILD_PYTHON% ^
      -DBUILD_python_layer:BOOL=%BUILD_PYTHON_LAYER% ^
      -DBUILD_matlab:BOOL=%BUILD_MATLAB% ^
      -DCPU_ONLY:BOOL=%CPU_ONLY% ^
      -DCOPY_PREREQUISITES:BOOL=1 ^
      -DINSTALL_PREREQUISITES:BOOL=1 ^
      -DUSE_NCCL:BOOL=!USE_NCCL! ^
      -DCUDA_ARCH_NAME:STRING=%CUDA_ARCH_NAME% ^
      -DCUDNN_ROOT:STRING="C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v9.1" ^
      "%~dp0\.."

注意上面的路徑是斜槓,如果打成反斜槓要打兩個(\\)不然會報錯。cudnn如果放在了cuda裡面,DCUDNN_ROOT可以不要。

由於我筆記本沒有顯示卡,gpu archs為ALL,發現CUDA9.1不支援comput_20,所以還要再Cuda.make裡把gpu archs裡面的20刪掉,變成:set(Caffe_known_gpu_archs "30 35 50 60 61")

如果以前用低版本的cuda編譯過,重新編譯前要把build資料夾刪除。

如果用老的mkl編譯過,老的mkl最好解除安裝,conda的mkl也要update到最新,以免執行時dll不一致。mkl_intel_thread.dll要手動拷到caffe.exe所在位置。

另外編譯時還遇到boost裡面檢查cuda版本的一個錯誤,把報錯地方刪掉就可以了。

如果使用NCCL,還要手動把NCCL升級一下才能用。