由於工程原因,需要使用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
解決啦~~~~~