发表文章

[最新] TensorFlowCXX编译与配置

alvinlyb 1月前 9

版权声明:本文为博主原创文章,未经博主允许不得转载。 http://blog.csdn.net/alvinlyb/article/details/82215894

TensorFlowCXX编译与配置

一、所需软件工具

1.CMake version 3.5以上

2.git (http://git-scm.com)

3.swig (http://www.swig.org/download.html)解压即可

4.Visual Studio 2015

5.UCDA9.0 (http://developer.nvidia.com/cuda-90-download-archive)

注意:在2018.08.24是编译的tensorFlow版本时使用ucda9.0

6.CUDNN一定要对应上面的UCDA9.0版(http://developer.nvidia.com/cudnn)下载后解压合并到安装的UCDA/v9.0目录下。

7.Python 3.5 64-bit (选择添加安装lib文件)

8.NumPy 1.11.0 以上

注意事项:CMake 与 git安装时需要将其加入到环境变量中,否则后续编译过程中会出现找不到相关程序的错误

二、以上所需工具全部安装全后,在guit拉下TensorFlow的源码:

http://github.com/tensorflow/tensorflow.git

git clone http://github.com/tensorflow/tensorflow
cd tensorflow
#创建这个build目录
mkdir build

三、注意在第一步时一定要把所有配置好才能进行下一步操作

1、首先启用vs2015 x64编译否则很容易堆空间不足的错误提示。

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64\vcvarsall.bat

2、cuda和cudnn的路径设置,一定要设置好否则不能通过gpu的编译。在系统设置PATH中添加如下。其实只添加到v9.0这个根目录就可以。为了保险起见多添加了两个。

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\lib

3、如果使用MKL支持的构建需要把MKL也加入到PATH当中,路径根据安装位置修改

D:\Tools\IntelSWTools\compilers_and_libraries\windows\redist\intel64\mkl
D:\Tools\IntelSWTools\compilers_and_libraries\windows\redist\intel64\compiler
D:\Tools\IntelSWTools\compilers_and_libraries\windows\redist\intel64\tbb\vc_mt

4、把cmake也配置到PATH路径中。可在cmd运行如下命令:

set PATH="%PATH%;C:\Program Files\CMake\bin\cmake.exe"

5、cmake参数命令

cmake .. -A x64 -DCMAKE_BUILD_TYPE=Release ^
-DSWIG_EXECUTABLE=C:/tools/swigwin-3.0.10/swig.exe ^
-DPYTHON_EXECUTABLE=C:/Users/%USERNAME%/AppData/Local/Continuum/Anaconda3/python.exe ^
-DPYTHON_LIBRARIES=C:/Users/%USERNAME%/AppData/Local/Continuum/Anaconda3/libs/python35.lib ^
-Dtensorflow_ENABLE_GPU=ON ^
-DCUDA_TOOLKIT_ROOT_DIR="C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0" ^
-DCUDNN_HOME="C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0" ^
-Dtensorflow_WIN_CPU_SIMD_OPTIONS=/arch:AVX ^
-Dtensorflow_BUILD_ALL_KERNELS=ON ^
-Dtensorflow_BUILD_CC_EXAMPLE=ON ^
-Dtensorflow_ENABLE_GRPC_SUPPORT=OFF ^
-Dtensorflow_ENABLE_SSL_SUPPORT=OFF ^
-Dtensorflow_BUILD_CC_TESTS=OFF ^
-Dtensorflow_BUILD_SHARED_LIB=ON ^
-Dtensorflow_BUILD_PYTHON_BINDINGS=OFF ^
-Dtensorflow_BUILD_PYTHON_TESTS=OFF ^
-Dtensorflow_BUILD_MORE_PYTHON_TESTS=OFF ^
-Dtensorflow_ENABLE_MKL_SUPPORT=OFF ^
-Dtensorflow_ENABLE_MKLDNN_SUPPORT=OFF ^
-G"Visual Studio 14 2015 Win64"

四、使用vs2015编译

1、使用MSBuild工具编译:

MSBuild /p:Configuration=Release ALL_BUILD.vcxproj
/m:1    //设置生成并运行的最大并行数为1,为解决堆栈不足问题
/p:CL_MPCount=1
/p:Configuration=Release    //编译选项为Release或Debug
/p:Platform=x64     //架构为x64
/p:PreferredToolArchitecture=x64 tf_tutorials_example_trainer.vcxproj
/filelogger

2、使用visual studio的ide编译

3、编译所遇问题与解决

  1. fatal error C1060: 编译器的堆空间不足,一般提示是在tf_core_kernels项目中

在出现堆空间不足时三种修改:

1.设置生成并运行的最大并行数为1,进行单进程编译。

2.在vs ide中单个单个进行编译:tf_core_kernels,tensorflow_static,tensorflow

3.检查加大windows页面文件是否固定了大小,让系统分配。

  1. fatal error C1083: 无法打开包括文件: “grpcpp/grpcpp.h”,一般在tf_c.vcxproj项目中

    下载grpcpp文件库copy到提示的相应目录中

  2. fatal error C1083: 无法打开包括文件: “grpc/grpc.h”

    在出现的tf_c.vcxproj项目中包含“grpc/grpc.h”所在路径。

  3. 提示

    Core/arch/CUDA/Half.h(212): error : more than one instance of overloaded function "__hadd" matches the argument list:
               function "__hadd(int, int)"
               function "__hadd(__half, __half)"
               argument types are: (const Eigen::half, const Eigen::half)

此问题需要修改Half.h文件212行如下,-为删除+为替换上。

 EIGEN_STRONG_INLINE __device__ half operator + (const half& a, const half& b) {
-  return __hadd(a, b);
+  return __hadd(::__half(a), ::__half(b));
 }
 EIGEN_STRONG_INLINE __device__ half operator * (const half& a, const half& b) {
   return __hmul(a, b);
@@ -218,9 +218,7 @@
   return __hsub(a, b);
 }
 EIGEN_STRONG_INLINE __device__ half operator / (const half& a, const half& b) {
-  float num = __half2float(a);
-  float denom = __half2float(b);
-  return __float2half(num / denom);
+  return __hdiv(a, b);
 }
 EIGEN_STRONG_INLINE __device__ half operator - (const half& a) {
   return __hneg(a);
  1. 出现”cuda/include/cuda_fp16.h”找不到

    修改cuda_kernel_helper.h的第24行头文件中对应的包含位置。并在vs中设置添加包含cuda_fp16.h所有的路径为ucda安装路径中的include目录下。

  2. 在重新编译tensorflow这个项目时出现的*.obj不能链接。

    重新编译tensorflow项目

五、TensorFlow使用cmake构造参数

1、5、开始调用cmake来创建vs解决方案和项目文件

-DCMAKE_BUILD_TYPE=Release
-DSWIG_EXECUTABLE=C:/tools/swigwin-3.0.10/swig.exe ^
-DPYTHON_EXECUTABLE=C:/Users/%USERNAME%/AppData/Local/Continuum/Anaconda3/python.exe ^
-DPYTHON_LIBRARIES=C:/Users/%USERNAME%/AppData/Local/Continuum/Anaconda3/libs/python35.lib

创建一个GPU的版本需要的参数:
-Dtensorflow_ENABLE_GPU=ON ^
-DCUDNN_HOME=”D:…\cudnn”

需要支持MKL的参数:
-Dtensorflow_ENABLE_MKL_SUPPORT=ON ^
-DMKL_HOME=”D:…\compilers_and_libraries”

要使用MSVC启用SIMD指令,如AVX和SSE,定义如下:
-Dtensorflow_WIN_CPU_SIMD_OPTIONS=/arch:AVX

6、注意-DCMAKE_BUILD_TYPE=Release标志必须与调用msbuild时选择的构建配置。为了更良好的释放 RelWithDebInfo.目前不支持Debug构建类型,因为它依赖于python(python35.lib)的调试版本库python35d.lib,而Python默认情况下是没有发布.
-DCMAKE_BUILD_TYPE=(Release|RelWithDebInfo)

-Dtensorflow_BUILD_ALL_KERNELS=(ON|OFF)

默认为ON,你可以关闭,这样会构建一小部分内核会更快编译,打开为编译全部内核。

-Dtensorflow_BUILD_CC_EXAMPLE=(ON|OFF)
默认为ON,如果关闭将不会生成example例子。

-Dtensorflow_BUILD_PYTHON_BINDINGS=(ON|OFF)
默认为ON,编译时生成包含TensorFlow运行时及其python绑定的pip包的项目文件

-Dtensorflow_ENABLE_GRPC_SUPPORT=(ON|OFF)
默认为ON,在TensorFlow运行中包含gRPC支持和分布式客户端和服务器代码

-Dtensorflow_ENABLE_SSL_SUPPORT=(ON|OFF)
默认为OFF,包括SSL支持(用于发出安全的HTTP请求)在TensorFlow此支持不完整,将用于谷歌云存储支持。

-Dtensorflow_ENABLE_GPU=(ON|OFF)
默认为OFF,打开启用GPU支持,则需要安装UCDA和CUDNN工具包:
-DCUDNN_HOME=path_you_unzipped_cudnn
将会查找的cudnn路径

-Dtensorflow_BUILD_CC_TESTS=(ON|OFF)
默认为OFF,构建单元测试,这里面有很多hours,打开构建需要几个小时。
在cmake后构建并执行测试:
MSBuild /p:Configuration=RelWithDebInfo ALL_BUILD.vcxproj
ctest -C RelWithDebInfo

-Dtensorflow_BUILD_PYTHON_TESTS=(ON|OFF)
默认为OFF,构建python内核测试,你需要安装wheel后运行测试
ctest -C RelWithDebInfo

-Dtensorflow_BUILD_MORE_PYTHON_TESTS=(ON|OFF)
默认为OFF,允许在几个主要包上进行python测试,这个选项只有当tensorflow_BUILD_PYTHON_TESTS都设置为ON时才有效,要执行测试请使用:
ctest -C RelWithDebInfo

-Dtensorflow_ENABLE_MKL_SUPPORT=(ON|OFF)
默认为OFF,包括MKL支持,如果MKL是启用的。需要安装Intel Math Kernal库,并设置你的MKL路径:
-MKL_HOME=path_you_install_mkl

-Dtensorflow_ENABLE_MKLDNN_SUPPORT=(ON|OFF)
默认为OFF,包括MKL-DNN的支持,MKL DNN是用于深度神经网络的Intel(R)数学内核库(Intel(R) MKL-DNN)在包括MKL DNN支持之前,必须添加:
-Dtensorflow_ENABLE_MKL_SUPPORT=ON

相关推荐
最新评论 (0)
返回
发表文章
alvinlyb
文章数
21
评论数
0
注册排名
1151350