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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

给定两点所能得到的数学关系

给定两点所能得到的数学关系 正文 正文 这里介绍一个基础问题&#xff0c;如果给定平面上的两个点的坐标&#xff0c;那么它们之间能够得到什么数学关系呢&#xff1f; ω arctan ⁡ y 1 − y 0 x 1 − x 0 x 1 − x 0 d cos ⁡ ω y 1 − y 0 d cos ⁡ ω d ( x 1 − x…

【 PowerJob 的使用 -分布式调度】

PowerJob 的使用 最近项目中使用了PowerJob做任务调度模块&#xff0c;感觉这个框架真香&#xff0c;今天我们就来深入了解一下新一代的定时任务框架——PowerJob&#xff01; 简介 PowerJob是基于java开发的企业级的分布式任务调度平台&#xff0c;与xxl-job一样&#xff0…

内联函数+auto关键字(C++11)+指针空指针nullptr(C++11)

内联函数auto关键字&#xff08;C11&#xff09;指针空指针nullptr&#xff08;C11&#xff09;详解 内联函数概念特性 auto关键字&#xff08;C11&#xff09;auto简介auto的使用细则auto不能推导的场景 基于范围的for循环(C11)范围for的语法范围for的使用条件 指针空指针null…

什么是外呼系统?企业为什么使用ai电销外呼系统

说起ai电销外呼系统&#xff0c;或许有的人并不了解这是什么&#xff0c;但它却常常出现在我们的生活中&#xff0c;今天我们来看看什么是外呼系统&#xff0c;企业为什么使用ai电销外呼系统&#xff1f; 一、什么是外呼系统 外呼系统就是由系统自动拨打电话的&#xff0c;外呼…

WPF基础学习笔记

目录 基础知识&#xff1a; WPF的特点: WPF的优点 什么是XAML&#xff1f; 布局基础&#xff1a; 样式的应用&#xff1a; 控件模板&#xff08;ControlTemplate&#xff09;&#xff1a; 数据模板&#xff08;DataTemplate&#xff09;&#xff1a; 静态资源StaticRe…

Kasawaki川崎机器人故障维修

在当今的自动化工业领域&#xff0c;川崎工业机器人以其卓越的性能和可靠的工作效率赢得了广泛的赞誉。作为机器人的核心组成部分&#xff0c;伺服电机的作用至关重要。然而&#xff0c;就像所有机械设备一样&#xff0c;也可能会遭遇电机磨损或故障&#xff0c;需要适时的川崎…

如何为域名生成证书签发请求CSR

最近我们在Hostease购买了服务器产品&#xff0c;为了保障我们网站的安全&#xff0c;我们额外还购买了SSL证书产品。在Hostease技术客服的帮助下&#xff0c;我们成功签发了SSL证书。 在签发证书前需要生成一个证书签名请求CSR&#xff0c;证书签名请求(CSR)是一个包含有关你…

【计算机网络】http协议的原理与应用,以及https是如何保证安全传输的

HTTP 超文本传输协议&#xff08;英文&#xff1a;HyperText Transfer Protocol&#xff0c;缩写&#xff1a;HTTP&#xff09;是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。 HTTP的发展是由蒂姆伯纳斯-李于1989年在欧洲核子研究组织…

欣意无限信息技术有限公司邀您参观2024长三角快递物流展

参展企业介绍 郑州欣意无限信息技术有限公司成立于2017年&#xff0c;公司经营范围计算机网络技术开发、技术咨询、技术服务、技术转让&#xff1a;商务信息咨询服务&#xff1b;市场营销策划&#xff1b;设计、制作、代理、发布国内广告业务&#xff1b;电脑图文设计&#xff…

[IMX6ULL驱动开发]-GPIO子系统和Pinctrl子系统

目录 Pinctrl子系统的概念 GPIO子系统的概念 定义自己的GPIO节点 GPIO子系统的函数 引脚号的确定 基于GPIO子系统的驱动程序 驱动程序 设备树修改 之前我们进行驱动开发的时候&#xff0c;对于硬件的操作是依赖于ioremap对寄存器的物理地址进行映射&#xff0c;以此来达…

C++笔试强训day21

目录 1.爱丽丝的人偶 2.集合 3.最长回文子序列 1.爱丽丝的人偶 链接 简单叙述就是每个数的左右两边不能一个比他大&#xff0c;一个比他小。 反之&#xff0c;就是要让每个数的左右两边数都大于或者都小于他。 方法一&#xff1a;一开始我想复杂了&#xff0c;其实用试错法…

Pycharm使用Anaconda虚拟环境

一、前置 安装 Pychram安装 Anaconda&#xff0c;并配置虚拟环境 参考&#xff1a; Anaconda虚拟环境 anaconda虚拟环境pytorch安装 二、在Pycharm中使用Anaconda的虚拟环境 打开 Pycharm的命令行可以看到 Anaconda 的虚拟环境已经启动。 三、问题集合 &#xff08;1&…

IDEA报错:java 找不到符号

IDEA报错:java 找不到符号,代码没问题,IDEA缓存也清理了也重新构建了就是不行 最后使用终极大法 -Djps.track.ap.dependenciesfalse

海外仓混合订单拣货策略:人工与海外仓系统的最佳搭配模式

根据订单高效拣货是任何海外仓都要面对的问题。只有当订单可以被高效&#xff0c;准确的拣货之后&#xff0c;才能继续走下面的物流流程&#xff0c;所以尽可能的缩短拣货时间&#xff0c;提升拣货精准度&#xff0c;才是提升订单交付率的最佳方法。 海外仓企业都在不断寻找&am…

直播预告-如何快乐学习亚马逊云科技AWS,玩游戏备考亚马逊云科技云从业者认证?

一边玩一边学习亚马逊云科技云技能&#xff0c;这么好的事尊的假的&#xff1f;本周六&#xff08;5约11日&#xff09;晚20点&#xff0c;亚马逊云科技UG云端夜话Night Talk活动精彩回归&#xff5e; 本次亚马逊云科技UG云端夜话直播是什么&#xff1f; 小李哥这次将在多平台…

Redis-集群方案

文章目录 Redis集群方案是用来做什么的&#xff1f;Redis集群方案有哪些&#xff1f;主从复制集群哨兵&#xff08;Sentinel&#xff09;集群Cluster分片集群第三方集群方案 更多相关内容可查看 Redis集群方案是用来做什么的&#xff1f; Redis集群方案是用来解决单节点Redis的…

知识图谱开发日志

应用于应用环境的配置.测试.发布 假如你写了一个web,并且测试调试都没有问题 并且,你想发给你的朋友,导师,或者部署到远程云服务器上 那么,你需要配置相同的软件,比如数据库,web服务器,必要的插件,库,etc…但这并不一定能保证软件的正常运行,因为别人可能使用完全不同的操作系统…

什么是CCRC?做什么用的?

CCRC&#xff08;中国网络安全审查认证和市场监管大数据中心&#xff09;原名为中国网络安全审查技术与认证中心&#xff0c;也被称为中国信息安全认证中心&#xff08;ISCCC&#xff09;。 该中心是经中央机构编制委员会办公室批准成立的&#xff0c;其主要职责是依据国家法律…

springboot通过 EasyExcel.read()方法解析csv(excel)文件中的数据用list接收

springboot通过 EasyExcel.read&#xff08;&#xff09;方法解析csv&#xff08;excel&#xff09;文件中的数据用list接收 文章目录 前言一、EasyExcel是什么&#xff1f;二、使用步骤1.引入库2.接收数据的实体类3.处理字典值ExcelDictConverter4.把文件中的数据解析出来放入…

Vue3+TS实现将html或富文本编辑器转为Word并下载

说明&#xff1a;我用的富文本编辑器是wangEditor&#xff1a; wangEditor官网 安装 yarn add wangeditor/editor # 或者 npm install wangeditor/editor --save yarn add wangeditor/editor-for-vuenext # 或者 npm install wangeditor/editor-for-vuenext --save yarn add …