NVIDIA Triton系列12-模型与调度器2

简介: 本文介绍了NVIDIA Triton服务器的“集成推理”功能,涵盖“集成模型”与“集成调度器”两部分,通过示例说明了如何构建一个包含图像预处理、分类和语义分割的推理流水线,强调了模型间数据张量的连接与处理,以及配置集成模型和调度器的具体步骤。

NVIDIA Triton系列12-模型与调度器2

B站:肆十二-的个人空间-肆十二-个人主页-哔哩哔哩视频 (bilibili.com)

博客:肆十二-CSDN博客

问答:(10 封私信 / 72 条消息) 肆十二 - 知乎 (zhihu.com)

前面两篇文章,已经将 Triton 的“无状态模型”、“有状态模型”与标准调度器的动态批量处理器与序列批量处理器的使用方式,做了较完整的说明。

大部分的实际应用都不是单纯的推理模型就能完成服务的需求,需要形成前后关系的工作流水线。例如一个二维码扫描的应用,除了需要第一关的二维码识别模型之外,后面可能还得将识别出来的字符传递给语句识别的推理模型、关键字搜索引擎等功能,最后找到用户所需要的信息,反馈给提出需求的用户端。

本文的内容要说明 Triton 服务器形成工作流水线的“集成推理”功能,里面包括“集成模型(ensemble model)”“集成调度器(ensemble scheduler)”两个部分。下面是个简单的推理流水线示意图,目的是对请求的输入图像最终反馈“图像分类”与“语义分割”两个推理结果:

img

当接收到集成模型的推断请求时,集成调度器将:

确认请求中的“IMAGE”张量映射到预处理模型中的输入“RAW_IMAGE”。

检查集合中的模型,并向预处理模型发送内部请求,因为所需的所有输入张量都已就绪。

识别内部请求的完成,收集输出张量并将内容映射到“预处理图像”,这是集成中已知的唯一名称。

将新收集的张量映射到集合中模型的输入。在这种情况下,“classification_model”和“segmentation_model”的输入将被映射并标记为就绪。

检查需要新收集的张量的模型,并向输入就绪的模型发送内部请求,在本例中是分类模型和分割模型。请注意,响应将根据各个模型的负载和计算时间以任意顺序排列。

重复步骤 3-5,直到不再发送内部请求,然后用集成输出名称的张量去响应推理请求。

整个流水线使用 3 个模型,并进行以下三个处理步骤:

使用 image_prepoecess_model 模型,将原始图像处理成preprocessed_image 数据;

将 preprocessed_image 数据传递给 classification_model 模型,执行图像分类推理,最终返回“CLASSIFICATION”结果;

将 preprocessed_image 数据传递给 segmentation_model 模型,执行语义分割推理计算,最终返回“SEGMENTATION”结果;

在执行过程中,推理服务器必须支持以下的功能,才能将多种推理模型集成一个或多个工作流水线,去执行完整的工作流程:

支持一个或多个模型的流水线以及这些模型之间输入和输出张量的连接;

处理多个模型的模型拼接或数据流,例如“数据处理->推理->数据后处理”等;

收集每个步骤中的输出张量,并根据规范将其作为其他步骤的输入张量;

所集成的模型能继承所涉及模型的特征,在请求方的元数据必须符合集成中的模型;

为了实现的推理流水线功能,Triton 服务器使用集成模型与集成调度器的配合,来完成这类工作流水线的搭建管理。接着就执行以下步骤来创建一个流水线所需要的配套内容:

在模型仓里为流水线创建一个新的“组合模型”文件夹,例如为“ensemble_model”;

在目路下创建新的 config.pbtxt,并且使用“platform: "ensemble"”来定义这个模型要执行集成功能;

定义集成模型:

无论工作流水线中调用多少个模型,Triton 服务器都将这样的组合视为一个模型,与其他模型配置一样,需要定义输入与输出节点的张量类型与尺度。

以上面示例图中的要求,这个集成模型有一个名为“IMAGE”的输入节,与两个名为“CLASSIFICATION”“SEGMENTATION”的输出节点,至于数据类型与张量维度内容,就得根据实际使用的模型去匹配。这部分配置的参考内容如下:

name: "ensemble_model"platform: "ensemble"max_batch_size: 1input [ { name: "IMAGE" data_type: TYPE_STRING dims: [ 1 ] }]output [ { name: "CLASSIFICATION" data_type: TYPE_FP32 dims: [ 1000 ] }, { name: "SEGMENTATION" data_type: TYPE_FP32 dims: [ 3, 224, 224 ] }]

从这个内容中可以看出,Triton 服务器将这个集成模型视为一个独立模型。

  1. 定义模型的集成调度器:

这部分使用“ensemble_scheduling”来调动集成调度器,将使用到模型与数据形成完整的交互关系。

在上面示例图中,灰色区块所形成的工作流水线中,使用到 image_prepoecess_modelclassification_modelsegmentation_model 三个模型,以及 preprocessed_image 数据在模型中进行传递。

下面提供这部分的范例配置内容,一开始使用“ensemble_scheduling”来调用集成调度器,里面再用“step”来定义模组之间的执行关系,透过模型的“input_map”“output_map”“key:value”对的方式,串联起模型之间的交互动作:

ensemble_scheduling { step [ { model_name: "image_preprocess_model" model_version: -1 input_map { key: "RAW_IMAGE" value: "IMAGE" } output_map { key: "PREPROCESSED_OUTPUT" value: "preprocessed_image" } }, { model_name: "classification_model" model_version: -1 input_map { key: "FORMATTED_IMAGE" value: "preprocessed_image" } output_map { key: "CLASSIFICATION_OUTPUT" value: "CLASSIFICATION" } }, { model_name: "segmentation_model" model_version: -1 input_map { key: "FORMATTED_IMAGE" value: "preprocessed_image" } output_map { key: "SEGMENTATION_OUTPUT" value: "SEGMENTATION" } } ]}

这里简单说明一下工作流程:

(1) 模型 image_preprocess_model 接收外部输入的 IMAGE 数据,进行图像预处理任务,输出 preprocessed_image 数据;

(2) 模型 classification_model 的输入为 preprocessed_image,表示这个模型的工作是在 image_preprocess_model 之后的任务,执行的推理输出为 CLASSIFICATION;

(3) 模型 segmentation_model 的输入为 preprocessed_image,表示这个模型的工作是在 image_preprocess_model 之后的任务,执行的退输出为 SEGMENTATION;

(4) 上面两步骤可以看出 classification_model 与 segmentation_model 属于分支的同级模型,与上面工作流图中的要求一致。

完成以上的步骤,就能用集成模型与集成调度器的搭配,来创建一个完整的推理工作流任务,相当简单。

不过这类集成模型中,还有以下几个需要注意的重点:

这是 Triton 服务器用来执行用户定义模型流水线的抽象形式,由于没有与集成模型关联的物理实例,因此不能为其指定 instance_group 字段;

不过集成模型内容所组成的个别模型(例如image_preprocess_model),可以在其配置文件中指定 instance_group,并在集成接收到多个请求时单独支持并行执行。

由于集成模型将继承所涉及模型的特性,因此在请求起点的元数据(本例为“IMAGE”)必须符合集成中的模型,如果其中一个模型是有状态模型,那么集成模型的推理请求应该包含有状态模型中提到的信息,这些信息将由调度器提供给有状态模型。

总的来说,Triton 服务器提供的集成功能还是相对容易理解与操作的,只要大家留意模型之间所传递的数据张量格式与尺度,就能轻松搭建起这样的推理工作流,去面对实际环境中更多变的使用需求。

目录
相关文章
|
并行计算 C++ 异构计算
Nvidia 并行计算架构 CUDA 分析(一)——CUDA 简介
    CUDA(Compute Unified Device Architecture,统一计算设备架构)是由 NVIDIA 推出的通用并行计算架构,该架构使 GPU 能够解决复杂的计算问题。
4996 0
|
1月前
|
存储 并行计算 C++
NVIDIA Triton系列08-用户端其他特性
本文详细解析了NVIDIA Triton开源项目的image_client.py示例代码,涵盖指定通信协议(HTTP与gRPC)、调用异步模式与数据流处理、以及使用共享内存等核心功能,为开发者提供撰写Triton用户端应用的指导。通过具体代码示例,帮助读者理解如何高效利用Triton服务器进行模型推理。
49 1
NVIDIA Triton系列08-用户端其他特性
|
1月前
|
Kubernetes 调度 算法框架/工具
NVIDIA Triton系列02-功能与架构简介
本文介绍了NVIDIA Triton推理服务器的功能与架构,强调其不仅适用于大型服务类应用,还能广泛应用于各类推理场景。Triton支持多种模型格式、查询类型和部署方式,具备高效的模型管理和优化能力,确保高性能和系统稳定性。文章详细解析了Triton的主从架构,包括模型仓库、客户端应用、通信协议和推理服务器的核心功能模块。
75 1
NVIDIA Triton系列02-功能与架构简介
|
1月前
|
调度 异构计算
NVIDIA Triton系列10-模型并发执行
NVIDIA Triton服务器支持模型并发执行,通过在单个或多个GPU上同时运行多个模型实例,提高计算资源利用率和性能。配置`instance_group`可调整每个模型的并发实例数,优化推理效率。此外,通过设置资源限制和优先级,确保在有限的计算资源下实现高效的任务调度。
54 0
NVIDIA Triton系列10-模型并发执行
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
NVIDIA Triton系列13-用 FasterTransformer 和 Triton 加速大型 Transformer 模型的推理
本文介绍了 NVIDIA FasterTransformer 库及其在加速大型 Transformer 模型推理中的应用。FasterTransformer 是一个高效、可扩展的库,支持分布式多 GPU 推理,特别适合处理具有数万亿参数的模型。文章还详细讲解了如何使用 FasterTransformer 和 NVIDIA Triton 推理服务器优化 GPT-J 和 T5 模型的推理性能,包括张量并行、流水线并行等技术。
66 0
NVIDIA Triton系列13-用 FasterTransformer 和 Triton 加速大型 Transformer 模型的推理
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
NVIDIA Triton系列03-开发资源说明
NVIDIA Triton 推理服务器是用于高效部署机器学习模型的开源工具。本文介绍了初学者如何通过官方文档和 GitHub 开源仓库获取开发资源,包括快速启动指南、生产文档、示例和反馈渠道。特别强调了核心仓库中的六个重要部分,涵盖服务器部署、核心功能、后端支持、客户端接口、模型分析和模型导航工具。这些资源有助于初学者全面了解和掌握 Triton 项目。
46 0
NVIDIA Triton系列03-开发资源说明
|
1月前
|
存储 机器学习/深度学习 调度
NVIDIA Triton系列11-模型类别与调度器-1
NVIDIA Triton推理服务器中,模型类别与调度器、批量处理器的搭配是管理机制的核心。本文介绍了无状态、有状态和集成模型,以及标准调度器和集成调度器,详细解释了有状态模型的控制输入和隐式状态管理,帮助理解 Triton 的复杂管理机制。
41 0
|
1月前
|
存储 PyTorch API
NVIDIA Triton系列09-为服务器添加模型
本文介绍了如何为NVIDIA Triton模型仓库添加新模型。通过示例模型`inception_graphdef`的配置文件`config.pbtxt`,详细解释了模型名称、平台/后端名称、模型执行策略、最大批量值、输入输出节点及版本策略等配置项。内容涵盖了模型的基本要素和配置细节,帮助读者更好地理解和使用Triton服务器。
35 0
|
1月前
|
存储 机器学习/深度学习 TensorFlow
NVIDIA Triton系列04-创建模型仓
Triton推理模型仓库是NVIDIA Triton推理服务器的基础组件,用于组织和管理模型及其相关资源。本文介绍如何创建模型仓库,包括目录结构、文件内容及配置方法,适用于本地和云端环境。通过在NVIDIA Jetson AGX Orin平台上实践,帮助读者快速上手。
25 0
|
3月前
|
并行计算 PyTorch 算法框架/工具
【Pytorch】查看GPU是否可用
本文提供了使用PyTorch检查GPU是否可用的方法,包括查看PyTorch版本、编译时使用的CUDA版本以及当前CUDA是否可用于PyTorch。
370 2
下一篇
无影云桌面