Caffe+VS2015+CUDA10+RTX208顯卡

由於工程原因,需要使用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 and CMAKE_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

https://developer.nvidia.com/cuda-90-download-archive?target_os=Windows&target_arch=x86_64&target_version=10&target_type=exelocal

重新make caffe

解決啦~~~~~

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章