Triton Inference Server

Triton Inference Server 提供针对 CPU 和 GPU 进行优化的云和边缘推理解决方案。Triton 支持 HTTP/REST 和 GRPC 协议,允许远程客户端请求对服务器管理的任何模型进行推理。对于边缘部署,Triton 可用作带有 C API 的共享库,允许将 Triton 的全部功能直接包含在应用程序中。

2.13.0 中的新增功能

  • 业务逻辑脚本的初始 Beta 版本,这是一组新的实用程序函数,允许在 Triton 服务的其他模型上执行推理请求,作为执行 Python 模型的一部分。
  • 发布新的容器组合实用程序,可用于创建具有特定后端和存储库代理的自定义 Triton 容器。
  • 从 21.08 开始,Triton 将在 NGC 上发布两个新容器。
    • nvcr.io/nvidia/tritonserver:21.08-tf-python-py3-GPU 启用的 Triton 服务器,只有 TensorFlow 2.xPython 后端。
    • nvcr.io/nvidia/tritonserver:21.08-pyt-python-py3-GPU 启用的 Triton 服务器,只有 PyTorchPython 后端。
  • 添加了对具有自定义操作的模型模型分析器的支持。

    Features

  • 多个深度学习框架

Triton 可以管理任意数量和组合的模型(受系统磁盘和内存资源的限制)。Triton 支持 TensorRT、TensorFlow GraphDef、TensorFlow SavedModel、ONNX、PyTorch TorchScript 和 OpenVINO 模型格式。TensorFlow 1.x 和 TensorFlow 2.x 均受支持。Triton 还支持 TensorFlow-TensorRT 和 ONNX-TensorRT 集成模型。

多个模型(或同一模型的多个实例)可以在同一个 GPU 或多个 GPU 上同时运行。
单模型多实例:对一个模型可以起多个实例,Triton会保证多实例的负载均衡,以提升请求吞吐量;

对于支持批处理的模型,Triton 实现了多种调度和批处理算法,将各个推理请求组合在一起以提高推理吞吐量。这些调度和批处理决策对请求推理的客户端是透明的。对于一个模型实例,Triton支持把多个请求缓存成一个batch,比如每8个请求打包,再喂给模型实例,以利用率和吞吐量。请注意:这需要模型支持批处理能力;而且实际开启该功能特性时,需要用户设置一个请求的最大延迟,以防止请求一直在等待被打包中。

除了深度学习框架之外,Triton 还提供了一个后端 API,允许 Triton 使用 Python 或 C++ 实现的任何模型执行逻辑进行扩展,同时仍然受益于 CPU 和 GPU 支持、并发执行、动态批处理和其他特性。

Triton 集成代表一个或多个模型的管道以及这些模型之间输入和输出张量的连接。对集成的单个推理请求将触发整个管道的执行。

  • HTTP/REST 和 GRPC 推理协议基于社区开发的 KFServing 协议。
  • C API 允许将 Triton 直接链接到您的应用程序中,以用于边缘和其他进程内用例。
  • [Metrics](Metrics indicating GPU utilization, server throughput, and server latency. The metrics are provided in Prometheus data format.) 可以显示 GPU 利用率、服务器吞吐量和服务器延迟的指标。指标以 Prometheus 数据格式提供。

    Documentation

    [Triton Architecture](https://github.com/triton-inference-server/server/blob/r21.08/docs/architecture.md) 对推理服务器的结构和功能进行了高级概述。

这有一个常见问题解答 FAQ。附加文档分为用户部分开发人员部分。

  • 用户文档描述了如何使用 Triton 作为推理解决方案,包括有关如何配置 Triton、如何组织和配置模型、如何使用 C++ 和 Python 客户端等的信息;
  • 开发人员文档描述了如何构建和测试 Triton 以及如何使用新功能扩展 Triton

Triton 发行说明支持列表指出了所需的 NVIDIA 驱动程序和 CUDA 版本,还描述了支持的 GPU。

User Documentation

[QuickStart](https://github.com/triton-inference-server/server/blob/r21.08/docs/quickstart.md) 将引导您完成安装和运行 Triton 以及示例图像分类模型所需的所有步骤,然后使用示例客户端应用程序使用该模型执行推理。该快速入门还演示了 Triton 如何同时支持 GPU 系统和仅支持 CPU 的系统

使用 Triton 为您的模型提供服务的第一步是将一个或多个模型放入模型库。或者,根据模型的类型以及要为模型启用的 Triton 功能,您可能需要为模型创建模型配置。如果您的模型具有自定义操作,您需要确保 Triton 正确加载它们。

在 Triton 中使用您的模型后,您需要从客户端应用程序向 Triton 发送推理和其他请求。 Python 和 C++ 客户端库提供 API 来简化这种通信。还有大量的客户端示例演示了如何使用这些库。您还可以使用基于 HTTP/REST JSON 的协议将 HTTP/REST 请求直接发送到 Triton,或者为许多其他语言生成 GRPC 客户端

了解和优化性能是部署模型的重要部分。Triton 提供了性能分析器模型分析器来帮助您进行优化工作。具体来说,您将希望为每个模型适当地优化调度和批处理以及模型实例。您可能还需要考虑将多个模型和预处理/后处理集成到一个管道中。在某些情况下,您可能会发现单个推理请求跟踪数据在优化时很有用。 Prometheus metrics endpoint 允许您可视化和监控聚合推理指标。

NVIDIA 发布了许多使用 Triton 的深度学习示例

作为部署策略的一部分,您可能希望通过从正在运行的 Triton 服务器加载和卸载模型来明确管理哪些模型可用。如果您使用 Kubernetes 进行部署,这里有一些关于如何使用 Kubernetes 和 Helm 部署 Triton 的简单示例,其中一个用于 GCP,另一个用于 AWS

如果您要从之前使用版本 1 的版本迁移到版本 2 的 Triton,版本 1 到版本 2 的迁移信息会很有帮助。

Developer Documentation

Triton 可以使用 Docker 构建,也可以不使用 Docker 构建。构建完成后,您应该测试 Triton

也可以创建一个包含自定义 Triton 的 Docker 镜像,该镜像仅包含后端的一个子集。Triton 项目还为 Python 和 C++ 提供了客户端库,可以轻松地与服务器进行通信。这有大量示例客户端演示了如何使用这些库。您还可以开发自己的客户端,使用 HTTP/REST 或 GRPC 协议直接与 Triton 通信。还有一个 C API 允许将 Triton 直接链接到您的应用程序中。

Triton 后端是执行模型的实现。后端有深度学习框架接口,如 PyTorch、TensorFlow、TensorRT 或 ONNX Runtime;或者它也有像DALI这样的数据处理框架接口;或者您可以通过使用 C/C++Python 编写自己的后端来扩展 Triton。

Triton 存储库代理使用新功能扩展 Triton,该功能可在加载或卸载模型时运行。加载模型时,您可以引入自己的代码来执行身份验证、解密、转换或类似操作。