Tensorflow 服务性能与直接推理相比非常慢

Woj*_*icz 6 kubernetes tensorflow tensorflow-serving

我在以下场景中运行:

  • 单节点 Kubernetes 集群(1x i7-8700K、1x RTX 2070、32GB RAM)
  • 1 个 Tensorflow 服务 Pod
  • 4 个推理客户端 Pod

推理客户端所做的是从 4 个独立的摄像头(每个 1 个)获取图像,并将其传递给 TF-Serving 进行推理,以便了解在视频源上看到的内容。

我之前一直通过直接调用 TensorFlow 在推理客户端 Pod 中单独进行推理,但这在显卡的 RAM 上效果不佳。Tensorflow Serving 最近被引入到组合中,以优化 RAM,因为我们不会将重复的模型加载到显卡。

并且性能看起来并不好,对于 1080p 图像,它看起来像这样:

Direct TF:20ms 用于输入张量创建,70ms 用于推理。TF-Serving:80ms 用于 GRPC 序列化,700-800ms 用于推理。

TF-Serving Pod 是唯一一个可以访问 GPU 的容器,并且它是专门绑定的。其他一切都在 CPU 上运行。

我可以做任何性能调整吗?

我正在运行的模型是来自 TF Model Zoo 的 Faster R-CNN Inception V2。

提前谢谢了!

Ami*_*avi 1

这是来自 TF Serving 文档

请注意,虽然使用 TensorFlow Serving 执行推理的平均延迟通常不低于直接使用 TensorFlow,但 TensorFlow Serving 的亮点在于为查询许多不同模型的许多客户端降低尾部延迟,同时有效地利用底层硬件来最大化吞吐量。

根据我自己的经验,我发现 TF Serving 在提供一致的模型服务抽象方面很有用,并且不需要实现自定义服务功能。开箱即用的模型版本控制和多模型可以为您节省大量时间,并且是很好的补充。

此外,如果您还没有批量处理您的请求,我还建议您这样做。我还建议尝试使用TF Serving 的TENSORFLOW_INTER_OP_PARALLELISM, TENSORFLOW_INTRA_OP_PARALLELISM,OMP_NUM_THREADS参数。这是它们的解释