NVIDIA Triton系列09-为服务器添加模型

news2024/9/24 23:29:28

NVIDIA Triton系列09-为服务器添加模型

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

博客:肆十二-CSDN博客

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

前面已经用 https://github.com/triton-inference-server/server/doc/examples 开源仓的范例资源,创建一个最基础的模型仓以便执行一些基础的用户端范例,现在就要带着读者为模型仓添加新的模型。

在“创建模型仓”的文章里讲解过,Triton 模型仓使用目录结构与相关文件来形成一个模型的基础要素,如下所列:

img

上面的目录结构与模型文件是最基本的材料,处理起来是很容易的,比较复杂的部分是配置文件 config.pbtxt 的内容,里面提供 Triton 服务器用来管理模型执行特性的各项参数,这些设置的内容主要分为静态的基础(minimal)设置项与动态的优化(optimization)设置两大部分,本文内容先针对基础配置项的部分进行说明。

为了说明这些配置内容,这里先以范例模型仓里的 inception_graphdef 模型的配置文件 config.pbtxt 为例,来配合以下的简单说明,比较容易让大家理解详细的内容:

img

每个配置文件里都至少包含以下5个部分:

1. 模型名称:

这部分直接使用存放模型的文件夹名称,因此可以省略,如果要指定的话就必须与文件夹名称一致。

2. 平台/后端名称(Name, Platform and Backend):

这部分必须与模型训练时使用的框架与文件格式相匹配,以下是使用频率较高的种类:

img

至于其他平台/后端的对应名称,就需要根据实际的平台与对应名称进行配置。

3. 模型执行策略(Model Transaction Policy):

这个属性只有一个**“解耦(decoupled)与否”**的选项。使用解耦意味着模型生成的响应的数量可能与发出的请求的数量不同,并且响应可能与请求的顺序无关。

默认值为 false,上面范例中并未列出这个参数的配置值,表示“不启用解耦”功能,意味着该模型将为每个请求生成一个响应。

如果需要启用解耦功能,就在配置文件内添加以下内容:

model_transaction_policy { decoupled: True}

4. 最大批量值(Maximum Batch Size):

Triton 服务器支持多种调度和批处理算法,可以为每个模型独立选择。这个属性表示执行该推理模型计算时的最大批量规模,包括“无状态(stateless)”或“有状态(stateful)”等类型的模型。

这个参数主要配合下面**“输入/输出节点内容”的张量尺度部分,例如本范例中输入节点张量格式为“format: FORMAT_NHWC”,但是下面尺度“dims: [ 299, 299, 3 ]”的三个数值是对应到“HWC(高/宽/通道)”,缺少“批量值(N)”**的部分,这正是这个“最大批量值”为输入节点与输出节点所配置的数值,这样 Triton 可以使用动态批处理器或序列批处理器自动对模型进行批处理。

在这种情况下,max_batch_size 应设置为大于或等于1的值,表示应与该模型一起使用的最大批次大小;对于不支持批处理或不支持以上述特定方式进行批处理的推理模型,则将 max_batch_size 设置为 0。

5. 输入节点与输出节点(Inputs and Outputs):

每个推理模型都有至少一个输入节点与输出节点,这部分的内容必须配合模型的内容,不能自己随便定义。

要添加新的推理模型时,推荐使用 Netron 工具查看模型的网络结构,只要在浏览器上输入“netron.app”后打开模型文件就可以。目前经过测试,Netron.APP 工具能查看 ONNX、TensorFlow/graphdef、Pytorch 等模型文件的网络结构,相当方便。

下图是 model_repository/inception_graphdef/1/model.graphdef 模型文件所能看到的输入/输出节点的内容:

img

每个节点都包含**“名称”“数据类型”“尺度(shape)”**三个部分,现在就进一步说明:

(1) 节点名称(name):

上图最左边的输入节点在整个网络结构的最上方,名称为“input”;中间输出节点在网络结构最下方,点选“softmax”节点会出现右边灰色信息块,显示其完整名称为“InceptionV3/Predictions/Softmax”。现在对照模型的 config.pbtxt 里对应内容,是必须能匹配的,否则启动 Triton 服务器时会出现错误。

不过这个环节里对 PyTorch 模型需要特殊的处理,由于 TorchScript 模型文件中输入/输出的元数据不足,配置中输入/输出的“名称属性”必须遵循以下特定的命名约定:

使用张量字典(Dictionary of Tensor):

Triton 服务器的 PyTorch 后端支持以张量字典的形式将输入传递给模型,例如模型有如下的张量字典内容:

{‘A’: tensor1, ‘B’: tensor2}

输入的名称映射到该特定张量的字符串“key”值,例如“A”或“B”,其中输入“A”是指对应于 tensor1 的值、“B”是指对应于 tensor2 的值。

映射到 forward() 函数的输入值:

当输入节点名称不在张量字典内,就使用 TorchScript 模型里所定义的 forward() 函数输入值。例如函数定义为“forward(self, input0, input1)”时,则两个输入节点的名称分别对应为“input0”与“input1”。

使用_格式:

这里的可以是任何字符串、则对应到输入或输出顺序的整数,例如模型有两个输入节点与两个输出节点时,可以用“INPUT_0”与“INPUT_1”代表两个输入节点、用“OUTPUT_0”与“OUTPUT_1”代表两个输出节点。

如果所有输入(或输出)不遵循相同的命名约定,那么我们从模型配置中强制执行严格排序,即我们假设配置中输入(或输出)的顺序是这些输入的真实顺序。

(2) 数据类型(data_type):

输入和输出张量所允许的数据类型因模型类型而异,数据类型部分描述了允许的数据类型以及它们如何映射到每个模型类型的数据类型。

下表显示了 Triton 支持的张量数据类型:

img

第 1 列显示模型配置文件中显示的数据类型的名称;

第 2~5 列显示了支持的模型框架的相应数据类型,如果模型框架没有给定数据类型的条目,则 Triton 不支持该模型的数据类型;

第 6 列为“API”,显示 TRITONSERVER C API、TRITONBACKEND C API、HTTP/REST 协议和 GRPC 协议的对应数据类型;

第 7 列显示 Python numpy 库的对应数据类型。

以上是关于模型数据类型的部分。

(3) 张量尺度(dims):

这里提供的张量尺度内容是去除第一个 batch_size 的部分,因此需要与前面设定的 max_batch_size 组合形成完整的张量尺度。

输入节点的张量尺度(如“dims: [ 299, 299, 3 ]”),表示模型和 Triton 在推理请求中预期的张量尺寸;输出节点的张量尺度(如“dims: [ 1001 ]”),表示模型生成的输出张量的形状,并由 Triton 服务器响应推断请求返回。

输入和输出尺度内的值都必须大于或等于 1,也就是不允许使用[]空尺度,节点的尺度由 max_batch_size 和输入或输出 dims 属性指定的维度的组合指定。

max_batch_size > 0时:整个尺度的形式为[-1, dims]。

max_batch_size = 0时:整个形状形成为[ dims]。

例如本文范例中输入节点的尺度为“dims: [ 299, 299, 3 ]”、max_batch_size=128,则张量尺度的完整表达为“[ -1, 299, 299, 3]”;如果 max_batch_size=0 时,则张量尺度的完整表达为“[ 299, 299, 3]”。

6. 版本策略(version_policy):

每个模型可以有一个或多个版本,模型配置的 ModelVersionPolicy 属性用于设置以下策略之一。

img

如果未指定版本策略,则使用最新版本(n=1)作为默认值,表示 Triton 仅提供最新版本的模型。在所有情况下,从模型存储库中添加或删除版本子目录都可以更改后续推理请求中使用的模型版本。

以上是完成一个 config.pbtxt 模型配置文件的最基础内容,大部分内容都比较直观,除了最后面的张量尺度会有比较多的变化之外,不过只要逐渐熟悉推理运作的过程之后,就能更进一步掌握与 batch_size 相关的应用与调试方式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1993181.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于python的百度迁徙迁入、迁出数据分析(七)

参考:【Python】基于Python的百度迁徙2——迁徙规模指数(附代码)-CSDN博客 记录于2024年8月,这篇是获取百度迁徙指数,之前我们都在讨论不同城市的迁徙比例关系,这篇我们来获取百度迁徙指数这个数据&#x…

大学新生入门编程的最佳路径:嵌入式领域的深入探索

对于大学新生来说,编程已成为一项必不可少的技能。面对众多编程语言和学习资源,新生们常常感到迷茫。如何选择适合自己的编程语言?如何制定有效的学习计划?如何避免常见的学习陷阱?本文将为你提供嵌入式领域的编程入门…

测试工具之JMeter

JMeter Apache JMeter应用程序是开源软件,是一个100%纯Java应用程序,旨在负载测试功能行为和衡量性能。它最初是为测试Web应用程序而设计的,但后来扩展到其他测试功能。 JMeter是一个免费、开源、跨平台的性能测试工具,于20世纪90年代后期面世。这是一个成熟、健全且具有…

开源一套金融大模型插件(ChatGPT)

shares vscode 插件A 股量化交易系统自研金融大模型,复利Chat 源码地址: https://github.com/xxjwxc/shares

NPDP考前怎么复习?NPDP200问PDF版来啦~

距离NPDP下半年考试还有4个月的时间,现在正是备考的黄金期。 以下复习建议~ 01.制定详细计划 首先,根据考试大纲,可以将内容划分为几个模块,如新产品开发流程、市场研究、产品规划等,并为每个模块设定学习目标和时间…

C语言 | Leetcode C语言题解之第328题奇偶链表

题目: 题解: struct ListNode* oddEvenList(struct ListNode* head) {if (head NULL) {return head;}struct ListNode* evenHead head->next;struct ListNode* odd head;struct ListNode* even evenHead;while (even ! NULL && even->…

`【《Spark SQL 深度探索:内置函数、数据源处理与自定义函数实践》】

前言: 💞💞大家好,我是书生♡,本阶段和大家一起分享和探索大数据技术Spark—SparkSQL,本篇文章主要讲述了:Spark SQL 深度探索:内置函数、数据源处理与自定义函数实践等等。欢迎大家…

Netty技术全解析:MessageToMessageCodec类深度解析

❃博主首页 &#xff1a; 「码到三十五」 &#xff0c;同名公众号 :「码到三十五」&#xff0c;wx号 : 「liwu0213」 ☠博主专栏 &#xff1a; <mysql高手> <elasticsearch高手> <源码解读> <java核心> <面试攻关> ♝博主的话 &#xff1a…

有序数组的平方(LeetCode)

题目 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 解题 以下算法时间复杂度为 def sortedSquares(nums):n len(nums)result [0] * n # 创建一个结果数组&#xff0c;长度与 nums 相同le…

【wiki知识库】08.添加用户登录功能--前端Vue部分修改

&#x1f34a; 编程有易不绕弯&#xff0c;成长之路不孤单&#xff01; 目录 &#x1f34a; 编程有易不绕弯&#xff0c;成长之路不孤单&#xff01; 一、今日目标 二、前端Vue模块的修改 2.1 the-header组件 2.2 store工具 2.3 router路由配置修改 一、今日目标 上篇文章…

河南萌新联赛2024第(四)场:河南理工大学

河南萌新联赛2024第&#xff08;四&#xff09;场&#xff1a;河南理工大学 2024.8.7 13:00————17:00 过题数5/12 补题数8/12 该出奇兵了 小雷的神奇电脑 岗位分配 简单的素数 AND 小雷的算式 循环字符串 聪明且狡猾的恶魔 马拉松 尖塔第四强的高手 比赛 抓字符 B - 小雷…

企业如何选择靠谱的第三方软件测试机构?

第三方软件测试机构是专门提供软件测试服务的第三方检测机构&#xff0c;旨在对软件的功能、性能、安全性等方面进行系统评估&#xff0c;确保其满足设定的标准和需求。这些机构通常拥有丰富的行业经验和专业资质&#xff0c;可以为企业提供包括项目验收测试、软件确认测试、安…

贪吃蛇之地图的绘制

首先我们要知道地图位置大体是怎么样的 绘出一个大概的地图 设置了2020的方格 源码在这里 #include<curses.h>void initNcurse() {initscr();keypad(stdscr,1); }void gamePic() {int hang;int lie;for(hang0;hang<20;hang){if(hang0){for(lie0;lie<20;lie){pr…

开通期权分仓账户需要多少资金?

在金融衍生品市场&#xff0c;期权分仓账户犹如一艘精巧的帆船&#xff0c;承载着投资者的智慧与梦想&#xff0c;驶向财富的彼岸。然而&#xff0c;每一艘帆船的启航&#xff0c;都需备足风帆与给养&#xff0c;即那开启航程所必需的资金之舟&#xff0c;下文为大家介绍开通期…

【C语言基础习题】C语言练习题——bite 寒假班作业(6)【未完成】

编程小白如何成为大神?大学新生的最佳入门攻略 编程已成为当代大学生的必备技能,但面对众多编程语言和学习资源,新生们常常感到迷茫。如何选择适合自己的编程语言?如何制定有效的学习计划?如何避免常见的学习陷阱?让我们一起探讨大学新生入门编程的最佳路径,为你的大学…

【进阶篇-Day14:JAVA中IO流之转换流、序列化流、打印流、Properties集合的介绍】

目录 1、转换流1.1 转换流分类&#xff1a;1.2 转换流的作用&#xff08;1&#xff09;按照指定的字符编码读写操作&#xff1a;&#xff08;2&#xff09;将字节流转换为字符流进行操作&#xff1a; 2、序列化流2.1 序列化的基本使用&#xff1a;2.2 序列化的操作流程&#xf…

《Token-Label Alignment for Vision Transformers》ICCV2023

摘要 这篇论文探讨了数据混合策略&#xff08;例如CutMix&#xff09;在提高卷积神经网络&#xff08;CNNs&#xff09;性能方面的有效性&#xff0c;并指出这些策略在视觉Transformer&#xff08;ViTs&#xff09;上同样有效。然而&#xff0c;发现了一个“token fluctuation…

mp3音频怎么压缩小一点?音频压缩的6个简单方法

在日常的数字生活中&#xff0c;MP3音频文件凭借其广泛的兼容性和相对较高的音质&#xff0c;已然成为了连接音乐创作者与听众之间不可或缺的桥梁。从个人音乐收藏到社交媒体分享&#xff0c;再到专业音频项目的交付&#xff0c;MP3格式以其便捷性占据了重要地位。然而&#xf…

MLP:全连接神经网络的并行执行

目录 MLP:全连接神经网络的并行执行 假设 代码解释 注意事项 MLP:全连接神经网络的并行执行 为了继续解释这段代码,我们需要做一些假设和补充,因为原始代码片段中DummyModel、Shard和mx.array的具体实现没有给出。不过,基于常见的编程模式和深度学习框架的惯例,我们…

【Linux网络】Linux网络初探:开启网络世界的大门

W...Y的主页 &#x1f60a; 代码仓库分享&#x1f495; 前言&#xff1a;我们已经系统的学习了Linux的基本操作、进程、线程、文件、通信等待&#xff0c;但是在如今社会没有网络通信方式是万万不行的&#xff0c;今天我们就走进网络中&#xff0c;系统的学习一下有关Linux网…