01 Triton backend

1 整体架构

三部分组成:

  1. Triton backend

tensorRT_backend、onnx_backend、tfs_backend、torch_backend

  1. **Triton model **

不同的模型

  1. **Triton model instance **

模型实例
![P2}5X%2ULV(2OAC$_`OKOP.png

2 设计思路

image.png
需要实现七个接口:

  1. TRITONBACKEND_Initialize
    • 初始化 Triton backend。
  2. TRITONBACKEND_ModelInitialize
    • 初始化模型配置,包括在 model.config 中指定的配置。
  3. TRITONBACKEND_ModelInstanceInitialize
    • 初始化模型实例,指定模型在哪个 GPU 上执行。
  4. TRITONBACKEND_ModelInstanceExecute
    • 执行模型。

剩下的三个 TRITONBACKEND_ModelFinalizeTRITONBACKEND_ModelInstanceFinalizeTRITONBACKEND_Finalize 负责清理工作,不需要关注。
image.png
重点是TRITONBACKEND_ModelInstanceExecute,其成员变量ModelState、ModelInstanceState负责实际的模型执行,其具有两方面作用:

  1. 维护状态
  • ModelState:
    • 维护模型配置信息,例如模型名称、模型输入输出信息、batching size等。
  • ModelInstanceState:
    • 记录模型在哪个机器上运行。
  1. 模型执行
  • modelState:
    • 加载模型。
  • modelInstanceState:
    • 模型执行。

3 源码分析

七个接口+两个具体执行类

企业微信截图_fd45dbcc-d4f3-434b-8e56-aada4ee51428.png

企业微信截图_fcd89f2b-7792-466a-a473-3183f3b69d88.png

3.1 TRITONBACKEND_Initialize

检查backend API version
企业微信截图_a281291d-002a-458d-83d5-e0e4bb3b9fbd.png

3.2 TRITONBACKEND_ModelInitialize

设置模型名称和版本,创建model_state
企业微信截图_566064ae-bff2-440d-a6e2-39c827eb2849.png
model_state具有以下字段,BackendModel的字段是不同模型共有的,ModelState私有字段是torch模型专属的。
企业微信截图_f4ef0bc0-3437-4838-aec8-7149228f44fa.png企业微信截图_f005a3d9-7bcf-4ea3-b234-75590ac1e444.png
企业微信截图_77882158-a22b-4e95-a22a-e535f37c9e8b.png

3.3 TRITONBACKEND_ModelInstanceInitialize

指定模型示例名称、设备id、以及创建ModelInstanceState
企业微信截图_2dbe7f36-29e7-4dd5-839d-045ff44ef945.png

3.4 TRITONBACKEND_ModelInstanceExecute

通过执行ProcessRequests处理Sheduler传过来的批次 requests
企业微信截图_eebd4c80-c477-4956-8e64-d25c1aa1d3d6.png

3.4.1 max_batch_size_校验

如果max_batch_size > 1 , 输入的total_batch_size <= max_batch_size,shape的第一个纬度是batch大小,对每个请求的batch请和获取total_batch_size。
如果max_batch_size = 0, 则每个请求的batch默认为1。
企业微信截图_633776b5-8e61-40fe-b33d-a5852531bcd7.png

3.4.2 setInputTensor

  1. 所有request具有相同数量的输入tensor
  2. 所有request汇聚到连续的CPU或GPU内存中

企业微信截图_60a812e7-af40-4cdc-9173-40e6c470313e.png

3.4.3 Execute

调用具体模型执行推理
企业微信截图_c056edf7-bea4-46ab-81fc-f8291d8c6823.png

3.4.4 ReadOutputTensors

处理推理结果
企业微信截图_e8394f1e-f4f8-443e-9f36-519fa1701a59.png

4 backend调优

backend模型配置分为两类,一类是所有backend通用的,一类是不同backend自有的。

4.1 通用配置

可以调整的max_batch_size_、enable_pinned_input_、enable_pinned_output_、ragged_inputs_

  std::string name_;uint64_t version_;std::string repository_path_;bool allow_optional_;common::TritonJson::Value model_config_;int max_batch_size_;bool enable_pinned_input_;bool enable_pinned_output_;std::vector<BatchInput> batch_inputs_;std::vector<BatchOutput> batch_outputs_;std::map<std::string, const BatchOutput*> batch_output_map_;std::set<std::string> ragged_inputs_;std::set<std::string> optional_inputs_;

4.1.1 max_batch_size_

不设置默认批次为1
企业微信截图_b89040de-bc3c-43ce-87ea-106a45a84d03.png

4.1.2 enable_pinned_input_

TritonMemoryManager是否使用Pinned
企业微信截图_758a3a4b-47d6-4421-98ac-3c9f0097c190.png
Pinned内存优化技术优势包括:

  • 加速数据传输:减少CPU与GPU间数据交换延迟,提升计算效率。
  • 高性能:保证数据传输速度,适合实时和高性能计算场景。
  • 性能稳定:内存访问时间可预测,利于优化应用响应时间。

存在的局限性有:

  • 内存占用:固定占用物理RAM,可能影响系统其他部分的内存需求。
  • 管理难度:配置复杂,需精确评估内存需求以避免资源浪费。
  • 系统影响:不合理使用可能削弱系统整体稳定性和其他应用表现。

4.1.3 ragged_inputs_

Triton 提供了动态批处理功能,该功能可以将多个针对同一模型执行的请求合并,以实现更高的吞吐量。默认情况下,只有当每个请求的输入形状相同时,这些请求才能被动态批处理。为了在输入形状经常变化的情况下利用动态批处理,客户端需要对请求中的输入张量进行填充以达到相同的形状。
企业微信截图_e1e7b422-4950-430b-a5f7-d5327a53f9ba.png

4.2 torch_backend自有配置

 // Flag to indicate whether optimized execution is enabled. Defaults to true.bool enable_optimized_execution_;// Flag to indicate whether inference mode is enabled. Defaults to false.bool enable_inference_mode_;// Flag to indicate whether cache cleaning after each run is enabled.// Defaults to false.bool enable_cache_cleaning_;// Flag to indicate whether weight sharing is enabled. Defaults to false.bool enable_weight_sharing_;// Flag pairs to indicate if various JIT settings are set and// enabled respectively. Defaults to (false, true). Default behavior// is to do nothing if not explicitly set.std::pair<bool, bool> enable_tensor_fuser_pair_;std::pair<bool, bool> enable_jit_profiling_pair_;std::pair<bool, bool> enable_jit_executor_pair_;

4.2.1 enable_optimized_execution_

通启用或禁用图执行器的优化模式。这影响了模型执行时的性能。

4.2.2 enable_inference_mode_

启用或禁用推理模式。这通常会禁用梯度计算,提高推理速度。

4.2.3 enable_cache_cleaning_

是否在每次运行后清理缓存。默认为false,意味着通常不自动清理缓存。

4.2.4 enable_weight_sharing_

是否启用权重共享。这个设置在某些特定结构中(如循环神经网络RNN的多个时间步共享权重)非常有用,可以减少内存占用。默认为false,表示不启用共享,每个权重副本独立存储。

4.2.5 enable_tensor_fuser_pair_

允许根据配置开关来决定是否启用Tensor表达式融合器,这是优化图执行效率的一个重要手段,特别是在GPU上。

4.2.6 enable_jit_profiling_pair_

如果在model_state_中指定了JIT profiling的启用状态,则通过torch::jit::getProfilingMode来设定是否开启profiling,这对于性能分析和优化很有帮助。

4.2.4 enable_jit_executor_pair_

JIT executor模式决定了模型图是否会被即时编译(JIT compiled),通常用于提升执行速度。

image.png

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

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

相关文章

drippingblues 靶机实战

信息收集&#xff1a; Nmap: 存活&#xff1a; 靶机ip&#xff1a;192.168.10.110 端口&#xff1a; 服务&#xff1a; 发现ftp服务可以匿名登录。且用户名是FTP。 发现一个压缩包&#xff0c;下载并爆破。 得到密码 072528035。发现关键字 drip。里面还有一个 secret.zip(…

30-10y国债利差反转的必要条件

国君宏观表示&#xff0c;30-10y期限利差定价本质上是私人部门主动加杠杆的预期&#xff0c;央行购债与资本市场的正向反馈是可以期待的一种场景&#xff0c;而企业部门的被动加杠杆须以可持续的需求动能与盈利预期作为前提。 要点&#xff1a; 期限利差的本质&#xff1a;对长…

SSM整合-前后端分离-实现增删改查 (下)

主流框架SSM 实现功能03-添加家居信息需求分析/图解思路分析代码实现注意事项和细节 实现功能04-显示家居信息需求分析/图解思路分析代码实现 实现功能05-修改家居信息需求分析/图解思路分析代码实现注意事项和细节 实现功能06-删除家居信息需求分析/图解思路分析代码实现课后作…

教育型内容的制胜秘诀:Kompas.ai如何结合知识与营销

在数字化营销的浪潮中&#xff0c;教育型内容已经成为品牌建立权威性和提供价值的重要手段。通过分享专业知识和见解&#xff0c;品牌不仅能够吸引目标受众&#xff0c;还能够在潜在客户心中建立起专业和可信赖的形象。本文将深入分析教育型内容的重要性&#xff0c;详细介绍Ko…

记录一下Hql遇到的零碎问题

建表相关 -- 地区维度表 drop table dim_province_full; create table dim_province_full( id string comment 编号, name string comment 省份名称, region_id string comment 大区id, area_code string comment 行政区位码, iso_code string comment 国际编码, iso_3166_2 s…

display:flex align-items:center无效的不一样的解决思路

写H5的时候&#xff0c;希望两个元素在div中垂直居中&#xff0c;但是设置align-items:center无效&#xff0c;最终排查原因是引入三方css影响了align-items:center。 具体分析如下&#xff0c;想让搜索图标和input在div里水平居中&#xff1a; 布局如下&#xff1a; <div…

测试 vs2019 c++ 在 32 位系统和 64 位系统里的 sizeof ( void * )

再看下反汇编&#xff1a; 接着给出 32 位系统的结果&#xff1a; 谢谢阅读

【数据结构】单链表专题-->单链表实现(附:全部码源)

&#x1f525;博客主页&#x1f525;&#xff1a;【 坊钰_CSDN博客 】 欢迎各位点赞&#x1f44d;评论✍收藏⭐ 目录 1. 链表的概念及结构 2. 预前准备 2.1 分文件存放 3. 单链表的实现 3.1 定义节点 3.2 尾插和头插 3.2.1 尾插 3.2.2 头插 3.3 节点申请空间和打印 3.3…

css多种布局方式

css多种布局方式 简介标准流布局&#xff08;主要依赖margin\padding&#xff09;浮动布局&#xff08;float&#xff09;定位布局&#xff08;position&#xff09;弹性布局&#xff08;flex&#xff09;网格布局&#xff08;grid&#xff09;多列布局&#xff08;column&…

05-13 周一 量化是什么

05-13 周一 量化是什么 时间版本修改人描述2024年5月13日11:27:25V0.1宋全恒新建文档2024年5月14日16:21:20V1.0宋全恒了解 简介 神经网络在运行时有较高的计算成本&#xff0c;而且随着大模型时代的到来&#xff0c;知识由一个巨大的LLM存储&#xff0c;为了获取知识&#xf…

函数1111

DDL CREATE TABLE student (id INT PRIMARY KEY AUTO_INCREMENT,createDate DATETIME NOT NULL,userName VARCHAR(255) NOT NULL,phone VARCHAR(20) NOT NULL,age INT NOT NULL,sex ENUM(男, 女) NOT NULL,introduce TEXT ); DML INSERT INTO student (creatDate, userName,…

android webview加载页面失败事件的处理,包括http异常的情况

网上查到的方法是如下这样的&#xff0c;这种方法对于服务器可以访问&#xff0c;但是发生40x错误时是无效的。 webView.setWebViewClient(new WebViewClient() {Overridepublic void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {su…

[力扣题解]452. 用最少数量的箭引爆气球

题目&#xff1a;452. 用最少数量的箭引爆气球 思路 贪心法 希望尽可能射爆叠在一起的气球&#xff1b; 以气球的左边界进行升序排序&#xff0c;再从左到右遍历&#xff0c;遇到有重叠的气球&#xff0c;则让当前气球的有边界与上一个气球的右边界对齐&#xff08;min操作&a…

web入门练手案例(一)

下面是一下web入门案例和实现的代码&#xff0c;带有部分注释&#xff0c;倘若代码中有任何问题或疑问&#xff0c;欢迎留言交流~ 新闻页面 案例描述&#xff1a; 互联网的发展使信息的传递变得方便、快捷&#xff0c;浏览新闻称为用户获取信息的重要渠道。下面将实现一个简…

原子学习笔记3——点亮 LED

一、应用层操控设备的两种方式 应用层如何操控底层硬件&#xff0c;同样也是通过文件 I/O 的方式来实现&#xff0c;设备文件便是各种硬件设备向应用层提供的一个接口&#xff0c;应用层通过对设备文件的 I/O 操作来操控硬件设备&#xff0c;譬如 LCD 显示屏、串口、按键、摄像…

论文阅读:Self-Consistency Improves Chain of Thought Reasoning in Language Models

思维链 prompt 与预训练的大型语言模型相结合&#xff0c;在复杂的推理任务上取得了令人鼓舞的结果。在本文中&#xff0c;作者提出了一种新的解码策略&#xff0c;即自我一致性&#xff08;self-consistency&#xff09;&#xff0c;以取代思维链 prompt 中使用的 naive 贪婪解…

25. K 个一组翻转链表 - 力扣(LeetCode)

基础知识要求&#xff1a; Java&#xff1a;方法、while循环、for循环、if else语句 Python&#xff1a; 方法、while循环、for循环、if else语句 题目&#xff1a; 给你链表的头节点 head &#xff0c;每 k 个节点一组进行翻转&#xff0c;请你返回修改后的链表。 k 是一个…

x264 帧类型代价计算原理:slicetype_slice_cost 函数分析

x264 x264 是一个开源的视频编码库,它实现了H.264/AVC标准。H.264是一种广泛使用的压缩标准,用于视频流、视频下载、蓝光光盘以及许多其他形式的数字视频分发。x264 以其高压缩效率和良好的视频质量而著称,是许多视频编辑软件和视频播放器的默认编解码器。 以下是关于 x26…

随易周刊第006期 - 云梦秦简

&#x1f4e2; 随易周刊介绍 这是一个由 前端之虎陈随易 维护的周刊&#xff0c;将会分享笔者一周内的所见所闻。 写一篇周刊 搜集整理发布 需要数天&#xff0c;请尊重笔者的成果&#xff0c;可任意转载&#xff0c;但不要篡改内容。 如果你觉得周刊不错&#xff0c;可以给…

未来互联网:Web3的技术革新之路

引言 随着技术的不断发展和社会的日益数字化&#xff0c;互联网作为信息交流和社交媒介的重要平台已经成为我们生活中不可或缺的一部分。然而&#xff0c;传统的互联网架构在数据安全、隐私保护和去中心化等方面存在着诸多挑战。为了解决这些问题&#xff0c;Web3技术应运而生…