推理协议和 API#

客户端可以使用 HTTP/REST 协议GRPC 协议进程内 C API 或其 C++ 包装器与 Triton 通信。

HTTP/REST 和 GRPC 协议#

Triton 基于 KServe 项目提出的标准推理协议公开 HTTP/REST 和 GRPC 端点。为了完全启用所有功能,Triton 还实现了 HTTP/REST 和 GRPC 扩展到 KServe 推理协议。GRPC 协议还提供了推理 RPC 的双向流式版本,允许通过 GRPC 流发送一系列推理请求/响应。我们通常建议对推理请求使用单向版本。流式版本仅应在情况需要时使用。一些用例可以是

  • 假设一个系统,其中多个 Triton 服务器实例在负载均衡器后运行。如果需要一系列推理请求来命中同一 Triton 服务器实例,则 GRPC 流将在整个生命周期内保持单个连接,从而确保请求被传递到同一 Triton 实例。

  • 如果需要在网络上保留请求/响应的顺序,则 GRPC 流将确保服务器按照客户端发送的相同顺序接收请求。

HTTP/REST 和 GRPC 协议还提供端点来检查服务器和模型的健康状况、元数据和统计信息。其他端点允许模型加载和卸载以及推理。有关详细信息,请参阅 KServe 和扩展文档。

HTTP 选项#

Triton 为通过 HTTP 协议的服务器-客户端网络事务提供以下配置选项。

压缩#

Triton 允许通过其客户端在 HTTP 上对请求/响应进行在线压缩。有关更多详细信息,请参阅HTTP 压缩

将 Triton 服务器错误代码映射到 HTTP 状态代码#

下表将各种 Triton 服务器错误代码映射到其对应的 HTTP 状态代码。它可以作为参考指南,用于了解如何在 HTTP 响应中处理 Triton 服务器错误。

Triton 服务器错误代码

HTTP 状态代码

描述

TRITONSERVER_ERROR_INTERNAL

500

内部服务器错误

TRITONSERVER_ERROR_NOT_FOUND

404

未找到

TRITONSERVER_ERROR_UNAVAILABLE

503

服务不可用

TRITONSERVER_ERROR_UNSUPPORTED

501

未实现

TRITONSERVER_ERROR_UNKNOWN,
TRITONSERVER_ERROR_INVALID_ARG,
TRITONSERVER_ERROR_ALREADY_EXISTS,
TRITONSERVER_ERROR_CANCELLED

400

错误请求(其他错误的默认值)

GRPC 选项#

Triton 公开了各种 GRPC 参数,用于配置服务器-客户端网络事务。有关这些选项的用法,请参阅 tritonserver --help 的输出。

SSL/TLS#

这些选项可用于配置安全通信通道。服务器端选项包括

  • --grpc-use-ssl

  • --grpc-use-ssl-mutual

  • --grpc-server-cert

  • --grpc-server-key

  • --grpc-root-cert

对于客户端文档,请参阅客户端 GRPC SSL/TLS

有关 gRPC 中身份验证概述的更多详细信息,请参阅此处

压缩#

Triton 允许通过公开服务器端的以下选项,对请求/响应消息进行在线压缩

  • --grpc-infer-response-compression-level

对于客户端文档,请参阅客户端 GRPC 压缩

压缩可用于减少服务器-客户端通信中使用的带宽量。有关更多详细信息,请参阅gRPC 压缩

GRPC KeepAlive#

Triton 公开了 GRPC KeepAlive 参数,客户端和服务器的默认值在此处描述。

这些选项可用于配置 KeepAlive 设置

  • --grpc-keepalive-time

  • --grpc-keepalive-timeout

  • --grpc-keepalive-permit-without-calls

  • --grpc-http2-max-pings-without-data

  • --grpc-http2-min-recv-ping-interval-without-data

  • --grpc-http2-max-ping-strikes

对于客户端文档,请参阅客户端 GRPC KeepAlive

GRPC 状态代码#

当通过标头启用特定标志时,Triton 为流式请求实现 GRPC 错误处理。遇到错误时,Triton 返回相应的 GRPC 错误代码,然后关闭流。

  • triton_grpc_error:启动流时,标头值需要设置为 true。

GRPC 状态代码可用于提高可见性和监控。有关更多详细信息,请参阅gRPC 状态代码

对于客户端文档,请参阅客户端 GRPC 状态代码

限制端点访问 (BETA)#

Triton 用户可能希望限制对服务器的 GRPC 或 HTTP 端点提供的协议或 API 的访问。例如,用户可以为推理 API 提供一组访问凭据,为模型控制 API(例如模型加载和卸载)提供另一组访问凭据。

可以指定以下选项来声明受限协议组 (GRPC) 或受限 API 组 (HTTP)

--grpc-restricted-protocol=<protocol_1>,<protocol_2>,...:<restricted-key>=<restricted-value>
--http-restricted-api=<API_1>,API_2>,...:<restricted-key>=<restricted-value>

可以多次指定该选项,以使用不同的限制设置指定多个协议或 API 组。

  • protocols / APIs:要包含在此组中的协议/ API 的逗号分隔列表。请注意,目前不允许将给定的协议/ API 包含在多个组中。以下协议/ API 被识别

  • restricted-key:接收到请求时要检查的 GRPC / HTTP 请求标头。GRPC 的完整标头格式为 triton-grpc-protocol-<restricted-key>。HTTP 的完整标头格式为 <restricted-key>

  • restricted-value:访问指定协议所需的标头值。

示例#

要启动服务器,并设置一组协议和 API 限制为 admin 用途,其余协议和 API 保持不受限制,请使用以下命令行参数

tritonserver --grpc-restricted-protocol=shared-memory,model-config,model-repository,statistics,trace:<admin-key>=<admin-value> \
             --http-restricted-api=shared-memory,model-config,model-repository,statistics,trace:<admin-key>=<admin-value> ...

admin 协议的 GRPC 请求需要提供额外的标头 triton-grpc-protocol-<admin-key>,其值为 <admin-value>。对 admin API 的 HTTP 请求需要提供额外的标头 <admin-key>,其值为 <admin-value>