跳转至

Triton推理服务器中的解耦模式

在Triton推理服务器中,解耦模式允许用户针对一个请求发送多个响应,或者不发送任何响应。此外,模型还可以按照与请求批次执行顺序不同的顺序发送响应。这类模型被称为解耦模型。要使用这种模式,模型配置中的事务策略必须设置为解耦模式。

在解耦模式下,模型必须为每个请求使用InferenceResponseSender对象,以便为该请求持续创建和发送任意数量的响应。此模式下的工作流程可能如下:

  1. execute函数接收一个pb_utils.InferenceRequest的批次,作为长度为N的数组。

  2. 迭代每个pb_utils.InferenceRequest对象,并为每个对象执行以下步骤:

  3. 使用InferenceRequest.get_response_sender()获取该请求的InferenceResponseSender对象。

  4. 创建并填充要发送回的pb_utils.InferenceResponse

  5. 使用InferenceResponseSender.send()发送上述响应。如果这是最后一个请求,则在InferenceResponseSender.send()中传递pb_utils.TRITONSERVER_RESPONSE_COMPLETE_FINAL作为标志。否则,继续执行步骤1以发送下一个请求。

在这种模式下,execute函数的返回值应为None

与上述类似,如果某个请求出现错误,可以使用TritonError对象为该特定请求设置错误消息。在为pb_utils.InferenceResponse对象设置错误后,使用InferenceResponseSender.send()将带有错误的响应发送回用户。

从23.10版本开始,可以直接在InferenceResponseSender对象上使用response_sender.is_cancelled()检查请求取消状态。即使请求已取消,仍需要在响应末尾发送TRITONSERVER_RESPONSE_COMPLETE_FINAL标志。

1 使用案例

解耦模式功能强大,支持多种其他使用场景:

  • 如果模型不需要为请求发送任何响应,则调用InferenceResponseSender.send()时不带响应,但标志参数设置为pb_utils.TRITONSERVER_RESPONSE_COMPLETE_FINAL

  • 模型可以以不同于接收请求的顺序发送响应。

  • 请求数据和InferenceResponseSender对象可以传递给模型中的单独线程。这意味着主调用线程可以从execute函数中退出,而模型可以继续生成响应,只要它持有InferenceResponseSender对象即可。

解耦示例展示了可以从解耦API中实现的全部功能。请阅读解耦后端和模型的详细信息,以了解如何托管解耦模型。

https://github.com/triton-inference-server/python_backend?tab=readme-ov-file#decoupled-mode

评论