win10 + CUDA 9.0 + cuDNN 7.0 + tensorflow源碼編譯安裝

1、前言

在配置了個人深度學習主機後,就有開始著手安裝一些必備的軟體環境了,我是使用anaconda5.0.0 python3.6版本(下載地址Downloads)來管理我的win10 python環境的,新建了基於python3.5的tensorflow-gpu-py35 conda環境,如果使用conda安裝tensorflow則會默認安裝tensorflow-gpu 1.1.0並會主動安裝cudatoolkit8.0 + cudnn6.0,但是就算配置好cuda環境還是無法使用,如果是使用python pip命令安裝則會默認安裝最新版本的tensorflow-gpu 1.3.0版本,而cuda需要自己到NVIDIA官網上下載並安裝配置好環境變數(吐槽一下:老黃下載cudnn的官網鏈接掛了,一直無法下載cudnn,據說已經有一個月了!!!)。其實不管是安裝tensorflow-gpu哪個版本,還是配置CUDA8.0 + cuDNN6.0/cuDNN5.1或者CUDA9.0 + cuDNN7.0,我的環境import tensorflow時都會報如下錯誤:

>>> import tensorflow as tfTraceback (most recent call last): File "D:ProgramDataAnaconda3envs ensorflow-gpu-py36libsite-packages ensorflowpythonpywrap_tensorflow_internal.py", line 18, in swig_import_helper return importlib.import_module(mname) File "D:ProgramDataAnaconda3envs ensorflow-gpu-py36libimportlib\__init__.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 978, in _gcd_import File "<frozen importlib._bootstrap>", line 961, in _find_and_load File "<frozen importlib._bootstrap>", line 950, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 648, in _load_unlocked File "<frozen importlib._bootstrap>", line 560, in module_from_spec File "<frozen importlib._bootstrap_external>", line 922, in create_module File "<frozen importlib._bootstrap>", line 205, in _call_with_frames_removedImportError: DLL load failed: 找不到指定的模塊。During handling of the above exception, another exception occurred:Traceback (most recent call last): File "D:ProgramDataAnaconda3envs ensorflow-gpu-py36libsite-packages ensorflowpythonpywrap_tensorflow.py", line 41, in <module> from tensorflow.python.pywrap_tensorflow_internal import * File "D:ProgramDataAnaconda3envs ensorflow-gpu-py36libsite-packages ensorflowpythonpywrap_tensorflow_internal.py", line 21, in <module> _pywrap_tensorflow_internal = swig_import_helper() File "D:ProgramDataAnaconda3envs ensorflow-gpu-py36libsite-packages ensorflowpythonpywrap_tensorflow_internal.py", line 20, in swig_import_helper return importlib.import_module(_pywrap_tensorflow_internal) File "D:ProgramDataAnaconda3envs ensorflow-gpu-py36libimportlib\__init__.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level)ModuleNotFoundError: No module named _pywrap_tensorflow_internalDuring handling of the above exception, another exception occurred:Traceback (most recent call last): File "<stdin>", line 1, in <module> File "D:ProgramDataAnaconda3envs ensorflow-gpu-py36libsite-packages ensorflow\__init__.py", line 24, in <module> from tensorflow.python import * File "D:ProgramDataAnaconda3envs ensorflow-gpu-py36libsite-packages ensorflowpython\__init__.py", line 49, in <module> from tensorflow.python import pywrap_tensorflow File "D:ProgramDataAnaconda3envs ensorflow-gpu-py36libsite-packages ensorflowpythonpywrap_tensorflow.py", line 52, in <module> raise ImportError(msg)ImportError: Traceback (most recent call last): File "D:ProgramDataAnaconda3envs ensorflow-gpu-py36libsite-packages ensorflowpythonpywrap_tensorflow_internal.py", line 18, in swig_import_helper return importlib.import_module(mname) File "D:ProgramDataAnaconda3envs ensorflow-gpu-py36libimportlib\__init__.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 978, in _gcd_import File "<frozen importlib._bootstrap>", line 961, in _find_and_load File "<frozen importlib._bootstrap>", line 950, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 648, in _load_unlocked File "<frozen importlib._bootstrap>", line 560, in module_from_spec File "<frozen importlib._bootstrap_external>", line 922, in create_module File "<frozen importlib._bootstrap>", line 205, in _call_with_frames_removedImportError: DLL load failed: 找不到指定的模塊。During handling of the above exception, another exception occurred:Traceback (most recent call last): File "D:ProgramDataAnaconda3envs ensorflow-gpu-py36libsite-packages ensorflowpythonpywrap_tensorflow.py", line 41, in <module> from tensorflow.python.pywrap_tensorflow_internal import * File "D:ProgramDataAnaconda3envs ensorflow-gpu-py36libsite-packages ensorflowpythonpywrap_tensorflow_internal.py", line 21, in <module> _pywrap_tensorflow_internal = swig_import_helper() File "D:ProgramDataAnaconda3envs ensorflow-gpu-py36libsite-packages ensorflowpythonpywrap_tensorflow_internal.py", line 20, in swig_import_helper return importlib.import_module(_pywrap_tensorflow_internal) File "D:ProgramDataAnaconda3envs ensorflow-gpu-py36libimportlib\__init__.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level)ModuleNotFoundError: No module named _pywrap_tensorflow_internalFailed to load the native TensorFlow runtime.See https://www.tensorflow.org/install/install_sources#common_installation_problemsfor some common reasons and solutions. Include the entire stack traceabove this error message when asking for help.

關鍵報錯:ModuleNotFoundError: No module named _pywrap_tensorflow_internal

這種報錯,網上也有很多解答,無非就是CUDA和cuDNN版本不對,需要配置成正確的版本,如需要對應CUDA版本配置CUDA 8.0 + cuDNN 6.0(cuDNN 5.1)以及他們的環境等等,但是好尷尬,我這邊依然報錯。試想一下,剛剛買了一塊強大的gtx 1080ti顯卡,而我卻不能用它來做訓練提高效率,那該有多難受多浪費啊,這是我不能接受的!而我安裝tensorflow cpu版本試運行是沒有任何問題的,說明就是CUDA環境沒有配好了,這就讓我萌生了源碼編譯tensorflow的念頭!

官網上介紹在window下編譯tensorflow源碼的文章較少,大部分都是介紹在linux下bazel如何編譯源碼的,但是在github tensorflow主目錄tensorflow ensorflowcontribcmake下有詳細的網頁介紹Windows環境編譯方法,其實這個介紹有寫到源代碼目錄C:TF ensorflow ensorflowcontribcmake下的README.md,通讀整篇文檔,得到如下重要信息:

1-1)官網介紹cmake window build tensorflow的網頁(被牆了無法打開)tensorflow.org/install/

1-2)當前已知限制

1-3)官方要求準備的軟體

1-4)window編譯僅支持python3.5

1-5)window下cmake編譯tensorflow步驟

官方文檔所給的步驟已經很詳細了,因此,我主要是參考該文檔來執行編譯操作。但是,你會覺得這真的有那麼簡單的嗎?事實上,並非如此簡單,更何況我所使用的軟體環境都是比較新的,與官方要求有些出路,主要是自己之前已有安裝類似軟體只是版本比較新不想再多折騰,且網上沒有任何win10 + cuda 9.0 + cudnn 7.0 + cmake + tensorflow-gpu的編譯介紹,我算是第一個吃螃蟹的人了吧,說句實話,這個過程真的很折騰,耗費的時間精力也很多,希望官方儘快給出解決方案出來吧!

那麼以下就是我個人的源碼編譯安裝tensorflow-gpu的過程啦,僅供參考!

2、環境準備

先說一下我的主機環境情況:

win10 64bit + gtx 1080ti + anaconda5.0.0(python3.6)

2-1)安裝git

我安裝的版本是Git-2.14.3-64-bit.exe,是比較新的,該工具主要是方便在window環境下從github下載tensorflow源碼。

鏈接: pan.baidu.com/s/1kVqtht 密碼: mr16

2-2)下載tensorflow源碼並切換分支

git clone --recursive https://github.com/tensorflow/tensorflow.git

注意要加上「--recursive」,否則一些submodule不會下載。

下載好後,默認分支是master屬於最新的,建議切換到r1.4版本,參照命令如下:

git checkout -b tensorflow-gpu-1.4.0 --track origin/r1.4

2-3)安裝python環境管理工具anaconda3-5.0.0

anaconda不是必需的,安裝它主要是為了方便管理window下的python環境,你也可以直接到python官網上下載安裝python3.5,但是tensorflow現在只支持64位的window python3環境!

鏈接: pan.baidu.com/s/1i4NWYW 密碼: dfwd

安裝完anaconda後,因其是基於python3.6的,所以我們打開anaconda prompt執行如下命令切換到python3.5:

conda create -n tensorflow-gpu-py35 python=3.5

這樣我們就擁有了python3.5的環境!然後按照官方說明下載安裝numpy,命令如下:

conda install numpy==1.12.0

建議指定numpy版本為1.12.0,因在python3.5下numpy兼容性不夠好!

2-4)安裝swig

SWIG是一個幫助使用C或者C++編寫的軟體能與其它各種高級編程語言進行嵌入鏈接的開發工具,這個是google官方要求必裝的工具!

我裝的是swigwin-3.0.12 鏈接: pan.baidu.com/s/1c1UmLL 密碼: vx6j

2-5)安裝CMake

我們來看看百度百科對cmake的介紹:

CMake是一個跨平台的安裝(編譯)工具,可以用簡單的語句來描述所有平台的安裝(編譯過程)。他能夠輸出各種各樣的makefile或者project文件,能測試編譯器所支持的C++特性,類似UNIX下的automake。只是 CMake 的組態檔取名為 CMakeLists.txt。Cmake 並不直接建構出最終的軟體,而是產生標準的建構檔(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然後再依一般的建構方式使用。這使得熟悉某個集成開發環境(IDE)的開發者可以用標準的方式建構他的軟體,這種可以使用各平台的原生建構系統的能力是 CMake 和 SCons 等其他類似系統的區別之處。

如果安裝了CMake 3.6.3,那麼就得安裝visual studio 2015了,否則CMake會找不到C/C++編譯器!

鏈接: pan.baidu.com/s/1qYUK54 密碼: weeb

2-6)安裝CUDA和cuDNN

版本當然是如題所述的CUDA 9.0 + cuDNN 7.0的,但是一定要配置好其路徑!

值得注意的是,我在win10下安裝CUDA8.0提示找不到合適的硬體,這也是不得不安裝更新的CUDA 9.0原因!

CUDA安裝時一路next就好,沒有什麼特別注意的地方,只要不報錯就好,這個網上教程也很多就不細說,唯一要特別說明的是cuDNN的配置!

cuDNN是專用於神經網路計算加速的,其實他就是一包庫文件,每一個CUDA版本都有特定與之匹配的cuDNN庫文件,如CUDA 9.0就匹配cudnn-9.0-windows10-x64-v7,通常我們到官網上下載並解壓縮後,直接將其文件替換到CUDA相應目錄下即可!如下,解壓縮cuDNN後在cuda目錄下得到三個文件夾,裡面分別有cudnn64_7.dll、cudnn.h及cudnn.lib。

我們將其拷貝合併到CUDA的安裝目錄C:Program FilesNVIDIA GPU Computing ToolkitCUDAv9.0下

之後配置CUDA的環境變數,按如下步驟依次打開:

此電腦-->滑鼠右鍵-->屬性-->高級系統設置-->環境變數(N)...

然後新建如下標黃環境變數:

CUDA下載: 鏈接: pan.baidu.com/s/1hsxkQE 密碼: r8cp

cuDNN下載: 鏈接: pan.baidu.com/s/1slG5s5 密碼: unv2

2-7)安裝visual studio 2015

我是下載Visual Studio professional 2015版,所安裝模塊如下:

visual studio 2015主要是在cmake配置好tensorflow後提供給cmake使用的主要編譯工具!

以下鏈接提供了visual studio 2015的各個版本,可結合自身需要安裝不同版本,並非一定按照官方要求安裝企業版的!

個人免費!Visual Studio 2015官方下載-Visual Studio,Visual Studio 2015,正式版,免費,下載-驅動之家

至此,相關的軟體都已安裝完了!

所有的軟體工具都放到了百度網盤上,上面所給的鏈接是單個軟體的,當然也可以統一下載:

鏈接: pan.baidu.com/s/1qXFBiB 密碼: ky1j

3、CMake配置

3-1) 修改CMakeLixts.txt更新CUDA和cuDNN版本

由於官方所提供的適配只是基於CUDA 8.0 + cuDNN 6.0的,而我們是要編譯基於CUDA 9.0 + cuDNN 7.0,因此分析tensorflow ensorflowcontribcmakeCMakeLists.txt後,我們需要修改相應的配置:

如下圖,將上圖標黃的依次改為下圖標黃式樣:

3-2)在cmake目錄下新建build文件夾

以管理員身份打開cmd命令行界面,然後按如下步驟操作:

3-2-1:cd C:TF ensorflow ensorflowcontribcmake3-2-2:mkdir build3-2-3:cd build

3-3)執行如下命令配置tensorflow

cmake .. -A x64 -DCMAKE_BUILD_TYPE=Release ^-DSWIG_EXECUTABLE="D:win10 softwareswigwin-3.0.12swig.exe" ^-DPYTHON_EXECUTABLE="D:ProgramDataAnaconda3envs ensorflow-gpu-py35python.exe" ^-DPYTHON_LIBRARIES="D:ProgramDataAnaconda3envs ensorflow-gpu-py35libspython35.lib" ^-Dtensorflow_ENABLE_GPU=ON ^-DCUDNN_HOME="C:Program FilesNVIDIA GPU Computing ToolkitCUDAv9.0"

如上命令就是指定swig、python和CUDA環境,可根據個人情況具體適配,其中「-Dtensorflow_ENABLE_GPU=ON ^」是打開GPU版本編譯的選項,必須要設為「ON」,否則還是用CPU版本的話真的沒有必要大費周章!當然你也可以直接修改C:TF ensorflow ensorflowcontribcmakeCMakeLists.txt,按照如下格式修改也可以:

此外,根據cmake下面的READRM.md說明,還有不少選項,你也可以自行選擇是否重新配置,但是也許會報出未知的錯誤!

當你看到類似如下的終端信息時,恭喜你配置cmake成功,至少我們已經邁開第一步了!

然而這麼配置後就OK了嗎!?其實不是的,還有更多的問題等著我們去分析解決!!!

具體相關問題的分析解決方法請看第五條!

4、visual studio編譯

從cmake的配置來看,我們並沒有使用CMake-GUI版本,而是在cmd.exe完成所有動作了!

cmake配置後會生成tensorflow.sln,這個就是visual studio項目模板,我們可以使用visual studio打開並生成tensorflow python安裝包,但是,直接命令行也是可以的,更加簡單快捷,只是要記得以管理員身份運行cmd,命令如下:

"C:Program Files (x86)MSBuild14.0Binamd64MSBuild.exe" /p:Configuration=Release tf_python_build_pip_package.vcxproj

至此,就開始真正編譯tensorflow源碼了!

5、編譯問題分析解決方法

問題一:cudnnSetRNNDescriptor參數不匹配

tensorflow ensorflowstream_executorcudacuda_dnn.cc(239): error C2660: 「cudnnSetRNNDescriptor」: 函數不接受 8 個參數 [C:UsersAdministratorDesktopTensorFlow ensorflow ensorflowcontribcmakeuild f_stream_executor.vcxproj]

這個問題是在tensorflow r1.3有發現,原以為官方有釋放tensorflow-gpu-1.3.0版本,應該更好適配,但事實上發現tensorflow-gpu-1.3.0使用的是cuDNN 7.0里的v5版本。

在cuda_dnn.c(239)看到如下:

而PERFTOOLS_GPUTOOLS_CUDNN_WRAP其實也是一個宏

它指向cuDNN 9.0下的cudnn.h頭文件里的cudnnSetRNNDescriptor

很明顯,原本的cudnnSetRNNDescriptor有10個形參,肯定不接受8個形參了!

好在cudnn.h有cudnnSetRNNDescriptor函數的不同版本

通過將cuda_dnn.cc里的cudnnSetRNNDescriptor修改為cudnnSetRNNDescriptor_v5可解決這個問題!

問題二:unable to access boringssl.googlesource.com

編譯tensorflow過程中會伴隨各種submodule的下載,有些thirty module是要訪問外網才可下載的,在r1.3和r1.4版本中都有遇到了這個問題,解決方法如下:

進入tensorflow ensorflowcontribcmakeexternal修改boringssl的url,將其URL由原來指向https://boringssl.googlesource.com/boringssl 改為 https://github.com/google/boringssl

但這並不足以完全解決問題,在第一次編譯因grpc不全錯誤退出後,我們需要再修改一些文件:

a、修改C:TF ensorflow ensorflowcontribcmakeuildgrpcsrcgrpc.gitmodules,將third_party/boringssl-with-bazel的url為https://github.com/google/boringsslb、修改C:TF ensorflow ensorflowcontribcmakeuildgrpcsrcgrpc.gitconfig中的third_party/boringssl-with-bazel的url為https://github.com/google/boringsslcc、為了防止重新下載grpc及其submudule,我們需要修改相應的cmake文件C:TF ensorflow ensorflowcontribcmakeuildgrpc mpgrpc-gitclone.cmake,主要是不讓他存在刪除或重新下載grpc的命令,我們將如下命令注釋掉:#execute_process(# COMMAND ${CMAKE_COMMAND} -E remove_directory "C:/TF/tensorflow/tensorflow/contrib/cmake/build/grpc/src/grpc"# RESULT_VARIABLE error_code# )#if(error_code)# message(FATAL_ERROR "Failed to remove directory: C:/TF/tensorflow/tensorflow/contrib/cmake/build/grpc/src/grpc")#endif()同時不讓它retry git clone 3 times,主要是在while(error_code AND number_of_tries LESS 3)之前set(error_code 0)

問題三:error C2001: 常量中有換行符

C:UsersAdministratorDesktopTensorFlow ensorflow ensorflowcontribcmakeuild
e2src
e2
e2 estingsearch_test.cc(247): error C2001: 常量中有換行符 [C:UsersAdministratorDesktopTensorFlow ensorflow ensorflowcontribcmakeuild
e2src
e2search_test.vcxproj] [C:UsersAdministratorDesktopTensorFlow ensorflow ensorflowcontribcmakeuild
e2.vcxproj] C:UsersAdministratorDesktopTensorFlow ensorflow ensorflowcontribcmakeuild
e2src
e2
e2 estingsearch_test.cc(248): error C2001: 常量中有換行符 [C:UsersAdministratorDesktopTensorFlow ensorflow ensorflowcontribcmakeuild
e2src
e2search_test.vcxproj] [C:UsersAdministratorDesktopTensorFlow ensorflow ensorflowcontribcmakeuild
e2.vcxproj] C:UsersAdministratorDesktopTensorFlow ensorflow ensorflowcontribcmakeuild
e2src
e2
e2 estingsearch_test.cc(249): error C2001: 常量中有換行符 [C:UsersAdministratorDesktopTensorFlow ensorflow ensorflowcontribcmakeuild
e2src
e2search_test.vcxproj] [C:UsersAdministratorDesktopTensorFlow ensorflow ensorflowcontribcmakeuild
e2.vcxproj] C:UsersAdministratorDesktopTensorFlow ensorflow ensorflowcontribcmakeuild
e2src
e2
e2 estingsearch_test.cc(250): error C2001: 常量中有換行符 [C:UsersAdministratorDesktopTensorFlow ensorflow ensorflowcontribcmakeuild
e2src
e2search_test.vcxproj] [C:UsersAdministratorDesktopTensorFlow ensorflow ensorflowcontribcmakeuild
e2.vcxproj] C:UsersAdministratorDesktopTensorFlow ensorflow ensorflowcontribcmakeuild
e2src
e2
e2 estingsearch_test.cc(252): error C2064: 項不會計算為接受 1 個參數的函數 [C:UsersAdministratorDesktopTensorFlow ensorflow ensorflowcontribcmakeuild
e2src
e2search_test.vcxproj] [C:UsersAdministratorDesktopTensorFlow ensorflow ensorflowcontribcmakeuild
e2.vcxproj]

這個問題主要出現在re2_test.ccsearch_test.cc文件內,根據錯誤提示進入到文件相應位置,看到如下代碼:

哈哈,看到了嗎,有表情包哦,這裡真的想放個大大的表情包(驚訝~),那麼這個問題是因為編碼引起的,所以可以用notepad++或其他軟體將re2_test.ccsearch_test.cc由utf-8轉換為ANSI編碼格式得解!

問題四:CUSTOMBUILD : error : RPC failed; curl 56 OpenSSL SSL_read: error:1408F119:SSL routines:SSL3_GET_RECORD:decryption failed or bad record mac, errno 0

CUSTOMBUILD : error : RPC failed; curl 56 OpenSSL SSL_read: error:1408F119:SSL routines:SSL3_GET_RECORD:decryption failed or bad record mac, errno 0 [C:UsersAdministratorDesktopTensorFlow ensorflow ensorflowcontribcmakeuildprotobuf.vcxproj]

這個問題看起來是無法下載protobuf庫,可是查看C:TF ensorflow ensorflowcontribcmakeexternalprotobuf.cmake並沒有發現有何問題,鏈接是github.com/mrry/protobu瀏覽器是可以打開的呢,所以可不用管,事實證明,再次編譯後就可以正常下載了哦,網路好的時候你也不一定看到這個問題!

問題五:fatal error C1083:無法打開包括文件:「zlib.h」:No such file or director

fatal error C1083:無法打開包括文件:「zlib.h」:No such file or director [C:TF est ensorflow ensorflowcontribcmakeuildgrpc.vcxproj]

我查找該錯誤的上下文,發現存在如下warning信息:

那麼打開C:TF ensorflow ensorflowcontribcmakeuildgrpcsrcgrpcCMakeList.txt分析發現:

文中說gRPC_ZLIB_PROVIDER要使用package方式,所以可以修改gRPC_ZLIB_PROVIDER為package方式,如下:

其他的不用動否則就又會報出其他錯誤了,畢竟編譯log里只警告gRPC_ZLIB_PROVIDER有問題,那麼查看警告輸出的120行上下文,又發現ZLIB_ROOT_DIR指向了一個不存在的目錄,所以這個問題的另外一種解法是修改ZLIB_ROOT_DIR文件指向,如下:

值得注意的是,我們不能直接修改C:TF ensorflow ensorflowcontribcmakeuildgrpcsrcgrpc下的CMakeList.txt,因為在編譯的時候他會被覆蓋掉的,那我分析到替換的文件是在C:TF ensorflow ensorflowcontribcmakepatchesgrpc,所以我們修改這個目錄的CMakeList.txt文件可得解!

問題六:error : downloading storage.googleapis.com/ failed

-- Retry after 5 seconds (attempt #2) ... --- LOG END --- -- downloading... src=https://storage.googleapis.com/libpng-public-archive/libpng-1.2.53.tar.gz dst=C:/TF/test/tensorflow/tensorflow/contrib/cmake/build/downloads/libpng-1.2.53.tar.gz timeout=noneCUSTOMBUILD : error : downloading https://storage.googleapis.com/libpng-public-archive/libpng-1.2.53.tar.gz failed [C:TF est ensorflow ensorflowcontribcmakeuildpng.vcxproj] status_code: 35 status_string: "SSL connect error" log: --- LOG BEGIN --- timeout on name lookup is not supported Trying 172.217.27.144...

這種錯誤,看log後面又成功下載了,所以不用管,不行的話多試幾遍看看!

問題7:致命的錯誤,無法解決

使用r1.4版本編譯出現的錯誤:

CUSTOMBUILD : Internal error : assertion failed at: "C:/dvs/p4/build/sw/rel/gpu_drv/r384/r384_00/drivers/compiler/edg/EDG_4.12/src/lookup.c", line 2652 [C:TF ensorflow ensorflowcontribcmakeuild f_core_gpu_kernels.vcxproj] 1 catastrophic error detected in the compilation of "C:/Users/ADMINI~1/AppData/Local/Temp/tmpxft_00000c94_00000000-8_adjust_contrast_op_gpu.cu.cpp4.ii". Compilation aborted. adjust_contrast_op_gpu.cu.ccCUSTOMBUILD : nvcc error : cudafe++ died with status 0xC0000409 [C:TF ensorflow ensorflowcontribcmakeuild f_core_gpu_kernels.vcxproj] CMake Error at tf_core_gpu_kernels_generated_adjust_contrast_op_gpu.cu.cc.obj.Release.cmake:267 (message): Error generating file C:/TF/tensorflow/tensorflow/contrib/cmake/build/CMakeFiles/tf_core_gpu_kernels.dir/__/__/core/kernels/Release/tf_core_gpu_kernels_generated_adjust_contrast_op_gpu.cu.cc.obj

這看起來是CUDA編譯器的問題,我這邊重裝CUDA也無解!

使用1.3版本編譯出現的問題:

c: f est ensorflow ensorflowcontribcmakeuildexternaleigen_archiveeigensrc/Core/util/Macros.h(416): fatal error C1017: 無效的整數常量表達式 [C:TF est ensorflow ensorflowcontribcmakeuild f_core_gpu_kernels.vcxproj] CMake Error at tf_core_gpu_kernels_generated_adjust_contrast_op_gpu.cu.cc.obj.Release.cmake:267 (message): Error generating file C:/TF/test/tensorflow/tensorflow/contrib/cmake/build/CMakeFiles/tf_core_gpu_kernels.dir/__/__/core/kernels/Release/tf_core_gpu_kernels_generated_adjust_contrast_op_gpu.cu.cc.obj已完成生成項目「C:TF est ensorflow ensorflowcontribcmakeuild f_core_gpu_kernels.vcxproj」(默認目標)的操作 - 失敗。

Macros.h分析沒看到任何錯誤,他是adjust_contrast_op_gpu.cu.cc造成的,但任憑我如何倒騰都無解!

以上兩個問題,已經超出了我可以解決的能力,我已經try again by again,but couldn』t find any solution,so mad!

所以,這是一個失敗的嘗試,不過,我將我編譯過程中遇到的問題做個分析總結,以便後來者不再采坑。另外,我已經將錯誤問題提交到github tensorflow上,可以關注一下:

fail to build tensorflow-gpu by CUDA 9.0 cuDNN 7 at win10 envs · Issue #14126 · tensorflow/tensorflow

6、安裝tensorflow-gpu並驗證

未完待續。。。

未完待續。。。

未完待續。。。


推薦閱讀:

對於一個可以窮舉的問題,比如五子棋,深度學習得到的模型和窮舉的演算法有啥異同?
能否使用區塊鏈的算力來解決深度學習訓練?
計算神經生物學和神經網路之間有啥區別?
深度學習和人工智慧之間是什麼樣的關係?
北京深鑒科技基於FPGA平台的DPU架構如何?

TAG:TensorFlow | CUDA | 深度学习DeepLearning |