01 Triton backend

news2024/12/23 23:28:22

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.coloradmin.cn/o/1676755.html

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

相关文章

Elasticsearch - HTTP

文章目录 安装基本语法索引创建索引查看索引删除索引 文档创建文档更新文档匹配查询多条件查询聚合查询映射 安装 https://www.elastic.co/downloads/past-releases/elasticsearch-7-17-0 下载完成启动bin/elasticsearch服务&#xff0c;可以在Postman调试各种请求。 基本语法…

风电功率预测 | 基于遗传算法优化BP神经网络实现风电功率预测(附matlab完整源码)

风电功率预测 风电功率预测 | 基于遗传算法优化BP神经网络实现风电功率预测(附matlab完整源码)完整代码风电功率预测 | 基于遗传算法优化BP神经网络实现风电功率预测(附matlab完整源码) 基于遗传算法优化BP神经网络是一种常见的方法,用于改进BP神经网络在风电功率预测中的性…

IBM Granite模型开源:推动软件开发领域的革新浪潮

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

基于MSWA相继加权平均的交通流量分配算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于MSWA相继加权平均的交通流量分配算法matlab仿真.如图所示交通网络中&#xff0c;包含6个节点、11各路段、9个OD对。经枚举可得每个OD对间存在3条无折返有效路…

RS编码和卷积码总结

RS编码 简要介绍RS编码及其原理 1. RS编码简介 Reed-Solomon编码&#xff08;RS编码&#xff09;是一种强大的纠错码&#xff0c;广泛应用于数据存储和传输中。RS编码由Irving S. Reed和Gustave Solomon于1960年提出&#xff0c;属于BCH码的一种&#xff0c;是基于有限域&am…

免费思维13招之十二:耗材型思维

免费思维13招之十二:耗材型思维 今天给你分享免费思维的两个子思维——相关性耗材思维和非相关性耗材思维。 相关性耗材思维,是指有一些产品的使用,需要大量的相关耗材,从而对该产品进行免费,而耗材进行资费。 举例:全世界最大的一家直销公司叫安利,它的明星产品是净水…

【Python探索之旅】列表

目录 特点 入门 访问元素 新增元素 修改元素 插入元素 删除元素 完结撒花 前言 在Python中&#xff0c;列表(List)是最常用的数据结构之一&#xff0c;类似于其他语言&#xff0c;如Java&#xff0c;与其不同啊Python中不需要声明数据类型。它提供了一种灵活且高效的方式…

数学建模入门手册

数模的主要比赛 美赛&#xff08;报名费100美元&#xff0c;每年2月比赛&#xff09;&#xff1b;国赛&#xff08;每年9月&#xff09; 电工杯&#xff08;每年5月&#xff09;&#xff1b;APMCM&#xff08;每年11月&#xff09;&#xff1b;MathorCup&#xff08;每年4月&a…

3.TCP的三次握手和四次挥手

一、前置知识 TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。在传输数据前通信双方必须建立连接&#xff08;所谓连接&#xff0c;是指客户端和服务端各自保存一份关于对方的信息&#xff0c;比如ip地址&#xff0c;端口号等&#xff09;。TCP通过三次握手建立一个…

Spring Boot 整合讯飞星火3.5通过接口Api接口实现聊天功能(首发)复制粘贴即可使用,后续更新WebSocket实现聊天功能

程序员必备网站&#xff1a; 天梦星服务平台 (tmxkj.top)https://tmxkj.top/#/ 1.pom.xml <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.72</version></dependency><depen…

信噪比(SNR)的基本定义及注意事项

本文介绍信噪比&#xff08;SNR&#xff09;的基本定义及注意事项。 1.基本定义 信噪比&#xff08;SNR&#xff09;&#xff0c;指的是系统中信号与噪声的比&#xff0c;通常用分贝&#xff08;dB&#xff09;表示。 1)用功率来描述 &#xff0c;分别为信号和噪声的功率 2…

Hello,World驱动之旅,用户层简单交互(三)

目录 &#xff08;一&#xff09;上篇回顾&#xff1a;上一篇讲到用户层怎么与驱动模块进行交互。Hello&#xff0c;World驱动之旅&#xff0c;对外接口(二)-CSDN博客 &#xff08;二&#xff09;通过简单程序与驱动交互 读操作&#xff0c;代码如下&#xff1a; 写操作&…

Day28

回溯算法part02 LC组合总和II 终止条件&#xff0c;sumn且mid.size()k加入result。其他终止条件sum>n或者mid.size()>k也结束一样可以引入剪枝操作进行优化&#xff0c;其实sum>n也可以算是剪枝操作的一部分 LC17电话号码的字母组合&#xff08;超时5min&#xff…

复利效应(应用于成长)

应用 每个人在智力、知识、经验上&#xff0c;复利效应都一样&#xff0c;只要能积累的东西&#xff0c;基本上最终都会产生复利效应。 再来看一下复利公式&#xff1a;FP*(1i)^n P本金&#xff1b;i利率&#xff1b;n持有期限。在使用时&#xff0c;一定要注意4个限定条件&a…

网络安全快速入门(十二)(下) 目录结构相关命令补充

12.4 补充命令 我们已经了解了linux的目录结构&#xff0c;接下来我们大概看一下针对目录及文件的一些相关命令&#xff0c; 我们本章只讲三个目录及文件相关的命令&#xff0c;分别是tree&#xff0c;find及校验文件命令&#xff0c;我们一个一个来看这些命令。 12.4.1 tree命…

数学建模——线性回归模型

目录 1.线性回归模型的具体步骤和要点&#xff1a; 1.收集数据&#xff1a; 2.探索性数据分析&#xff1a; 3.选择模型&#xff1a; 4.拟合模型&#xff1a; 5.评估模型&#xff1a; 1.R平方&#xff08;R-squared&#xff09;&#xff1a; 2.调整R平方&#xff08;Ad…

LeetCode 126题:单词接龙 II

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容&#xff0c;和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣&#xff01; 推荐&#xff1a;数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航&#xff1a; LeetCode解锁100…

[初学者来练]用html+css+javascript个人博客作业需求

文章目录 项目概述项目需求页面设计主页文章列表页文章详情页用户交互额外功能&#xff08;可选&#xff09; 技术要求提交要求评分标准文件代码格式提示HTML 页面结构CSS 样式设计JavaScript 交互功能 项目概述 这个项目旨在通过使用HTML、CSS和JavaScript创建一个简单而功能…

零样本身份保持:ID-Animator引领个性化视频生成技术新前沿

在最新的研究进展中&#xff0c;由Xuanhua He及其团队提出的ID-Animator技术&#xff0c;为个性化视频生成领域带来了突破性的创新。这项技术的核心在于其零样本&#xff08;zero-shot&#xff09;人物视频生成方法&#xff0c;它允许研究者和开发者根据单一的参考面部图像生成…

如何在云电脑实现虚拟应用—数据分层(应用分层)技术简介

如何在云电脑实现虚拟应用—数据分层&#xff08;应用分层&#xff09;技术简介 近几年虚拟化市场实现了非常大的发展&#xff0c;桌面虚拟化在企业中应用越来越广泛&#xff0c;其拥有的如下优点得到大量企业的青睐&#xff1a; 数据安全不落地。在虚拟化环境下面数据保存在…