【问题标题】:gRPC - Accumulate requests from Multiple clientsgRPC - 累积来自多个客户端的请求
【发布时间】:2020-10-20 15:21:15
【问题描述】:
假设我有多个客户端向服务器(gRPC 服务)发送请求。我希望我的服务器能够收集,比如说 8 个请求,一次处理这些请求,然后只将结果发送回客户端。我不确定如何使用 GRPC 功能来做到这一点,或者即使它是可能的,或者我是否需要其他东西。
上下文:我的用例来自为 GPU 上的神经网络提供服务。在这种情况下,批量处理多个请求的输入,进行一次推理,然后将结果发回,而不是对每个输入进行一次推理,效率更高。
【问题讨论】:
标签:
gpu
grpc
inference
batching
serving
【解决方案1】:
至少 3 个选项。这里按照复杂度递增的顺序排列:
-
客户端使用他们的数据调用服务器。服务器以批号响应。客户然后使用批号做出“完成了吗?”针对服务器的 RPC。最简单的方法,但是使用轮询,比较浪费。
-
客户端使用他们的数据调用服务器。服务器响应消息流,更新客户端批次的状态......工作,工作,工作,完成[结果]。优点是下面#3 中明确的隐式“回调”。如果您不太关心中间状态,则缺点是流的冗余。
-
客户端使用他们的数据和回调地址调用服务器。服务器(作为 gRPC 客户端)使用回调在客户端(作为 gRPC 服务器运行)上进行 RPC。鉴于 #1 和 #2,最复杂且可能不必要。