本文分享如何将github上的tensorflow源码编译成动态库即.dll文件,以实现使用C++接口调用训练好的.pb模型文件。
系统环境:win10
tensorflow版本:r1.10
vs版本:VS2015 update3
cmake版本:3.6.3
swigwin版本:3.0.10
cuda版本:9.0
cudnn版本:7.0
git版本:2.9.2
注:将cmake.exe与swig.exe所在目录添加至系统环境变量
本文编译的是gpu版本,cpu版本应该大同小异。
内存要求,越大越好,最少16g
编译前请正确安装以上软件,cuda及cudnn的安装可参考我以前写的一篇文章。
一、下载tensorflow源码
请自行至github搜索tensorflow,注意选择r1.10分支,下载并解压
在 tensorflow-r1.10/tensorflow/contrib/cmake 路径下新建build文件夹
二、修改文件
修改 tensorflow/contrib/cmake/external/ 路径下的grpc.cmake文件
将位于 18 行 GRPC_URL 后的链接改为 https://github.com/lzkmylz/grpc
将位于 20 行 GRPC_TAG 后的校验码改为 4446434eab7bfa9c7af000fc043ce9ecc267efdd
因为编译时需要从链接地址下载资源,原链接资源被删除,故需修改重新指向其他资源。
三、生成.sln工程
打开cmake.gui
选择源码目录,即(一)中提到的cmake文件夹的绝对路径
选择生成工程存放的路径,即新建的build文件夹路径
勾选grouped与advanced
点击configure
勾选 tensorflow_ENABLE_GPU 与 tensorflow_BUILD_SHARED_LIB
再次configure,直至没有红色的配置项,然后点击generate
四、编译
打开 VS2015 x64 x86 兼容工具命令提示符
切换至build目录
键入tensorflow.sln回车即打开工程
切换生成模式至Release(非常重要,因为tensorflow只支持Release与RelwithDebuginfo两种生成模式)
将 $(SolutionDir) 添加到 tf_core_kernels 项目的包含目录中
给最上面这五个前面带下划线的项目的附加库目录添加 $(SolutionDir)$(Configuration);
右键 ALL_BUILD,生成。
i7-7700k大概编了三个多小时,用笔记本编的可以去睡一觉了。
展示一下成果