首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TensorFlow模型在Google平台上的应用实例批量在线预测速度太慢

TensorFlow模型在Google平台上的应用实例批量在线预测速度太慢
EN

Stack Overflow用户
提问于 2020-07-11 03:03:09
回答 3查看 666关注 0票数 3

我正在尝试将TensorFlow模型部署到Google平台上,用于在线预测。我有延迟和吞吐量问题,

该模型在我的机器上运行不到1秒(只有一个英特尔核心I7 4790KCPU)的单一图像。我把它部署到一个有8个核心和一个NVIDIA T4 GPU的机器上的人工智能平台上。

在上述配置的AI平台上运行模型时,只要发送一幅图像,所需的时间就不到一秒钟。如果我开始发送多个请求,每个请求都有一个图像,模型最终会阻塞并停止响应。因此,我将在每个请求上发送成批图像(从2到10,取决于外部因素)。

问题是,我预期批处理的请求在时间上几乎是恒定的。当发送1幅图像时,CPU利用率约为10%,GPU利用率为12%。因此,我预计一批9幅图像将使用~100%的硬件,并在同一时间~1秒内作出响应,但事实并非如此。一批7到10张图像需要从15秒到50秒的之间的任何地方进行处理。

我已经试过优化我的模型了。我使用map_fn,用手动循环代替它,从浮点数32切换到浮点数16,尽量将操作向量化,但情况仍然相同。

我在这里错过了什么?

我正在使用最新的人工智能平台运行时进行在线预测(Python3.7,TensorFlow 2.1,CUDA10.1)。

该模型是一个大版本的YOLOv4 (~250 is的SavedModel格式)。我在TensorFlow中构建了几个后处理算法,这些算法对模型的输出进行操作。

最后但并非最不重要的一点是,我还尝试了用TensorBoard进行调试,结果表明TensorFlow图的YOLOv4部分占用了90%的处理时间。我预计模型的这个特定部分是高度并行的。

谢谢您在这方面的帮助。请向我询问您可能需要的任何信息,以更好地理解问题。

更新2020-07-13:在下面的评论中建议,我也尝试在CPU上运行这个模型,但是它确实很慢,并且遇到了与GPU相同的问题。它似乎不会并行处理来自单个请求的图像。

此外,我认为由于请求的速度和数量,我在TensorFlow服务方面遇到了问题。我在本地使用了tensorflow/serving:latest-gpu Docker映像来进一步测试这一点。在我的机器(GeForce GTX 1650)上,该模型的响应速度是AI平台上的3倍,但它确实与响应时间不一致。我得到了以下响应时间(<amount of images> <response time in milliseconds>):

代码语言:javascript
复制
3 9004
3 8051
11 4332
1 222
3 4386
3 3547
11 5101
9 3016
10 3122
11 3341
9 4039
11 3783
11 3294

然后,在运行了一分钟之后,我开始收到延迟和错误:

代码语言:javascript
复制
3 27578
3 28563
3 31867
3 18855
{
  message: 'Request failed with status code 504',
  response: {
    data: { error: 'Timed out waiting for notification' },
    status: 504
  }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-08-07 20:21:28

对于使用AI平台时与我有相同问题的其他人:

正如Google 这里的评论所指出的那样,AI平台不会同时执行批量的实例。不过,他们计划增加这个功能。

我们已经从人工智能平台转移到了NVIDIA公司的Triton推理服务器的定制部署,该服务器位于引擎上。我们的性能比我们预期的要好得多,而且我们仍然可以对Triton提供的模型应用更多的优化。

感谢每一个试图通过回答这个答案来提供帮助的人。

票数 1
EN

Stack Overflow用户

发布于 2020-07-11 03:54:09

来自Google 文档

如果您使用一个简单的模型和一组小的输入实例,您会发现使用在线预测和批处理预测完成相同的预测请求所需的时间有很大的不同。一个批处理作业可能需要几分钟才能完成在线请求几乎立即返回的预测。这是两种预测方法所使用的不同基础设施的副作用。AI平台预测在发送请求时为批预测作业分配和初始化资源。在线预测通常可以在请求时处理。

正如引号所述,这与节点分配的差异有关,特别是:

用于在线预测的节点分配:

  • 在几分钟内保持至少一个节点准备就绪,以处理请求,即使没有任何请求要处理。就绪状态确保服务能够迅速地为每个预测服务。

您可以了解更多关于该这里的信息。

票数 0
EN

Stack Overflow用户

发布于 2020-07-14 02:43:40

该模型是一个大版本的YOLOv4 (~250 is的SavedModel格式)。我在TensorFlow中构建了几个后处理算法,这些算法对模型的输出进行操作。

您对YOLOv4做了哪些后处理修改?是否有可能经济放缓的根源是这些行动?在本地验证这一假设的一个测试是,根据您已经为修改过的版本所做的基准测试,对未经修改的YOLOv4版本进行基准测试。

最后但并非最不重要的一点是,我还尝试了用TensorBoard进行调试,结果表明TensorFlow图的YOLOv4部分占用了90%的处理时间。我预计模型的这个特定部分是高度并行的。

看一看这里提到的“调试输出”会很有趣。如果您使用先决条件,最昂贵的操作的细分是什么?我有一些研究TF操作系统的经验--在某些情况下,我发现了CPU <-> GPU数据传输瓶颈造成的一些奇怪的瓶颈。如果你想给我打个DM的话,我很乐意随时打个电话和你一起看看。

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

https://stackoverflow.com/questions/62844769

复制
相关文章

相似问题

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