由于工程原因,需要使用VS2015,可是微软版本的Caffe使用VS2015无法编译。
在这里写一个基于BVLC的官方版本的Caffe编译过程
caffe:https://github.com/BVLC/caffe/tree/windows
cuda9:自行下载并安装(开始用的是cuda10,编译过了运行总是出问题,最后换成了cuda9,现在想想可能cuda10也可以,但是懒得换回去了)
cmake:自行下载安装
vs2015:自行下载并安装
- Technically only the VS C/C++ compiler is required (cl.exe)
一、按照caffe官方说明安装即可
说几个注意点:
1. 如果报错no CMAKE_CXX_COMPILER was found 或 no
CMAKE_C_COMPILER was found,需要设置一下cmake的环境变量
- Pass CMake the path (Set
CMAKE_C_COMPILER=your/path/to/cl.exe
andCMAKE_CXX_COMPILER=your/path/to/cl.exe
)
The path to cl.exe is usually something like "C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/your_processor_architecture/cl.exe".
2. 改一下.\caffe-windows\scripts\build_win.bat中的几个设置
需要改的是:
74行:你的vs版本,14对应vs2015
76行:CPU_ONLY=0,表示使用GPU
79行:cuda_arch_name,默认是AUTO,但是我的电脑不能自己识别,在这里总是报错: nvcc fatal : Unsupported gpu architecture 'compute_481'。因此我改成了Kepler,注意的是cuda9以上的版本不支持Fermi那一栏了。
这个kelper是怎么来的,请参考caffe-windows\cuda\cuda.cmake文件里的
if(${CUDA_ARCH_NAME} STREQUAL "Fermi")
set(__cuda_arch_bin "20 21(20)")
elseif(${CUDA_ARCH_NAME} STREQUAL "Kepler")
set(__cuda_arch_bin "30 35")
elseif(${CUDA_ARCH_NAME} STREQUAL "Maxwell")
set(__cuda_arch_bin "50")
elseif(${CUDA_ARCH_NAME} STREQUAL "Pascal")
set(__cuda_arch_bin "60 61")
elseif(${CUDA_ARCH_NAME} STREQUAL "All")
set(__cuda_arch_bin ${Caffe_known_gpu_archs})
elseif(${CUDA_ARCH_NAME} STREQUAL "Auto")
caffe_detect_installed_gpus(__cuda_arch_bin)
else() # (${CUDA_ARCH_NAME} STREQUAL "Manual")
set(__cuda_arch_bin ${CUDA_ARCH_BIN})
endif()
注:如果用AUTO make没问题不需要改这些参数。
87行,你的python版本,注意下面还有python的路径要修改,需要跟这个版本匹配
其他按自己需要
OK~
二、在build_win的上一级目录下运行这个bat文件
运行的时候会自动下载第三方依赖库,默认存在C:/user/yourusername/.caffe中
遇到的一个问题是fatal error C1017:invalid integer constant expression
这是在编译.cu层的时候才会出现的错误,说明问题还是出在cuda相关的地方。
看红字部分,说问题出在nvcc.h文件中22行,打开这个文件把第22行开始注释掉,保存。
因为22行是判断cuda版本的代码,不影响,可以注释掉。
//#if !defined(__CUDACC_VER__) || (__CUDACC_VER__ < 70500)
//# define BOOST_NO_CXX11_VARIADIC_TEMPLATES
//#endif
三、再运行build_win.bat成功, .\caffe-windows\build\tools\Release路径下的exe可以直接用
编译成功不代表成功……在使用caffe.exe训练的时候,出现错误
error == cudaSuccess (209 vs. 0) no kernel image is available for execution on the device
这个错误是由于在编译的时候caffe的cuda计算能力设置不正确导致的,跟上面build_win.bat中的79行的cuda_arch_name的设置有关系。
cuda9 最高支持到sm_70,最低sm_30
cuda10可以支持sm_75,最低sm_30
针对你的显卡和cuda版本,设置合适的cuda_arch_name
这里我用cuda9,故需要在cuda.cmake中增加一行gpu_arch 70的描述
第一处:第7行
第二处:63行
第三处:101行
四、上一个错误解决,出现新的报错Check failed: status == CUBLAS_STATUS_SUCCESS (13 vs. 0) CUBLAS_STATUS_EXECUTION_FAILED
去官网下载一个补丁2安装:download patch 2
重新make caffe
解决啦~~~~~