tensorflow c++编译及调用

tensorflow的接口强大,同时模型及ops也多,许多顶会论文都是在tensorflow基础上发表的,但主要注重python接口,这点比不上mxnet

那么,如何编译c++库及接口,如何调用生成的模型进行推理呢?本文以label_image中的例子为主,介绍主要点,希望对大家有所帮助:

1. 环境:centos7, tensorflow-1.13, gcc 4.8.5

2. 编译:cd到tensorflow源码根目录下

./configure(配置好GPU, CUDNN安装路径等, 大部分默认,回车跳过即可)

Please specify optimization flags to use during compilation when bazel option "--config=opt" is specified [Default is -march=native -Wno-sign-compare]: --config=mkl #可以设置mkl库优化等,此设置是针对CPU而言

configure完成后:

bazel build -c opt  //tensorflow:libtensorflow_cc.so #在bazel-bin目录下,生成核心库

bazel build -c opt  //tensorflow:libtensorflow_framework.so #在bazel-bin目录下,生成核心库

也可以如下,支持汇编指令集优化(针对CPU推理):

bazel build -c opt --copt=-mavx --copt=-mavx2 --copt=-mfma --copt=-msse4.2 //tensorflow:libtensorflow_cc.so

bazel build -c opt --copt=-mavx --copt=-mavx2 --copt=-mfma --copt=-msse4.2 //tensorflow:libtensorflow_framework.so

3. cmake编译例子,这个我觉得是最方便的方法,不用把编译生成的库和头文件拷贝来拷贝去,不容易缺少文件:

cd tensorflow/examples/label_image

CMakeLists.txt如下:

  1 #
  2 cmake_minimum_required(VERSION 3.14)
  3 #
  4 project(main)
  5 #
  6 set(CMAKE_CXX_STANDARD 11)
  7 #
  8 set(TENSORFLOW_DIR /home/wangfengming/work/tensorflow/)
  9 #
 10 include_directories(${TENSORFLOW_DIR})
 11 include_directories(${TENSORFLOW_DIR}/bazel-genfiles)
 12 include_directories(${TENSORFLOW_DIR}/tensorflow/contrib/makefile/gen/proto)
 13 include_directories(${TENSORFLOW_DIR}/tensorflow/contrib/makefile/gen/protobuf-host/include)
 14 include_directories(${TENSORFLOW_DIR}/tensorflow/contrib/makefile/downloads/eigen)
 15 include_directories(${TENSORFLOW_DIR}/tensorflow/contrib/makefile/downloads/nsync/public)
 16 include_directories(${TENSORFLOW_DIR}/tensorflow/contrib/makefile/downloads/absl)
 17 
 18 #
 19 link_directories(${TENSORFLOW_DIR}/tensorflow/contrib/makefile/gen/lib)
 20 link_directories(${TENSORFLOW_DIR}/tensorflow/contrib/makefile/gen/protobuf-host/lib)
 21 link_directories(${TENSORFLOW_DIR}/tensorflow/contrib/makefile/downloads/nsync/builds/default.linux.c++11)
 22 link_directories(${TENSORFLOW_DIR}/bazel-bin/tensorflow)
 23 
 24 add_executable(main main.cc)
 25 #
 26 target_link_libraries(main tensorflow_framework)
 27 target_link_libraries(main tensorflow_cc)

cmake .

make即可

 

4. 出现的问题:

有时候,虽然编译成功,但运行demo时出现如下问题:

duplicate registration of device factory for type gpu with the same priority 210

则检查一下,你是否用了--copt=monolithic编译选项,这个选项的意思是生成尽可能少的动态链接库,使得整个程序集中一下,但会出问题,具体原因没找到,但猜测应该是符号重复或者冲突,多次注册了GPU设备.

如果出现这个问题,去这个选项,重新编译试试,希望能解决您遇到的问题

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

seasermy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值