Google cloud platform “怎么做?”;“实时请求批处理”;在gcloud中
以下是我的情况:Google cloud platform “怎么做?”;“实时请求批处理”;在gcloud中,google-cloud-platform,routes,Google Cloud Platform,Routes,以下是我的情况: 我有一个在GPU上运行的相当慢的tensorflow模型(每次预测2到3秒) 单个“实体”的预测与8个“实体”的预测所需时间大致相同 这意味着只要在同一个请求中简单地组合多个预测,我的效率就可以提高8倍 我在AI平台上有一个服务,为该模型提供请求 该服务的请求速率较慢,但难以扩展(任何超过4个QPS的服务都无法处理) 我的问题是: 是否有批处理实时客户端请求的标准方法/最佳实践: 接收请求时,请稍等其他请求 一段时间后,或者当请求数量达到设定数量时,将请求以单个“批”转发
- 我有一个在GPU上运行的相当慢的tensorflow模型(每次预测2到3秒)
- 单个“实体”的预测与8个“实体”的预测所需时间大致相同
- 这意味着只要在同一个请求中简单地组合多个预测,我的效率就可以提高8倍
- 我在AI平台上有一个服务,为该模型提供请求
- 该服务的请求速率较慢,但难以扩展(任何超过4个QPS的服务都无法处理)
- 接收请求时,请稍等其他请求
- 一段时间后,或者当请求数量达到设定数量时,将请求以单个“批”转发到另一个服务
- 如果流量低,延迟将在批处理满之前过期,但由于流量低,这不是问题
- 如果流量很大,则在延迟之前批处理将已满,客户端将不得不等待更少的时间
- 当预测请求传入时,在PubSub中发布它
- 在流模式下部署数据流,固定窗口为X分钟,在窗口中的Y事件之后部署另一个触发器(未累积)
- 执行窗口触发时(根据消息数或计时器),执行批处理
你可以想象其他更简单/更便宜的设计
- 仍在PubSub中发布预测请求
- 如果消息数量超过阈值,请向拉取PubSub订阅并运行批处理的其他进程执行请求(如前所述#1)。重置计数器值和消息日期值
- 设置一个云计划程序,每分钟检查Firestore中第一个消息日期的值。如果它超出了您的时间限制,请向其他进程执行请求,以拉取PubSub订阅并运行批处理(如前所述#1)。重置计数器值和消息日期值
#2将产生大量Firestore读/写操作,但会比数据流便宜。谢谢!…但如果我理解正确,所有这些解决方案的最小延迟约为一分钟。我也有使用cron jobs的类似想法,但我担心等待一整分钟的结果对用户来说太长了(谁会期待等待5到10秒)你有几种解决方案。一种是每分钟触发一个进程(云功能或云运行)流程每5秒执行一次检查。原则是1分钟内的所有检查都需要在请求上下文中执行。另一种解决方案是让流程在任务中创建带有触发时间戳的云任务。每分钟生成12个任务,每个任务间隔5秒。任务将调用另一个端点that执行检查和批触发。我不知道云任务“scheduleTime”。这听起来像是一个解决方案(虽然有点“黑客”)。我会尝试一下。谢谢!