新年编译。
新年伊始发现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升级一下才能用。