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 tf
Traceback (most recent call last):
  File "D:\ProgramData\Anaconda3\envs\tensorflow-gpu-py36\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 18, in swig_import_helper
    return importlib.import_module(mname)
  File "D:\ProgramData\Anaconda3\envs\tensorflow-gpu-py36\lib\importlib\__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_removed
ImportError: DLL load failed: 找不到指定的模块。

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "D:\ProgramData\Anaconda3\envs\tensorflow-gpu-py36\lib\site-packages\tensorflow\python\pywrap_tensorflow.py", line 41, in <module>
    from tensorflow.python.pywrap_tensorflow_internal import *
  File "D:\ProgramData\Anaconda3\envs\tensorflow-gpu-py36\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 21, in <module>
    _pywrap_tensorflow_internal = swig_import_helper()
  File "D:\ProgramData\Anaconda3\envs\tensorflow-gpu-py36\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 20, in swig_import_helper
    return importlib.import_module('_pywrap_tensorflow_internal')
  File "D:\ProgramData\Anaconda3\envs\tensorflow-gpu-py36\lib\importlib\__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
ModuleNotFoundError: No module named '_pywrap_tensorflow_internal'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "D:\ProgramData\Anaconda3\envs\tensorflow-gpu-py36\lib\site-packages\tensorflow\__init__.py", line 24, in <module>
    from tensorflow.python import *
  File "D:\ProgramData\Anaconda3\envs\tensorflow-gpu-py36\lib\site-packages\tensorflow\python\__init__.py", line 49, in <module>
    from tensorflow.python import pywrap_tensorflow
  File "D:\ProgramData\Anaconda3\envs\tensorflow-gpu-py36\lib\site-packages\tensorflow\python\pywrap_tensorflow.py", line 52, in <module>
    raise ImportError(msg)
ImportError: Traceback (most recent call last):
  File "D:\ProgramData\Anaconda3\envs\tensorflow-gpu-py36\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 18, in swig_import_helper
    return importlib.import_module(mname)
  File "D:\ProgramData\Anaconda3\envs\tensorflow-gpu-py36\lib\importlib\__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_removed
ImportError: DLL load failed: 找不到指定的模块。

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "D:\ProgramData\Anaconda3\envs\tensorflow-gpu-py36\lib\site-packages\tensorflow\python\pywrap_tensorflow.py", line 41, in <module>
    from tensorflow.python.pywrap_tensorflow_internal import *
  File "D:\ProgramData\Anaconda3\envs\tensorflow-gpu-py36\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 21, in <module>
    _pywrap_tensorflow_internal = swig_import_helper()
  File "D:\ProgramData\Anaconda3\envs\tensorflow-gpu-py36\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 20, in swig_import_helper
    return importlib.import_module('_pywrap_tensorflow_internal')
  File "D:\ProgramData\Anaconda3\envs\tensorflow-gpu-py36\lib\importlib\__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
ModuleNotFoundError: No module named '_pywrap_tensorflow_internal'


Failed to load the native TensorFlow runtime.

See https://www.tensorflow.org/install/install_sources#common_installation_problems

for some common reasons and solutions.  Include the entire stack trace
above 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\tensorflow\contrib\cmake下有详细的网页介绍Windows环境编译方法,其实这个介绍有写到源代码目录C:\TF\tensorflow\tensorflow\contrib\cmake下的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下的automak
e。只是 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 Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0下

之后配置CUDA的环境变量,按如下步骤依次打开:

此电脑-->鼠标右键-->属性-->高级系统设置-->环境变量(N)...

然后新建如下标黄环境变量:

CUDA下载:链接: pan.baidu.com/s/1JpDnhd 提取码: edi2

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\tensorflow\contrib\cmake\CMakeLists.txt后,我们需要修改相应的配置:

如下图,将上图标黄的依次改为下图标黄式样:

3-2)在cmake目录下新建build文件夹

以管理员身份打开cmd命令行界面,然后按如下步骤操作:

3-2-1:cd C:\TF\tensorflow\tensorflow\contrib\cmake
3-2-2:mkdir build
3-2-3:cd build

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

cmake .. -A x64 -DCMAKE_BUILD_TYPE=Release ^
-DSWIG_EXECUTABLE="D:\win10 software\swigwin-3.0.12\swig.exe" ^
-DPYTHON_EXECUTABLE="D:\ProgramData\Anaconda3\envs\tensorflow-gpu-py35\python.exe" ^
-DPYTHON_LIBRARIES="D:\ProgramData\Anaconda3\envs\tensorflow-gpu-py35\libs\python35.lib" ^
-Dtensorflow_ENABLE_GPU=ON ^
-DCUDNN_HOME="C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0" 

如上命令就是指定swig、python和CUDA环境,可根据个人情况具体适配,其中“-Dtensorflow_ENABLE_GPU=ON ^”是打开GPU版本编译的选项,必须要设为“ON”,否则还是用CPU版本的话真的没有必要大费周章!当然你也可以直接修改C:\TF\tensorflow\tensorflow\contrib\cmake\CMakeLists.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)\MSBuild\14.0\Bin\amd64\MSBuild.exe" /p:Configuration=Release tf_python_build_pip_package.vcxproj

至此,就开始真正编译tensorflow源码了!

5、编译问题分析解决方法

问题一:cudnnSetRNNDescriptor参数不匹配

tensorflow\tensorflow\stream_executor\cuda\cuda_dnn.cc(239): error C2660: “cudnnSetRNNDescriptor”: 函数不接受 8 个参数 [C:\Users\Administrator\Desktop\TensorFlow\tensorflow\tensorflow\contrib\cmake\build\tf_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\tensorflow\contrib\cmake\external修改boringssl的url,将其URL由原来指向https://boringssl.googlesource.com/boringssl 改为 https://github.com/google/boringssl

但这并不足以完全解决问题,在第一次编译因grpc不全错误退出后,我们需要再修改一些文件:

a、修改C:\TF\tensorflow\tensorflow\contrib\cmake\build\grpc\src\grpc\.gitmodules,将third_party/boringssl-with-bazel的url为https://github.com/google/boringssl
b、修改C:\TF\tensorflow\tensorflow\contrib\cmake\build\grpc\src\grpc\.git\config中的third_party/boringssl-with-bazel的url为https://github.com/google/boringsslc
c、为了防止重新下载grpc及其submudule,我们需要修改相应的cmake文件C:\TF\tensorflow\tensorflow\contrib\cmake\build\grpc\tmp\grpc-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:\Users\Administrator\Desktop\TensorFlow\tensorflow\tensorflow\contrib\cmake\build\re2\src\re2\re2\testing\search_test.cc(247
): error C2001: 常量中有换行符 [C:\Users\Administrator\Desktop\TensorFlow\tensorflow\tensorflow\contrib\cmake\build\re2\src\re2\search_test.vcxproj] 
[C:\Users\Administrator\Desktop\TensorFlow\tensorflow\tensorflow\contrib\cmake\build\re2.vcxproj]
  C:\Users\Administrator\Desktop\TensorFlow\tensorflow\tensorflow\contrib\cmake\build\re2\src\re2\re2\testing\search_test.cc(248
): error C2001: 常量中有换行符 [C:\Users\Administrator\Desktop\TensorFlow\tensorflow\tensorflow\contrib\cmake\build\re2\src\re2\s
earch_test.vcxproj] [C:\Users\Administrator\Desktop\TensorFlow\tensorflow\tensorflow\contrib\cmake\build\re2.vcxproj]
  C:\Users\Administrator\Desktop\TensorFlow\tensorflow\tensorflow\contrib\cmake\build\re2\src\re2\re2\testing\search_test.cc(249
): error C2001: 常量中有换行符 [C:\Users\Administrator\Desktop\TensorFlow\tensorflow\tensorflow\contrib\cmake\build\re2\src\re2\s
earch_test.vcxproj] [C:\Users\Administrator\Desktop\TensorFlow\tensorflow\tensorflow\contrib\cmake\build\re2.vcxproj]
  C:\Users\Administrator\Desktop\TensorFlow\tensorflow\tensorflow\contrib\cmake\build\re2\src\re2\re2\testing\search_test.cc(250
): error C2001: 常量中有换行符 [C:\Users\Administrator\Desktop\TensorFlow\tensorflow\tensorflow\contrib\cmake\build\re2\src\re2\s
earch_test.vcxproj] [C:\Users\Administrator\Desktop\TensorFlow\tensorflow\tensorflow\contrib\cmake\build\re2.vcxproj]
  C:\Users\Administrator\Desktop\TensorFlow\tensorflow\tensorflow\contrib\cmake\build\re2\src\re2\re2\testing\search_test.cc(252
): error C2064: 项不会计算为接受 1 个参数的函数 [C:\Users\Administrator\Desktop\TensorFlow\tensorflow\tensorflow\contrib\cmake\bu
ild\re2\src\re2\search_test.vcxproj] [C:\Users\Administrator\Desktop\TensorFlow\tensorflow\tensorflow\contrib\cmake\build\re2.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:\Users\Administrator\Desktop\TensorFlow\tensorflow\tensorflow\contrib\cmake\build\protobuf.vcxproj]

这个问题看起来是无法下载protobuf库,可是查看C:\TF\tensorflow\tensorflow\contrib\cmake\external\protobuf.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\test\tensorflow\tensorflow\contrib\cmake\build\grpc.vcxproj]

我查找该错误的上下文,发现存在如下warning信息:

那么打开C:\TF\tensorflow\tensorflow\contrib\cmake\build\grpc\src\grpc\CMakeList.txt分析发现:

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

其他的不用动否则就又会报出其他错误了,毕竟编译log里只警告gRPC_ZLIB_PROVIDER有问题,那么查看警告输出的120行上下文,又发现ZLIB_ROOT_DIR指向了一个不存在的目录,所以这个问题的另外一种解法是修改ZLIB_ROOT_DIR文件指向,如下:

值得注意的是,我们不能直接修改C:\TF\tensorflow\tensorflow\contrib\cmake\build\grpc\src\grpc下的CMakeList.txt,因为在编译的时候他会被覆盖掉的,那我分析到替换的文件是在C:\TF\tensorflow\tensorflow\contrib\cmake\patches\grpc,所以我们修改这个目录的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='none'
CUSTOMBUILD : error : downloading 'https://storage.googleapis.com/libpng-public-archive/libpng-1.2.53.tar.gz' failed [C:\TF\test\
tensorflow\tensorflow\contrib\cmake\build\png.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\tensorflow\tensorflow\contrib\cmake\build\tf_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.cc

CUSTOMBUILD : nvcc error : 'cudafe++' died with status 0xC0000409 [C:\TF\tensorflow\tensorflow\contrib\cmake\build\tf_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:\tf\test\tensorflow\tensorflow\contrib\cmake\build\external\eigen_archive\eigen\src/Core/util/Macros.h(416): fatal error C1017:
 无效的整数常量表达式 [C:\TF\test\tensorflow\tensorflow\contrib\cmake\build\tf_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\test\tensorflow\tensorflow\contrib\cmake\build\tf_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并验证

未完待续。。。

未完待续。。。

未完待续。。。

编辑于 2019-01-10