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升級一下才能用。