01 Triton backend

2024-05-15 04:36
文章标签 01 backend triton

本文主要是介绍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

这篇关于01 Triton backend的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/990823

相关文章

hdu 2602 and poj 3624(01背包)

01背包的模板题。 hdu2602代码: #include<stdio.h>#include<string.h>const int MaxN = 1001;int max(int a, int b){return a > b ? a : b;}int w[MaxN];int v[MaxN];int dp[MaxN];int main(){int T;int N, V;s

集中式版本控制与分布式版本控制——Git 学习笔记01

什么是版本控制 如果你用 Microsoft Word 写过东西,那你八成会有这样的经历: 想删除一段文字,又怕将来这段文字有用,怎么办呢?有一个办法,先把当前文件“另存为”一个文件,然后继续改,改到某个程度,再“另存为”一个文件。就这样改着、存着……最后你的 Word 文档变成了这样: 过了几天,你想找回被删除的文字,但是已经记不清保存在哪个文件了,只能挨个去找。真麻烦,眼睛都花了。看

01 Docker概念和部署

目录 1.1 Docker 概述 1.1.1 Docker 的优势 1.1.2 镜像 1.1.3 容器 1.1.4 仓库 1.2 安装 Docker 1.2.1 配置和安装依赖环境 1.3镜像操作 1.3.1 搜索镜像 1.3.2 获取镜像 1.3.3 查看镜像 1.3.4 给镜像重命名 1.3.5 存储,载入镜像和删除镜像 1.4 Doecker容器操作 1.4

滚雪球学MyBatis(01):教程导读

MyBatis简介 前言 欢迎回到我们的MyBatis系列教程。在上期的内容中,我们详细介绍了MyBatis的基本概念、特点以及它与其他ORM框架(如Hibernate)的对比。我们还探讨了MyBatis在数据访问层中的优势,并解释了为什么选择MyBatis作为我们的持久化框架。在阅读了上期的内容后,相信大家对MyBatis有了初步的了解。 在本期内容中,我们将深入探讨MyBatis的基本配

python+selenium2轻量级框架设计-01框架结构

接下来会介绍一个比较简单的框架结构,先看一下分类 config文件夹里放的是配置文件 framework文件夹里面放的是公共类,常用类,还有读配置文件类、日志类、截图类、发送邮件、生成测试报告、操作读取数据库、读取Excel等,后面几篇会一一介绍 logs文件夹存放生成的日志文件 pageobject存放页面类包括元素的定位等 screenshots文件放的是生成的截图 test_

python+selenium2学习笔记POM设计模式-01模式简介

Page Object模式是Selenium中的一种测试设计模式,主要是将每一个页面设计为一个Class,其中包含页面中需要测试的元素(按钮,输入框,标题 等),这样在Selenium测试页面中可以通过调用页面类来获取页面元素,这样巧妙的避免了当页面元素id或者位置变化时,需要改测试页面代码的情况。 当页面元素id变化时,只需要更改测试页Class中页面的属性即可。 Page Object模式是

数据库学习01——mysql怎么创建数据库和表

第一步:创建数据库 使用 create database 语句,后跟要创建的数据库名称: CREATE DATABASE dbname; 例如,要创建名为 my_db 的数据库,请输入: CREATE DATABASE my_db ; 使用 show databases; 语句检查数据库是否已创建: 第二步:创建表 使用 create table 语句,后跟要创建的表名和列定

【DL--01】深度学习 揭开DL的神秘面纱

什么是深度学习 深度学习=深度神经网络+机器学习 人工智能 > 机器学习 > 表示学习 > 深度学习 神经元模型 输入信号、加权求和、加偏置、激活函数、输出 全连接层 输入信号、输入层、隐层(多个神经元)、输出层(多个输出,每个对应一个分类)、目标函数(交叉熵) 待求的参数:连接矩阵W、偏置b 训练方法:随机梯度下降,BP算法(后向传播) Python中深度学习实现:Ke

三文带你轻松上手鸿蒙的AI语音01-实时语音识别

三文带你轻松上手鸿蒙的AI语音01-实时语音识别 前言 HarmonyOSNext中集成了强大的AI功能。Core Speech Kit(基础语音服务)是它提供的众多AI功能中的一种。 Core Speech Kit(基础语音服务)集成了语音类基础AI能力,包括文本转语音(TextToSpeech)及语音识别(SpeechRecognizer)能 力,便于用户与设备进行互动,实现将实时输入

NYOJ 252 01串

OJ题目:http://acm.nyist.net/JudgeOnline/problem.php?pid=252 描述 ACM的zyc在研究01串,他知道某一01串的长度,但他想知道不含有“11”子串的这种长度的01串共有多少个,他希望你能帮帮他。 注:01串的长度为2时,有3种:00,01,10。 输入 第一行有一个整数n(0<n<=100),表示有n组测试数据; 随后有n行