0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

NVIDIA Triton 系列文章(11):模型类别与调度器-1

NVIDIA英伟达企业解决方案 来源:未知 2023-01-11 06:35 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

在 Triton 推理服务器的使用中,模型(model)类别与调度器(scheduler)、批量处理器(batcher)类型的搭配,是整个管理机制中最重要的环节,三者之间根据实际计算资源与使用场景的要求去进行调配,这是整个 Triton 服务器中比较复杂的部分。

在模型类别中有“无状态(stateless)”“有状态(stateful)”“集成(ensemble)”三种,调度器方面则有“标准调度器(default scheduler)”“集成调度器(ensemble scheduler)”两种,而标准调度器下面还有“动态批量处理器(dynamic batcher)”“序列批量处理器(sequence batcher)”两种批量处理器。

模型类别与调度器/批量处理器之间存在一些关联性,以下整理出一个简单的配合表格,提供大家参考:

类别

调度器

批量处理器

使用场景

无状态

标准调度器

动态批量处理器

面向各自独立的推理模型

有状态

标准调度器

序列批量处理器

处理存在交互关系的推理模型组

集成

集成调度器

创建复杂的工作流水线

接下去就要为这几个管理机制的组合进行说明,由于内容较多并且不均衡,特别是“有状态模型”与“集成模型”两部分的使用是相对复杂的,因此这些组合会分为三篇文章来进行较为深入的说明。

1. 无状态(Stateless)模式:

这是 Triton 默认的模型模式,最主要的要求就是“模型所维护的状态不跨越推理请求”,也就是不存在与其他推理请求有任何交互关系,大部分处于最末端的独立推理模型,都适合使用这种模式,例如车牌检测最末端的将图像识别成符号的推理、为车辆识别颜色/种类/厂牌的图像分类等,还有 RNN 以及具有内部内存的类似模型,也可以是无状态的。

2. 有状态(Stateful)模式:

很多提供云服务的系统,需要具备同时接受多个推理请求去形成一系列推理的能力,这些推理必须路由到某些特定模型实例中,以便正确更新模型维护的状态。此外,该模型可能要求推理服务器提供控制信号,例如指示序列的开始和结束。

Triton 服务器提供动态(dynamic)与序列(sequence)两种批量处理器(batcher),其中序列批量处理器必须用于这种有状态模式,因为序列中的所有推理请求都被路由到同一个模型实例,以便模型能够正确地维护状态。

序列批量处理程序还需要与模型相互传递信息,以指示序列的开始、结束、具有可执行推理请求的时间,以及序列的关联编号(ID)。当对有状态模型进行推理请求时,客户端应用程序必须为序列中的所有请求提供相同的关联编号,并且还必须标记序列的开始和结束。

下面是这种模式的控制行为有“控制输入”“隐式状态管理”“调度策略”三个部分,本文后面先说明控制输入的内容,另外两个部分在下篇文章内讲解。

(1) 控制输入(control inputs)

为了使有状态模型能够与序列批处理程序一起正确运行,模型通常必须接受 Triton 用于与模型通信的一个或多个控制输入张量。

模型配置的sequence_batching里的control_input部分,指示模型如何公开序列批处理程序应用于这些控件的张量。所有控件都是可选的,下面是模型配置的一部分,显示了所有可用控制信号的示例配置:

05204e62-9136-11ed-bfe3-dac502259ad0.png

  • 开始(start):

这个输入张量在配置中使用“CONTROL_SEQUENCE_START”指定,上面配置表明模型有一个名为“START”的输入张量,其数据类型为 32 位浮点数,序列批量处理程序将在对模型执行推理时定义此张量。

START 输入张量必须是一维的,大小等于批量大小,张量中的每个元素指示相应批槽中的序列是否开始。上面配置中“fp32_false_true”表示,当张量元素等于 0 时为“false(不开始)”、等于 1 时为“ture(开始)”

  • 结束(End):

结束输入张量在配置中使用“CONTROL_SEQUENCE_END”指定,上面配置表明模型有一个名为“END”的输入张量,具有 32 位浮点数据类型,序列批处理程序将在对模型执行推理时定义此张量。

END 输入张量必须是一维的,大小等于批量大小,张量中的每个元素指示相应批槽中的序列是否开始。上面配置中“fp32_false_true”表示,当张量元素等于 0 时为“false(不结束)”、等于 1 时为“ture(结束)”。

  • 准备就绪(Ready):

就绪输入张量在配置中使用“CONTROL_SEQUENCE_READY”指定,上面配置表明模型有一个名为“READY”的输入张量,其数据类型为 32 位浮点数,序列批处理程序将在对模型执行推理时定义此张量。

READY 输入张量必须是一维的,大小等于批量大小,张量中的每个元素指示相应批槽中的序列是否开始。上面配置中“fp32_false_true”表示,当张量元素等于 0 时为“false(未就绪)”、等于1时为“ture(就绪)”。

  • 关联编号(Correlation ID):

关联编号输入张量在配置中使用“CONTROL_SEQUENCE_CORRID”指定,上面置表明模型有一个名为“CORRID”的输入张量,其数据类型为无符号 64 位整数,序列批处理程序将在对模型执行推理时定义此张量。

CORRID 张量必须是一维的,大小等于批量大小,张量中的每个元素表示相应批槽中序列的相关编号。

(2) 隐式状态管理(implicit State Management)

这种方式允许有状态模型将其状态存储在 Triton 服务器中。当使用隐式状态时,有状态模型不需要在模型内部存储推理所需的状态。不过隐式状态管理需要后端(backend)支持。目前只有 onnxruntime_backend 和 tensorrt_backend 支持隐式状态。

下面是模型配置的一部分,在sequence_batching配置中的 state 部分,就是用于指示该模型正在使用隐式状态:

sequence_batching {
  state  [
    {
       input_name: "INPUT_STATE"
       output_name: "OUTPUT_STATE"
       data_type: TYPE_INT32
      dims:  [ -1 ]
    }
  ]
}

这里做简单的说明:

  • 字段说明:

  • input_name 字段:指定将包含输入状态的输入张量的名称;
  • output_name 字段:描述由包含输出状态的模型生成的输出张量的名称;
  • dims 字段:指定状态张量的维度。

  • 执行要点:

  • 序列中第 i 个请求中模型提供的输出状态,将用作第 i+1 个请求中的输入状态;
  • 当 dims 字段包含可变大小的维度时,输入状态和输出状态的尺度不必匹配;
  • 出于调试目的,客户端可以请求输出状态。为了实现这个目的,模型配置的输出部分必须将输出状态(OUTPUT_STATE)列为模型的一个输出;
  • 由于需要传输额外的张量,从客户端请求输出状态可能会增加请求延迟。

默认情况下,序列中的启动请求包含输入状态的未初始化数据。模型可以使用请求中的开始标志来检测新序列的开始,并通过在模型输出中提供初始状态来初始化模型状态,如果模型状态描述中的 dims 部分包含可变尺度,则 Triton 在开始请求时将每个可变尺寸设置为“1”。对于序列中的其他非启动请求,输入状态是序列中前一个请求的输出状态。

对于状态初的初始化部分,有以下两种状况需要调整:

  • 启动请求时:则模型将“OUTPUT_STATE”设置为等于“INPUT”张量;

  • 非启动请求时:将“OUTPUT_STATE”设为“INPUT”和“INPUT_STATE”张量之和。

除了上面讨论的默认状态初始化之外,Triton 还提供了“从 0 开始”与“从文件导入”两种初始化状态的机制。下面提供两种初始化的配置示例:

052f0830-9136-11ed-bfe3-dac502259ad0.png

两个配置只有粗体部分不一样,其余内容都是相同的,提供读者做个参考。

以上是关于有状态模型的“控制输入”与“隐式状态管理”的使用方式,剩下的“调度策略”部分,会在后文中提供完整的说明。


原文标题:NVIDIA Triton 系列文章(11):模型类别与调度器-1

文章出处:【微信公众号:NVIDIA英伟达企业解决方案】欢迎添加关注!文章转载请注明出处。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 英伟达
    +关注

    关注

    23

    文章

    4040

    浏览量

    97674

原文标题:NVIDIA Triton 系列文章(11):模型类别与调度器-1

文章出处:【微信号:NVIDIA-Enterprise,微信公众号:NVIDIA英伟达企业解决方案】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    面向科学仿真的开放模型系列NVIDIA Apollo正式发布

    用于加速工业和计算工程的开放模型系列 NVIDIA Apollo 于近日举行的 SC25 大会上正式发布。
    的头像 发表于 11-25 11:15 2.4w次阅读

    NVIDIA Nemotron Nano 2推理模型发布

    NVIDIA 正式推出准确、高效的混合 Mamba-Transformer 推理模型系列 NVIDIA Nemotron Nano 2。
    的头像 发表于 08-27 12:45 1404次阅读
    <b class='flag-5'>NVIDIA</b> Nemotron Nano 2推理<b class='flag-5'>模型</b>发布

    如何本地部署NVIDIA Cosmos Reason-1-7B模型

    近日,NVIDIA 开源其物理 AI 平台 NVIDIA Cosmos 中的关键模型——NVIDIA Cosmos Reason-1-7B。
    的头像 发表于 07-09 10:17 562次阅读

    使用NVIDIA Triton和TensorRT-LLM部署TTS应用的最佳实践

    针对基于 Diffusion 和 LLM 类别的 TTS 模型NVIDIA Triton 和 TensorRT-LLM 方案能显著提升推理速度。在单张
    的头像 发表于 06-12 15:37 1302次阅读
    使用<b class='flag-5'>NVIDIA</b> <b class='flag-5'>Triton</b>和TensorRT-LLM部署TTS应用的最佳实践

    英伟达GTC25亮点:NVIDIA Dynamo开源库加速并扩展AI推理模型

    Triton 推理服务的后续产品,NVIDIA Dynamo 是一款全新的 AI 推理服务软件,旨在为部署推理 AI 模型的 AI 工厂最大化其 token 收益。它协调并加速数千
    的头像 发表于 03-20 15:03 1077次阅读

    NVIDIA发布全球首个开源人形机器人基础模型Isaac GR00T N1

    NVIDIA 宣布推出一系列全新技术,助力人形机器人开发。其中包括全球首个开源且完全可定制的基础模型NVIDIA Isaac GR00T N1
    的头像 发表于 03-20 14:34 1221次阅读

    Triton编译与GPU编程的结合应用

    Triton编译简介 Triton编译是一种针对并行计算优化的编译,它能够自动将高级语言代码转换为针对特定硬件优化的低级代码。
    的头像 发表于 12-25 09:13 1317次阅读

    Triton编译如何提升编程效率

    开发者能够更快地开发出更高效的软件。 1. 代码优化 1.1 编译时优化 Triton 编译在编译时进行了大量的代码优化。这些优化包括但不限于: 指令选择 :Triton 编译
    的头像 发表于 12-25 09:12 1195次阅读

    Triton编译的优化技巧

    在现代计算环境中,编译的性能对于软件的运行效率至关重要。Triton 编译作为一个先进的编译框架,提供了一系列的优化技术,以确保生成的
    的头像 发表于 12-25 09:09 1837次阅读

    Triton编译的优势与劣势分析

    Triton编译作为一种新兴的深度学习编译,具有一系列显著的优势,同时也存在一些潜在的劣势。以下是对Triton编译
    的头像 发表于 12-25 09:07 1869次阅读

    Triton编译在机器学习中的应用

    1. Triton编译概述 Triton编译NVIDIA
    的头像 发表于 12-24 18:13 1629次阅读

    Triton编译的常见问题解决方案

    Triton编译作为一款专注于深度学习的高性能GPU编程工具,在使用过程中可能会遇到一些常见问题。以下是一些常见问题的解决方案: 一、安装与依赖问题 检查Python版本 Triton编译
    的头像 发表于 12-24 18:04 6413次阅读

    Triton编译支持的编程语言

    Triton编译支持的编程语言主要包括以下几种: 一、主要编程语言 Python :Triton编译通过Python接口提供了对Triton
    的头像 发表于 12-24 17:33 1468次阅读

    Triton编译与其他编译的比较

    Triton编译与其他编译的比较主要体现在以下几个方面: 一、定位与目标 Triton编译 : 定位:专注于深度学习中最核心、最耗时的
    的头像 发表于 12-24 17:25 1592次阅读

    Triton编译功能介绍 Triton编译器使用教程

    Triton 是一个开源的编译前端,它支持多种编程语言,包括 C、C++、Fortran 和 Ada。Triton 旨在提供一个可扩展和可定制的编译框架,允许开发者添加新的编程语言
    的头像 发表于 12-24 17:23 2702次阅读