提高 tensorflow-serving 中超大 input/ouput 图像的 io 性能

improve io performance for very large input/ouput images in tensorflow-serving

我们在 tensorflow 中有一个模型,它以 uint16 格式将非常大的图像 (>40MPx) 作为输入。模型输出相同大小的图像并使用 GPU 在自定义编译的 tf-serving 上运行。 最大的问题似乎与图像大小有关,因为 GPU 推理需要约 1 秒,而整个 HTTP 请求在使用 SSD 驱动器的本地 tf-serving 上运行约 17 秒。 我们的模型输出 tf.image.encode_png,它使用后缀“_bytes”正确命名,以便 tf-serving 将其正确编码为 base64 as per this blog post。此图像从 b64 解码需要 2.5 秒。

由于 json 编码,对于似乎主要是 IO 操作的开销来说,这是相当大的开销。 有没有更有效的方法来减少这种开销?

我们确实需要 GPU、大图像、uin16 和 tensorflow 服务。在最坏的情况下,可以假定客户端请求来自同一台机器或本地网络。

遇到了类似的问题,目前以直接加载TF的模型结束(tf.saved_model.load)。推理时间提高了 2 倍以上。 运行 它在 K8s 集群上

我结束了使用 REST API 但只传递了 input/output-filepath 个字符串。这大约需要 6s,其中 ~2s 只是 tf.io.encode_png。它可能不是 GPU 利用率的最佳解决方案,但由于易于使用,现在可以接受。

使用 GRPC 几乎一样快(~9 秒)并且还有更多改进空间。

REST API 真的很慢(~20 秒)但不依赖于 tensorflow,因此对客户端有好处。

Tensorflow 最近发布了 performance guide,但这似乎需要最新的 tf-serving。