在生产中部署 AI 模型以满足 AI 驱动应用程序的性能和可扩展性要求,同时保持低基础设施成本是一项艰巨的任务。
这篇文章为您提供了在生产中部署模型时常见的 AI 推理挑战的高层次概述,以及目前如何跨行业使用 NVIDIA Triton 推理服务器 来解决这些问题。
我们还研究了 Triton 中最近添加的一些功能、工具和服务,它们简化了生产中 AI 模型的部署,具有最佳性能和成本效益。
部署人工智能推理时需要考虑的挑战
人工智能推理是运行人工智能模型进行预测的生产阶段。推断很复杂,但了解影响应用程序速度和性能的因素将有助于您在生产中交付快速、可扩展的 AI 。
开发人员和 ML 工程师面临的挑战
- 多种型号: 具有不同体系结构和不同规模的人工智能、机器学习和深度学习(基于神经网络)模型。
- 不同的推理查询类型: 实时、离线批处理、流式视频和音频以及模型管道使满足应用程序服务级别协议变得非常困难。
- 不断发展的模型: 生产中的模型必须根据新数据和算法不断更新,而不会中断业务。
MLOps 、 IT 和 DevOps 从业人员面临的挑战
- 多模型框架: 有不同的训练和推理框架,比如 TensorFlow 、 PyTorch 、 XGBoost 、 TensorRT 、 ONNX ,或者只是普通的 Python 。在生产环境中为应用程序部署和维护这些框架的成本可能很高。
- 多元化处理器: 这些模型可以在 CPU 或 GPU 上执行。每个处理器平台都有单独的软件堆栈,这会导致不必要的操作复杂性。
- 多元化部署平台: 模型部署在公共云、本地数据中心、边缘以及裸机、虚拟化或第三方 ML 平台上的嵌入式设备上。不同的解决方案或不太适合给定平台的最佳解决方案导致投资回报率低。这可能包括推出较慢、应用程序性能差或使用更多资源。
这些因素的结合使得在生产中部署 AI 推理具有一定的挑战性,以获得理想的性能和成本效率。
使用 NVIDIA Triton ®声波风廓线仪的新 AI 推理用例
NVIDIA Triton 推理服务器 ( Triton )是一种开源推理服务软件,支持所有主要模型框架( TensorFlow 、 PyTorch 、 TensorRT 、 XGBoost 、 ONNX 、 OpenVINO 、 Python 等)。 Triton 可用于在 x86 和 Arm CPU 、 NVIDIA GPU 和 AWS Inferentia 上运行模型。它通过标准功能解决了前面讨论的复杂性。
Triton 被全世界各行各业数以千计的组织使用。以下是 Triton 如何帮助一些客户解决 AI 推理难题。
NIO 自动驾驶
NIO 使用 Triton 在云和数据中心运行其在线服务模型。这些模型处理来自自动驾驶车辆的数据。 NIO 使用 Triton 模型集成功能将其预处理和后处理功能从客户端应用程序移动到 Triton 推断服务器。预处理速度加快了 5 倍,提高了他们的整体推理吞吐量,使他们能够经济高效地处理来自车辆的更多数据。
GE Healthcare
GE Healthcare 在其爱迪生平台中使用 Triton 来标准化内部模型跨不同框架( TensorFlow 、 PyTorch 、 ONNX 和 TensorRT )的推理服务。这些模型部署在各种硬件系统上,从嵌入式(例如, x 光系统)到本地服务器。
Wealthsimple
在线投资管理公司使用 CPU 上的 Triton 运行其欺诈检测和其他金融科技模型。 Triton 帮助他们将跨应用程序的不同服务软件整合到多个框架的单一标准中。
腾讯
腾讯在其集中式 ML 平台中使用 Triton 对多个业务应用程序进行统一推理。总的来说, Triton 帮助他们每天处理 150 万个查询。腾讯通过 Triton 动态批处理和并发模型执行功能实现了低成本的推理。
阿里巴巴智能互联
阿里巴巴智能连接公司正在为其智能扬声器应用开发人工智能系统。他们在数据中心使用 Triton 运行模型,为智能扬声器生成流式文本到语音转换。 Triton 提供了良好音频体验所需的最低首包延迟。
雅虎日本
Yahoo Japan 在数据中心使用 CPU 上的 Triton 运行模型,为 Yahoo Browser 应用程序中的“点搜索”功能找到类似的位置。 Triton 用于运行完整的图像搜索管道,还集成到其集中式 ML 平台中,以支持 CPU 和 GPU 上的多个框架。
Airtel
作为印度第二大无线供应商, Airtel 使用 Triton 为呼叫中心应用程序提供自动语音识别( ASR )模型,以改善客户体验。 Triton 帮助他们升级到更精确的 ASR 模型,与以前的服务解决方案相比, GPU 的吞吐量仍增加了 2 倍。
Triton 推理服务器如何应对 AI 推理挑战
从金融科技到自动驾驶,所有应用程序都可以从开箱即用的功能中受益,从而轻松地将模型部署到生产中。
本节讨论了 Triton 提供的一些开箱即用的关键新特性、工具和服务,可应用于生产中的模型部署、运行和扩展。
使用新管理服务建立业务流程模型
Triton 为高效的多模型推理带来了一种新的模型编排服务。该软件应用程序目前处于早期使用阶段,有助于以资源高效的方式简化 Kubernetes 中 Triton 实例的部署,其中包含许多模型。此服务的一些关键功能包括:
- 按需加载模型,不使用时卸载模型。
- 尽可能在单个 GPU 服务器上放置多个模型,从而有效地分配 GPU 资源
- 管理单个模型和模型组的自定义资源需求
有关此服务的简短演示,请参阅 Take Your AI Inference to the Next Level 。模型编排功能位于 私人抢先体验 ( EA )中。如果您有兴趣尝试一下,请立即 注册 。
大型语言模型推理
在自然语言处理( NLP )领域,模型的规模呈指数级增长(图 1 )。具有数千亿个参数的大型 transformer-based models 可以解决许多 NLP 任务,例如文本摘要、代码生成、翻译或 PR 标题和广告生成。
但这些型号太大了,无法安装在单个 GPU 中。例如,具有 17.2B 参数的图灵 NLG 需要至少 34 GB 内存来存储 FP16 中的权重和偏差,而具有 175B 参数的 GPT-3 需要至少 350 GB 内存。要使用它们进行推理,您需要多 GPU 和越来越多的多节点执行来为模型服务。
Triton 推理服务器有一个称为 Faster transformer 的后端,它为大型 transformer 模型(如 GPT 、 T5 等)带来了多 GPU 多节点推理。大型语言模型通过优化和分布式推理功能转换为更快的 transformer 格式,然后使用 Triton 推理服务器跨 GPU 和节点运行。
图 2 显示了使用 Triton 在 CPU 或一个和两个 A100 GPU 上运行 GPT-J ( 6B )模型时观察到的加速。
有关使用 Triton Faster transformer 后端进行大型语言模型推断的更多信息,请参阅 Accelerated Inference for Large Transformer Models Using NVIDIA Triton Inference Server 和 Deploying GPT-J and T5 with NVIDIA Triton Inference Server 。
基于树的模型推断
Triton 可用于在 CPU 和 GPU 上部署和运行 XGBoost 、 LightGBM 和 scikit learn RandomForest 等框架中基于树的模型,并使用 SHAP 值进行解释。它使用去年推出的 Forest Inference Library ( FIL )后端实现了这一点。
使用 Triton 进行基于树的模型推理的优点是在机器学习和深度学习模型之间的推理具有更好的性能和标准化。它特别适用于实时应用程序,如欺诈检测,其中可以轻松使用较大的模型以获得更好的准确性。
有关使用 Triton ®声波风廓线仪部署基于树的模型的更多信息,请参阅 Real-time Serving for XGBoost, Scikit-Learn RandomForest, LightGBM, and More 。该帖子包括一个欺诈检测笔记本。
试试这个 NVIDIA Launchpad lab to deploy an XGBoost fraud detection model with Triton 。
使用模型分析器优化模型配置
高效的推理服务需要为参数选择最佳值,例如批大小、模型并发性或给定目标处理器的精度。这些值指示吞吐量、延迟和内存需求。在每个参数的值范围内手动尝试数百种组合可能需要数周时间。
Triton 模型分析器工具将找到最佳配置参数所需的时间从几周减少到几天甚至几小时。它通过对给定的目标处理器脱机运行数百个具有不同批大小值和模型并发性的推理模拟来实现这一点。最后,它提供了如图 3 所示的图表,可以方便地选择最佳部署配置。有关模型分析器工具以及如何将其用于推理部署的更多信息,请参见 Identifying the Best AI Model Serving Configurations at Scale with NVIDIA Triton Model Analyzer 。
使用业务逻辑脚本为管道建模
使用 Triton ®声波风廓线仪的模型集成功能,您可以构建复杂的模型管道和集成,其中包含多个模型以及预处理和后处理步骤。业务逻辑脚本使您能够在管道中添加条件、循环和步骤的重新排序。
使用 Python 或 C ++后端,您可以定义一个自定义脚本,该脚本可以根据您选择的条件调用 Triton 提供的任何其他模型。 Triton 有效地将数据传递到新调用的模型,尽可能避免不必要的内存复制。然后将结果传递回自定义脚本,您可以从中继续进一步处理或返回结果。
图 4 显示了两个业务逻辑脚本示例:
- Conditional execution 通过避免执行不必要的模型,帮助您更有效地使用资源。
- Autoregressive models 与 transformer 解码一样,要求模型的输出反复反馈到自身,直到达到某个条件。业务逻辑脚本中的循环使您能够实现这一点。
有关详细信息,请参阅 Business Logic Scripting 。
自动生成模型配置
Triton 可以自动为您的模型生成配置文件,以加快部署速度。对于 TensorRT 、 TensorFlow 和 ONNX 模型,当 Triton 在存储库中未检测到配置文件时,会生成运行模型所需的最低配置设置。
Triton 还可以检测您的模型是否支持批推理。它将max_batch_size
设置为可配置的默认值。
您还可以在自己的自定义 Python 和 C ++后端中包含命令,以便根据脚本内容自动生成模型配置文件。当您有许多模型需要服务时,这些特性特别有用,因为它避免了手动创建配置文件的步骤。有关详细信息,请参阅 Auto-generated Model Configuration 。
解耦输入处理
虽然许多推理设置需要推理请求和响应之间的一对一对应,但这并不总是最佳数据流。
例如,对于 ASR 模型,发送完整的音频并等待模型完成执行可能不会带来良好的用户体验。等待时间可能很长。相反, Triton 可以将转录的文本以多个短块的形式发送回来(图 5 ),从而减少了第一次响应的延迟和时间。
通过 C ++或 Python 后端的解耦模型处理,您可以为单个请求发送多个响应。当然,您也可以做相反的事情:分块发送多个小请求,然后返回一个大响应。此功能在如何处理和发送推理响应方面提供了灵活性。有关详细信息,请参阅 Decoupled Models 。
有关最近添加的功能的更多信息,请参阅 NVIDIA Triton release notes 。
开始可扩展 AI 模型部署
您可以使用 Triton 部署、运行和缩放 AI 模型,以有效缓解您在多个框架、多样化基础设施、大型语言模型、优化模型配置等方面可能面临的 AI 推理挑战。
Triton 推理服务器是开源的,支持所有主要模型框架,如 TensorFlow 、 PyTorch 、 TensorRT 、 XGBoost 、 ONNX 、 OpenVINO 、 Python ,甚至支持 GPU 和 CPU 系统上的自定义框架。探索将 Triton 与任何应用程序、部署工具和平台、云端、本地和边缘集成的更多方法。
有关详细信息,请参阅以下资源:
- Get started with NVIDIA Triton 并访问各种初学者的高级资源。
- 在构建实时或连续数据流应用程序 Fast and Scalable AI Model Deployment with NVIDIA Triton Inference Server 时,发现推理平台中需要的功能。
- 了解为什么传统计算基础设施不再足以支持大规模人工智能 The secret to rapid and insightful AI–GPU-accelerated computing 。
- 寻找动手技能实验室?在 NVIDIA LaunchPad 上部署 AI 支持聊天机器人或训练自己的 AI 模型,用于在线产品的图像分类。