【发布时间】:2018-05-02 01:14:05
【问题描述】:
我的目标是在 C++ 应用程序中运行 tensorrt 优化的 tensorflow 图。我正在使用 tensorflow 1.8 和 tensorrt 4。使用 python api,我能够优化图形并看到很好的性能提升。
尝试在 c++ 中运行图表失败并出现以下错误:
Not found: Op type not registered 'TRTEngineOp' in binary running on e15ff5301262. Make sure the Op and Kernel are registered in the binary running in this process.
其他非张量图也可以。我对 python api 有类似的错误,但通过导入 tensorflow.contrib.tensorrt 解决了它。从错误中我相当确定内核和操作没有注册,但我不知道如何在构建 tensorflow 后在应用程序中这样做。附带说明一下,我不能使用 bazel,但需要使用 cmake。到目前为止,我链接到 libtensorflow_cc.so 和 libtensorflow_framework.so。
有人可以帮我吗?谢谢!
更新:
使用c或者c++ api加载_trt_engine_op.so在加载的时候不会报错,但是运行失败了
Invalid argument: No OpKernel was registered to support Op 'TRTEngineOp' with these attrs. Registered devices: [CPU,GPU], Registered kernels:
<no registered kernels>
[[Node: my_trt_op3 = TRTEngineOp[InT=[DT_FLOAT, DT_FLOAT], OutT=[DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT], input_nodes=["tower_0/down_0/conv_0/Conv2D-0-TransposeNHWCToNCHW-LayoutOptimizer", "tower_0/down_0/conv_skip/Conv2D-0-TransposeNHWCToNCHW-LayoutOptimizer"], output_nodes=["tower_0/down_0/conv_skip/Relu", "tower_0/down_1/conv_skip/Relu", "tower_0/down_2/conv_skip/Relu", "tower_0/down_3/conv_skip/Relu"], serialized_engine="\220{I\000...00\000\000"](tower_0/down_0/conv_0/Conv2D-0-TransposeNHWCToNCHW-LayoutOptimizer, tower_0/down_0/conv_skip/Conv2D-0-TransposeNHWCToNCHW-LayoutOptimizer)]]
【问题讨论】:
-
从 TensorFlow 1.7 和 TensorRT 3.04 开始,使用 C API 中的
TF_LoadLibrary加载_trt_engine_op.so为我完成了注册操作的工作。目前似乎不适用于 1.8,所以我没有将其发布为答案。但也许这些信息会有用。 -
我将
"//tensorflow/contrib/tensorrt:trt_engine_op_kernel"添加到 libtensorflow.so 的 bazel 构建依赖项中,现在它可以工作了。我仍在与“TensorRT 引擎需要一致的批量大小”(适用于 python)作斗争,但禁用trt_shfn.cc中的致命警告允许它运行。
标签: c++ tensorflow tensorrt