本文来自NVIDIA Developer
AI、机器学习以及深度学习,是解决产品推荐、客户互动、财务风险评估、制造瑕疵侦测等各种运算问题的有效工具。在实际场域中使用 AI 模型,又称为推理服务,是将 AI 整合至应用程序中最复杂的部分。NVIDIA Triton 推理服务器可负责推理服务的所有流程,让您能专注于开发应用程序。
每一个 AI 应用都需要推理服务,但事实上推理服务十分复杂,原因如下:
推理服务解决方案可以处理其中一些复杂事项,但是缺少许多进行高效率推论服务的优化方式。
Triton是一款高效率推论伺服软件,让您能专注于开发应用程序。此软件是属于开源软件,可以使用所有的主要框架后端进行推理:TensorFlow、PyTorch、TensorRT、ONNX Runtime,甚至以 C++ 和 Python 编写的自定义后端。它可以在三个方面,将推理优化。
我们很高兴能发表 Triton 推理服务器 2.3 版。此版本导入了重要功能,进一步简化扩充式推理服务:
-Kubernetes 无服务器推理
-支持框架后端的最新版本:TensorRT 7.1、TensorFlow 2.2、PyTorch 1.6、ONNX Runtime 1.4
-Python 自定义后端
-支援 NVIDIA A100 和MIG
-解耦推理服务
-Triton Model Analyzer
-整合 Microsoft Azure Machine Learning
-整合 NVIDIA DeepStream
Triton 是第一款采用 KFServing 最新社区标准 gRPC 和 HTTP/REST 数据平面 v2 协定的推理服务软件。KFServing 是 Kubernetes 上,以标准为基础的无服务器推理。
透过配置自动化和自动扩充,可简化 Kubernetes 中的推理服务部署。并以透明化方式处理负载尖峰,因此即使要求大幅增加数量,也会持续流畅地执行服务。现在,组织可以透过此类新的整合,在 Kubernetes 环境中使用 Triton 轻松地部署高效能推理。
以下程序代码范例是示范如何使用 Triton 部署 BERT 模型。InferenceService 是 KFServing 导入的自定义资源,您可以在其中将类型指定为 triton 的预测器。如您所见,使用 KFServing 和 Triton ,仅需要大约 30 行,即能在 Kubernetes 中建置可扩充的推理服务。
apiVersion: “serving.kubeflow.org/v1alpha2”
kind: “InferenceService”
metadata:
name: “bert-large”
spec:
default:
transformer:
custom:
container:
name: kfserving-container
image: gcr.io/kubeflow-ci/kfserving/bert-transformer:latest
resources:
limits:
cpu: “1”
memory: 1Gi
command:
– “python”
– “-m”
– “bert_transformer”
env:
– name: STORAGE_URI
value: “gs://kfserving-samples/models/triton/bert-transformer”
predictor:
triton:
resources:
limits:
cpu: “1”
memory: 16Gi
nvidia.com/gpu: 1
storageUri: “gs://nv-enterprise/trtis_models/”
(左右滑动代码)
利用 KFServing,可以透过定义转换器,轻松地在部署中加入令牌化等预处理步骤以及后处理。若需要更多信息,请参阅 GitHub 上的 samples/triton/bert example。
除可支持 C 和 C++ 应用程序的现有自定义后端环境外,Triton 亦可增加新的 Python 自定义后端。Python 自定义后端的功能十分强大,因为它可以在 Triton 内部执行任何的任意 Python 程序代码。使用 Python 程序代码的常见情境是针对神经网络进行预处理和后处理,以修改张量结构,例如旋转或裁切影像,或为推荐器工作负载进行特征工程。使用 Triton 中现有的模型整合功能,在深度学习框架后端进行神经网络推理之前和之后,可以执行 Python 程序代码。
NVIDIA A100 带来的突破性技术,例如第三代 Tensor 核心,可以多实例 GPU (MIG) 在执行各种工作负载时提升所有精度运算,以及可以将单一 A100 分成多达七个 GPU 实例,以优化 GPU 利用率,并让更多使用者存取。在 A100 上使用 Triton 进行推理的效能高于 V100(图 4)。在使用 ResNet50 PyTorch 模型的情况下,A100 搭配 Triton 的传输量和延迟,比 V100 快将近 3 倍。
您也可以使用 Triton,透过效能和故障隔离,在个别 MIG 实例上执行推理。
语音识别、语音合成等新兴使用案例需要采用此功能,在这些使用案例中,推理结果不是取决于完成完整的推理要求。在此类解耦模式下运作的模型,可以逐一要求决定为该要求产生多少响应。例如,在语音识别中,客户端可以在任何时间,以不同的速率和不同的样本数量,将音频样本传送至推理服务器。解耦模式可以让 Triton 在收到足够,但是非所有输入后启动模型。在 2.3 版中,此功能仅适用于 C/C++ 自定义后端。
Jarvis 对话式 AI 平台利用解耦推理服务功能已开放公测。若需要更多信息和早期试用,请在 NVIDIA Jarvis 注册。
Tridon 推理服务器 2.3 版的关键功能为 Triton Model Analyzer,可用于分析模型效能和内存占用空间的特性.以实现高效率服务。它是由两个工具所组成:
-Triton perf_client 工具已改名为 perf_analyzer。其有助于针对各种批次大小和推理同时请求数量,分析模型之传输量和延迟的特性。
-新的内存分析器功能,有助于针对各种批次大小和推理同时请求数量,分析模型之内存占用空间的特性。
此处为 perf_analyzer 的输出范例,有助于确定模型的最佳批次和同时请求数量,以显示出批次大小、延迟百分比、传输量以及并行详细信息。
$ perf_client -m resnet50_netdef –concurrency-range 1:4*** Measurement Settings ***
Batch size: 1
Measurement window: 5000 msec
Latency limit: 0 msec
Concurrency limit: 4 concurrent requests
Stabilizing using average latencyRequest concurrency: 1
Client:
Request count: 804
Throughput: 160.8 infer/sec
Avg latency: 6207 usec (standard deviation 267 usec)
p50 latency: 6212 usec
…
Request concurrency: 4
Client:
Request count: 1042
Throughput: 208.4 infer/sec
Avg latency: 19185 usec (standard deviation 105 usec)
p50 latency: 19168 usec
p90 latency: 19218 usec
p95 latency: 19265 usec
p99 latency: 19583 usec
Avg HTTP time: 19156 usec (send/recv 79 usec + response wait 19077 usec)
Server:
Request count: 1250
Avg request latency: 18099 usec (overhead 9 usec + queue 13314 usec + compute 4776 usec)
Inferences/Second vs. Client Average Batch Latency
Concurrency: 1, 160.8 infer/sec, latency 6207 usec
Concurrency: 2, 209.2 infer/sec, latency 9548 usec
Concurrency: 3, 207.8 infer/sec, latency 14423 usec
Concurrency: 4, 208.4 infer/sec, latency 19185 usec
Triton 内存分析器具备许多优点,例如以最佳方式将模型分配至 GPU ,以避免在执行中发生内存不足的错误,并可优化模型的内存使用以改善效能,以及为模型分配合适的 GPU 资源。如图 6 显示来自于内存分析器,有助于确定需要加载至 GPU 内存,以进行推理服务之模型实例数量的范例输出。
图 6:使用 Triton Model Analyzer 分析内存的特性
客户可以在 Microsoft Azure Machine Learning 上使用 Triton,以获得高效能推理,并在推理过程中,以更具成本效益的方式利用 GPU。Triton 的优点包括动态批处理、在 GPU 上并行工作、支持 CPU,以及包含 ONNX Runtime 的多个框架后端。Azure Machine Learning 提供中央登录和 MLOps 功能,可以自动为已部署模型及其他机器学习资产提供版本追踪和稽核轨迹。请参阅文件,以了解如何在 Azure Machine Learning 中使用 Triton。
NVIDIA DeepStream SDK 是使用于以 AI 为基础之多传感器处理、视讯和影像理解的完整串流分析工具套件。您可以使用 DeepStream 5.0 与 Triton 的原生整合,从 TensorRT 之外的多个深度学习框架部署模型,针对 NVIDIA T4 和 Jetson 平台进行快速原型设计。若需要更多信息,请参阅使用 NVIDIA DeepStream 5.0 建构智能影像分析应用程序。
此处为客户使用 Triton 的方式。
Microsoft 使用 AI 为 Microsoft Word 在线使用者提供文法建议。他们希望能以最先进的准确性和速度,使用符合成本效益之方式部署运算复杂的深度学习模型。实时文法建议需要在 200 毫秒以下的严格延迟效率。
他们透过 Triton 和 ONNX Runtime,在 Azure Machine Learning 和 NVIDIA V100 GPU 上使用实时推理。Triton 可以利用动态批处理、并行执行以及 ONNX Runtime 整合,提供高传输量(在一个 V100 上每秒 450 次推理)和低延迟 (200 毫秒)。他们可以在 Azure Machine Learning Compute V100 GPU 上,将成本降低三分之一。若需要更多信息,请参阅微软在 Word Online 版本内采用 NVIDIA 的人工智能技术来提出文法建议。
American Express 服务拥有 1.44 亿张卡,每年产生超过 80 亿笔交易。他们希望能建构和部署实时(不到 2 毫秒)的诈骗侦测系统,使用机器学习和深度学习提高准确性。
他们使用 Triton 部署经过 TensorRT 优化的 GRU 模型,使用配备 T4 的服务器分析数千万笔日常交易。经强化的实时诈骗侦测系统可在 2 毫秒的低延迟范围内运作,相较于无法满足延迟需求的 CPU,改善达 50 倍。
Naver 是南韩顶尖的搜索引擎和因特网服务公司。他们将深度学习使用于实时影像分类、搜寻建议及其他用途中。使用多个框架(TensorFlow、PyTorch、Caffe 和 TensorRT)会减缓实时导入新 AI 模型的速度。此外,其管理成本高昂。
他们采用 Triton,因为其可支持多个框架,以及在 GPU 和 CPU 上进行实时、批次和串流推理。Triton 为他们提供单一推理平台,可以更快速地从多个框架推出新的深度学习模型,并能降低 Naver 的营运成本。
SPIL 是全球最大的外包半导体组装和测试公司。他们提供晶圆凸块服务,每天在单一生产在线检测大约 30,000 张晶圆影像是否有瑕疵。目前,他们的自动光学检测(AOI)平台会产生 70% 的假阳性,而需要进行第二次筛选。
SPIL 是使用深度学习模型(U-Net、DenseNet 和 Autoencoder),以 NVIDIA T4 GPU、TensorRT 和 Triton 进行第二层筛选。现在他们可以 100% 侦测出所有组装线晶圆的瑕疵,且假阳性不到 10%。Triton 的动态模型加载和解除加载可以协助他们扩充至 100 种不同的模型,且无须变更伺服基础架构。
Tracxpoint 是一家零售技术公司,创造出搭载深度学习的实体购物车,称为 AiC。购物者可以使用 AiC,将产品放入购物车中,就能实时获得个人化产品报价、轻松逛超市,并以数字方式付款。
Tracxpoint 在 NVIDIA T4 Tensor 核心 GPU 上利用经过 TensorFlow 和 TensorRT 优化的模型,使用 Triton 进行实时推理。AiC 可以在一秒内,辨识 100,000 种产品。模型每天都会重新接受训练,且 Tracxpoint 可以在 Triton 中无缝更新模型,且不会干扰用户。
Triton 简化了生产中的大规模 AI 和深度学习模型部署。其可支持所有的主要框架、并行执行多个模型,以提高传输量和利用率,以及支持 GPU 和 CPU,并与 Kubernetes 整合,以进行扩充式推理。
请从 NGC 下载 Triton 推理服务器 2.3 版,并从 triton-inference-server/server GitHub 储存库取得原始码。