模型推理运行时-Triton-Torchscript
type
status
date
slug
summary
tags
category
icon
password
网址
虽然Python在许多需要动态性和快速迭代的场景中是一种合适且首选的语言,但在同样多的情况下,Python的这些特性反而成为了不利因素。生产环境就是一个典型的例子 - 在这个需要低延迟和严格部署要求的领域中,C++往往是首选语言。以下示例将概述PyTorch提供的路径,说明如何将现有的Python模型转换为可序列化的表示形式,使其能够在Triton推理服务器等纯C++环境中加载和执行,无需依赖Python。
设置
- 确保已安装KServe
- 为
nvcr.io
跳过标签解析,因为解析triton推理服务器镜像摘要需要认证
- 增加进度截止时间,因为拉取triton镜像和大型bert模型可能超过默认的120秒超时时间,此设置需要knative 0.15.0+版本
导出为Torchscript模型
从Python到C++的PyTorch模型转换过程是通过Torch Script实现的,这是一种可以被Torch Script编译器理解、编译和序列化的PyTorch模型表示形式。如果你从使用原生
eager
API编写的现有PyTorch模型开始,首先必须将模型转换为Torch Script。通过追踪转换上述模型并将脚本模块序列化到文件中
将训练好的模型存储在云存储的模型仓库中
一旦模型被导出为
TorchScript
模型文件,下一步就是将模型上传到GCS存储桶。Triton支持加载多个模型,因此它需要存储桶中的模型仓库遵循特定的布局要求。例如,在你的模型仓库存储桶
gs://kfserving-examples/models/torchscript
中,布局可以是config.pbtxt定义了提供模型所需和可选信息的配置。最基本的模型配置必须指定名称、平台、最大批处理大小、输入和输出。由于TorchScript模型中输入和输出没有名称,配置中输入和输出的
name
属性必须遵循特定的命名约定,即"__"。其中可以是任何字符串,指的是相应输入/输出的位置。这意味着如果有两个输入和两个输出,它们必须命名为:INPUT__0
、INPUT__1
和OUTPUT__0
、OUTPUT__1
,其中INPUT__0
指第一个输入,INPUT__1指第二个输入,以此类推。instance_group
提供模型的多个实例,以便可以同时处理该模型的多个推理请求。要在GPU上调度模型,您需要将
instance_group
更改为GPU类型更多详细信息,请参考triton模型配置。
使用HTTP端点进行推理
创建推理服务
使用上述指定的模型仓库URI创建推理服务yaml。
警告
设置OMP_NUM_THREADS或MKL_NUM_THREADS环境变量对性能至关重要,这些环境变量用于控制TorchScript模型推理的内部运算并行度,CPU线程数默认为CPU核心数。请参考CPU线程处理和TorchScript推理了解更多详情。
kubectl
预期输出
使用curl进行预测
最新的Triton推理服务器已切换到使用KServe预测V2协议,因此输入请求需要遵循V2模式,并指定数据类型和形状。
预期输出
运行性能测试
QPS速率
--rate
可以在perf.yaml中进行修改。使用gRPC端点进行推理
创建推理服务
创建推理服务yaml并暴露gRPC端口,目前只允许暴露一个端口,可以是HTTP或gRPC端口,默认暴露HTTP端口。
应用gRPC
InferenceService
yaml后,当InferenceService
就绪时,您就可以使用tritonclient
Python库调用模型。使用grpcurl进行预测
gRPC API遵循KServe预测V2协议。
例如,可以使用
ServerReady
API检查服务器是否就绪:预期输出
ModelInfer
API接受遵循grpc_predict_v2.proto
文件中定义的ModelInferRequest
架构的输入。注意,这个输入文件与之前curl
示例中使用的不同。预期输出
输出张量的内容被编码在
rawOutputContents
字段中。它可以被base64
解码并根据给定的数据类型和形状加载到Numpy数组中。另外,Triton还提供了Python客户端库,其中包含许多示例,展示了如何与KServe V2 gRPC协议进行交互。
为推理服务添加转换器
Triton Inference Server
需要张量作为输入数据,当用户发送原始格式的请求时,在进行预测调用之前通常需要预处理步骤。转换器组件可以在推理服务规范中指定,用于用户实现的预处理/后处理代码。用户负责创建一个继承自KServe Model
基类的Python类,该类实现preprocess
处理程序,将原始输入格式根据V2预测协议转换为张量格式,postprocess
处理程序用于将原始预测响应转换为更友好的响应格式。实现预处理/后处理函数
image_transformer_v2.py
请在此处查看代码示例和Dockerfile。
构建转换器Docker镜像
创建带有转换器的推理服务
请使用YAML文件创建推理服务,该文件添加了使用上述构建的Docker镜像的图像转换器组件。
预期输出
使用curl进行预测
转换器不像预测器那样强制执行特定的模式,但一般建议以对象列表(字典)的形式发送:
"instances": <value>|<list-of-objects>
预期输出
上一篇
模型推理运行时-AMD
下一篇
模型推理运行时-Triton-Tensorflow
Loading...