支持GPU的Tensorflow C++接口编译

项目部署上需要,需要编译Tensorflow的C++接口。参考了很多文章,折腾了好几天,最后记录一下我的编译过程。

1.编译工具准备

第一个重要的点:确保版本匹配。
一定要让 Tensorflow,python,VS,Bazel,CUDA,cuDNN 版本匹配,大部分编译出问题都是版本不匹配。官方的推荐版本映射关系,参考下表。
在这里插入图片描述
最后我采用的环境:

  • Visual Studio 2015 with update3
  • Anacoda3(Python3.6.5)
  • CUDA 10.0
  • cuDNN 7.6.5
  • Tensorflow-1.13.1
  • bazel-0.20.0-windows-x86_64.exe
  • msys2-x86_64-20210419.exe

**注意:**这里需要说明一下,cuDNN对应版本应该采用7.4,但我机子已经安装了7.6,懒得换了就直接用的,暂时没发现问题。其他模块我都保持和它要求一致的。

第二个重要的点:请准备一个番羽强工具
安装过程中有很多需要下载的模块,如果不能连外面,大概率会失败。

2.安装CUDA

安装VS2015这个就可以略过了,正常安装就行了。

安装cuda也很简单,默认安装就可以了。
在这里插入图片描述
cuDNN解压后直接拷贝到cuda目录就可以了
在这里插入图片描述
注意:安装完成后要重启系统

验证安装后是否正常
打开 cmd 命令行
输入

nvcc -V 

可以查看当前cuda版本
在这里插入图片描述

3.安装Anaconda

我安装的是Anaconda3-5.2.0-Windows-x86_64.exe
对应的是python3.6.5,当然你也可以不安装Anaconda,直接安装python,也是可以的。

注意:要勾选 Add Anaconda to my PATH environment variable
在这里插入图片描述
安装完成后要重启系统

重启后在命令行输入python查看当前是否成功
在这里插入图片描述

4.安装msys2

进入msys2官网

http://www.msys2.org/

下载最新的版本就可以了
在这里插入图片描述
推荐安装到默认路径

c:\msys64

安装完成后后自动执行弹出一个类似cmd命令行的窗口,

输入

pacman -Syu

提示要下载什么,直接 y 就可以了
在这里插入图片描述
执行完成后继续输入命令

pacman -S git

在这里插入图片描述
又会下载一堆东西,继续 y

执行完成后,输入

pacman -S patch unzip grep

继续 y

在这里插入图片描述
注意:如果不能下载失败,就检测下你的fq工具是否开着。

添加环境变量
将以下路径添加到环境变量的path中:

c:\msys64
c:\msys64\usr\bin

在这里插入图片描述
设置完成后,重启系统,环境变量才会生效。

5.安装bazel

从官网下载程序:
bazel-0.20.0-windows-x86_64.exe
地址:
https://github.com/bazelbuild/bazel/releases/download/0.20.0/bazel-0.20.0-windows-x86_64.exe

将下载好的 .exe 文件复制到 c:\msys64 下,更名为 bazel.exe。
在这里插入图片描述

接下来配置bazel环境变量。
新建三个系统变量:

BAZEL_SH,BAZEL_VC,BAZEL_VS

设置对应的VC和Msys64路径
在这里插入图片描述

6.配置Tensorflow

(1)下载代码和编译脚本
Tensorflow源码:
https://github.com/tensorflow/tensorflow/archive/v1.13.1.zip

Tensorflow编译脚本:
https://github.com/guikarist/tensorflow-windows-build-script/archive/master.zip

下载后把源码目录改为source,并和脚本放到一个目录里:
在这里插入图片描述
(2)配置文件
将 patches 下的 eigen_half.patch 复制到 tensorflow-1.13.1\source\third_party 下:
在这里插入图片描述
将 patches 下的 tf_exported_symbols_msvc.lds 复制到
tensorflow-1.13.1\source\tensorflow 下:

(3)修改编译文件
用文本编辑器打开编译文件‘

build.ps1 

将以下语句注释掉,因为上面我们已经拷贝过了。
#Copy-Item …\patches\tf_exported_symbols_msvc.lds tensorflow
在这里插入图片描述

将python版本和路径改成自己的版本路径:
在这里插入图片描述
将里面py命令改成python
在这里插入图片描述
7.用powershell进行配置编译
(1)在 C:\Windows\SysWOW64\WindowsPowerShell\v1.0
目录下,右键以管理员身份运行

powershell.exe

在这里插入图片描述
切换到Tensorflow目录。

(2)先打开一下执行权限

set-ExecutionPolicy RemoteSigned

在这里插入图片描述
输入y

(3)配置编译选项
输入配置命令:

$parameterString = "--config=opt --config=cuda --define=no_tensorflow_py_deps=true --copt=-nvcc_options=disable-warnings //tensorflow:libtensorflow_cc.so --verbose_failures"

然后执行编译:

.\build.ps1 -BazelBuildParameters $parameterString -BuildCppAPI -ReserveSource

在这里插入图片描述
继续选择配置
在这里插入图片描述
注意:如果是1060的选6.1,2070显卡选7.5,3070的就是8.6

编译中途报错,提示下载的模块校验不对。
在这里插入图片描述
根据提示打开tensorflow-1.13.1\source\third_party\icu目录下的脚本文件

workspace.bzl

在这里插入图片描述
直接替换成
86b85fbf1b251d7a658de86ce5a0c8f34151027cc60b01e1b76f167379acf181

然后回到上一步,重新执行编译。
大约二十分钟,顺利编译完成
在这里插入图片描述

8.整理库文件

新建一个文件夹,在文件夹中创建以下三个目录:

dll,lib,include

首先根据编译结束时显示的动态库所在位置,找到生成的库

 libtensorflow_cc.so 和 liblibtensorflow_cc.so.ifso

将 libtensorflow_cc.so 更名为 tensorflow_cc.dll,放到刚才创建的 dll 目录下;
将 liblibtensorflow_cc.so.ifso 更名为 tensorflow_cc.lib,放到刚才创建的 lib 目录下

接下来要做的是填满 include 目录
1)复制_bin
在include目录中新建名为 _bin 的文件夹
将当前机器上的目录
C:\Users\admin_bazel_admin\install\d5b1be53d8db6a1e2d160364df2e7ef6_embedded_binaries
里面的内容(如下图框出)
在这里插入图片描述

全部复制到刚才新建的目录

 include/_bin 

2)复制bazel-out
C:\Users\admin_bazel_admin\lozrchqc\execroot\org_tensorflow
下的bazel-out

在这里插入图片描述
3)拷贝protobuf_archive
将目录
C:\Users\admin_bazel_admin\lozrchqc\execroot\org_tensorflow\external
在这里插入图片描述
下的protobuf_archive拷贝到上一步的bazel-out\目录的子目录下

..\include\bazel-out\x64_windows-opt\genfiles\external

4)拷贝tensorflow
将 tensorflow-1.13.1\source 下的

tensorflow 和 third_party 

复制到 include 目录下

5)拷贝external
将C:\Users\admin_bazel_admin\lozrchqc 目录下的external 文件夹

在这里插入图片描述
6)拷贝bazel_tools
将目录
C:\Users\admin_bazel_admin\install\d5b1be53d8db6a1e2d160364df2e7ef6_embedded_binaries\embedded_tools
下所有文件拷贝到
include/external/bazel_tools
目录下

7)拷贝tensorflow头文件
将source/tensorflow
在这里插入图片描述
拷贝到
include\external\org_tensorflow目录下

这样,这个include目录就整理好了,如下图
在这里插入图片描述

以上,所有C++需要的头文件和库就编译好了,下面就可以直接使用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值