首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在C (__call__) API中实现小输入的Tensorflow Python ()(++)性能?

如何在C (__call__) API中实现小输入的Tensorflow Python ()(++)性能?
EN

Stack Overflow用户
提问于 2021-05-30 11:08:04
回答 1查看 78关注 0票数 0

问题

我以SavedModel格式保存了一个(非常)小而快速的模型,可以用以下代码加载和运行该模型:

代码语言:javascript
复制
model = tf.keras.models.load_model("./<SavedModelDir>")
outputs = model(inputs, training=False)

预测函数在0.05秒内运行,输入为5次(在Nvidia GPU上)。然而,如果我使用model.predict_on_batch(inputs)model.predict(inputs),对于一批5秒,性能会显著下降到0.65-0.80秒。这与文档中的声明一致,即对于较小的输入,使用model() (__call__)通常更快。

我遇到的问题是,我试图将我的模型移植到一个C(++)程序。将TF_SessionRun()用于C和model_bundle.GetSession()->Run(),我的性能类似于“慢速”的Python推理方法。

我已经尝试过的

另一个(非常)小模型,小批量,同样的结果。

我尝试用tf.config.optimizer.set_experimental_options({'disable_meta_optimizer': False})禁用优化,以确保这不会对性能产生负面影响,但这会使事情变得更慢。

我还尝试将SavedModel转换为TensorRT SavedModel。这进一步提高了model() (__call__)方法的性能,但所有其他方法都停止在C++和下载的预编译Tensorflow C GPU (2.5.0)中工作,而使用Tensorflow_CC编译的C++ api会出现一个错误,即未找到操作(TensorRT似乎不起作用)。

给出的所有性能数字都是在几次热身运行后运行的。使用Tensorflow分析器和Python的time.time衡量性能

通过检查输出结果,我检查了model() (__call__)是否正确工作。

我的问题

是否有一种使用Tensorflow C(++) API获得++性能的方法?

这个问题似乎存在于批量较大的Tensorflow优化中,从而降低了较小批大小的性能。是否有另一个API允许对小批开箱即用(TensorRT C++ API)进行快速推理?

EN

回答 1

Stack Overflow用户

发布于 2021-05-31 16:34:04

我想我是偶然发现的,我做了下面的一些事情,我正在尝试:

tf.compat.v1.disable_v2_behavior()位于脚本的顶部。得到输出后的print(len(outputs))。这会产生以下错误:TypeError: len is not well defined for symbolic Tensors.

通过谷歌搜索,我发现符号张量是不直接持有值的张量,因此这些值可能会在稍后填写。

这意味着Model() (__call__)进行异步计算,对函数进行计时会给出一个假值。这可以通过停止打印/使用每个输出之后的时间来“修正”,或者仅仅使用predict()方法来完全避免这种情况。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67760450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档