请求取消#

从 r23.10 开始,Triton 支持处理从 gRPC 客户端或 C API 用户接收的请求取消。长时间运行的推理请求,例如用于自动生成大型语言模型的请求,可能会运行不确定的时间或不确定数量的步骤。此外,客户端可能会将大量请求排队作为序列或请求流的一部分,并在稍后确定不再需要结果。继续处理不再需要结果的请求可能会严重影响服务器资源。

发出请求取消#

进程内 C API#

进程内 Triton 服务器 C API 已通过 TRITONSERVER_InferenceRequestCancelTRITONSERVER_InferenceRequestIsCancelled 增强,以分别发出取消并查询是否已在正在进行的请求上发出取消。在 tritonserver.h 中阅读有关 API 的更多信息。

gRPC 端点#

此外,gRPC 端点 现在可以检测来自客户端的取消并尝试终止请求。目前,只有 gRPC python 客户端支持向服务器端点发出请求取消。有关如何从客户端发出请求的更多详细信息,请参阅 request-cancellation。有关更精细的细节,请参阅 gRPC 指南中的 RPC cancellation

在 Triton Core 中处理#

当使用 dynamicsequence 批处理时,Triton core 会在一些关键点检查已取消的请求。检查也在每个 ensemble 步骤之间执行,如果请求被取消,则终止进一步处理。

在检测到已取消的请求时,Triton core 会以 CANCELLED 状态响应。如果在使用 sequence_batching 时取消了请求,则同一序列中的所有待处理请求也将被取消。序列由具有相同序列 ID 的请求表示。

注意:目前,一旦请求转发到 速率限制器,Triton core 不会检测请求的取消状态。改进 Triton core 内的请求取消检测和处理正在进行中。

在后端处理#

在接收到请求取消后,Triton 会尽最大努力在各个点终止请求。但是,一旦将请求交给后端执行,则由各个后端检测和处理请求终止。目前,以下后端支持提前终止

Python 后端是一种特殊情况,我们公开了 API 以检测请求的取消状态,但这取决于 model.py 开发人员来检测请求是否已取消并终止进一步执行。

对于后端开发人员:后端 API 也得到了增强,以便后端检测从 Triton core 收到的请求是否已被取消。有关更多详细信息,请参阅 tritonbackend.h 中的 TRITONBACKEND_RequestIsCancelledTRITONBACKEND_ResponseFactoryIsCancelled。后端在检测到请求取消后可以停止进一步处理。在 Python 后端运行的 Python 模型也可以查询请求和 response_sender 的取消状态。有关更多详细信息,请参阅 python 后端文档中的 this 部分。