私の目標は、C++ アプリケーションで tensorrt に最適化された tensorflow グラフを実行することです。私は tensorrt 4 で tensorflow 1.8 を使用しています。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 をインポートすることで解決しました。エラーから、カーネルと op が登録されていないことはかなり確信していますが、テンソルフローが構築された後にアプリケーションで登録する方法を知りません。ちなみに、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)]]