Triton Inference Server教程2

article/2025/8/22 17:58:10

本文介绍如何编写一个config文件,config.pbtxt文件中包含哪些可以配置的参数,这些参数又会对triton server产生什么影响。

必须指定的模型参数

  1. platform/backend:模型要在什么backend上面运行,可以用两种参数指定,一个是platform,一个是backend,对于某些模型,两个参数二选一即可,某些模型必须从中选一个指定,具体的规则如下:
    在这里插入图片描述
    图中TensorRT,onnx RT,PyTorch三种模型可以platform或者backend随便指定一个即可;对于Tensorflow,platform平台是必须指定的,backend平台是可选的;对于OpenVINO、python、DALI,backend是必须指定的
  2. max batch size 模型执行推理最大的batch是多少,这个参数主要是限制推理中模型参数不会超过模型显存,或者gpu内存,保证推理服务不会因为爆显存而挂掉
  3. input and output:指定输入输出名称
    特别的,当模型是由TensorRT、Tensorflow、onnx生成的,且设置strict-model-config=false时,可以不需要config.pbtxt文件。
    配置文件示例说明
    在这里插入图片描述
  • 配置1:
    指定platform:
    max batch size = 8:注意,若max batch size大于0,默认网络的batch大小可以是动态调整的,在网络输入维度dims参数可以不指定batch大小。
    输入输出参数:包括名称、数据类型、维度
  • 配置2:
    指定platform:
    max batch size = 0:此时,这个维度不支持可变长度,网络输入维度dims参数必须显式指定每个维度的大小,这里也可以设置batch大于0,比如维度【2,3,224,224】。
    输入输出参数:包括名称、数据类型、维度
  • 配置3:
    指定platform:pytorch_libtorch
    max batch size = 8:这个维度支持可变长度。
    输入输出参数:
    包括名称、数据类型、**格式、**维度。
    对于pytorch_libtorch的模型,不包含输入输出的具体信息,因此,对于输入输出名称,有特殊的格式:字符串+两个下划线+数字,必须是这种结构。
    若模型支持可变维度,则可变的维度可以设置为-1。
  • 配置4:
    reshape应用:
    max batch size = 0:维度不包含batch维度,但是若模型要求包含这个维度,就可以使用reshape,将其reshape成[1,3,224,224],就可以满足应用需求

可选的配置参数

除上述参数,配置文件中还可以设置其他参数。

1. version_policy:配置版本信息
model repository可以包含多个多个版本模型,因此,在配置文件中可以设定具体执行哪个模型。
请添加图片描述
如上图所示,version_policy可以有3种配置
All:表示model repository中所有模型都可以加载,若使用该配置,执行的时候model repository中所有模型都会加载。
Latest:只执行最新的版本,最新指版本数字最大的,若使用该配置,则只选择最新的模型加载。
Specific:执行指定版本。若使用该配置,需设定指定的版本号,加载时只加载指定的相应版本。

2. Instance_group:它对应triton一个重要的feature:concurrent model inference,就是在一个Triton server上对同一个模型开启多个execution instance,可以并行的在GPU上执行,从而提高GPU的利用率,增加模型的吞吐。
请添加图片描述
Instance_group:表示运行在同一设备上的一组model instance。
count:指定每个设备上的instance数量
kind:定义设备类型,可以是cpu,也可以是GPU
gpus:定义使用哪个GPU,若不指定,默认会在每一个GPU上都运行。
Instance_group中可以指定多个group 运行在多个设备上。

3. scheduling and batching:定义Triton应使用哪种调度测量来调度客户端的请求。调度策略也是Triton一个非常重要的feature,它也可以提高GPU的利用率,增加模型的吞吐。因为如果推理的batchsize越大,GPU的利用率越高。
Triton有多种调度器:

  • default scheduler:默认scheduler,若不对这个参数做设置,则执行默认测量。不做batching,即模型送进来的batch是多少,则推理的batch就设定多少。
    请添加图片描述

  • dynamic batcher:它可以在服务端将多个batchsize比较小的request组合成一个batchsize大的input tensor,从而提升GPU利用率,增加吞吐。它只对stateless 模型有效,对于streaming视频音频流处理模型不适用(需要使用sequence模型)。它有两个关键参数需要指定:
    1)preferred_batch_size:期望达到的batchsize大小,可以是一个数,也可以是一个数组,通常会在里面设置多个值。
    2)max_queue_delay_microseconds:单位是微秒,打batch的时间限制,超过该时间会停止batch,超过该时间会将以打包的batch送走。
    3)其他高级设置:preserve ordering:确保输出的顺序和请求送进来的顺序一致。
    ​ priority_level:可以设置优先级,
    ​ queue policy:设置排队的策略,比如时限超时则停止推理
    请添加图片描述

  • sequence batcher:处理sequence请求。能够保证同一个streaming序列的请求送到同一个model instance执行,从而能够保证model instance的状态。
    请添加图片描述

  • ensemble scheduler:可以组合不同的模块,形成一个pipeline

4. optimization policy
Triton中提供两种优化方式:分别针对onnx模型和tensorflow模型,可以使用下图的设置开启tensorrt加速。具体可以设置名称、tensorrt加速的精度等。
请添加图片描述
5. model warmup
有些模型在刚初始化的短时间内,执行推理时性能是不太稳定的,可能会比较慢,所以需要一个热身的过程使得推理趋于稳定。
Triton通过指定model warmup字段去定义热身过程。字段内可以指定batchsize大小、请求是如何生成的,比如随机数生成,还有数据维度、数据类型等。这样,Triton刚刚加载某个模型时候,会向模型发送热身请求。model在warmup过程中,Triton无法对外提供服务,导致模型加载较慢,完成后,client端才能使用模型推理
请添加图片描述


http://chatgpt.dhexx.cn/article/8HpL0mTA.shtml

相关文章

变分推断(variational inference)/variational EM

诸神缄默不语-个人CSDN博文目录 由于我真的,啥都不会,所以本文基本上就是,从0开始。 我看不懂的博客就是写得不行的博客。所以我只写我看得懂的部分。 持续更新。 文章目录 1. 琴生不等式2. 香农信息量/自信息I3. 信息熵4. 相对熵/KL散度/信…

Hugging Face - 推理(Inference)解决方案

每天,开发人员和组织都在使用 Hugging Face 平台上托管的模型,将想法变成概念验证(proof-of-concept)的 demo,再将 demo 变成生产级的应用。 Transformer 模型已成为广泛的机器学习(ML)应用的流…

变分推断(Variational Inference)解析

一、什么是变分推断 假设在一个贝叶斯模型中, x x x为一组观测变量, z z z为一组隐变量(参数也看做随机变量,包含在 z z z中),则推断问题为计算后验概率密度 P ( z ∣ x ) P(z|x) P(z∣x)。根据贝叶斯公式…

深度学习-在线推断(Inference)技术

深度学习一般分为训练和在线推断两个部分,大家平时经常关注的多为训练阶段,也就是搜索和求解模型最优参数的阶段。而当模型参数已经求解出来,如何使用模型,以及在在线环境中部署模型,也是非常重要的。 一般会比较关注其…

推理(Inference)与预测(Prediction)

在机器学习的背景下,很多人似乎混淆了这两个术语。这篇文章将试图澄清我们所说的这两个词是什么意思,每一个词在哪里有用,以及它们是如何应用的。在这里,我将举几个例子来直观地理解两者之间的区别。 推理和预测这两个术语都描述…

嵌入式C语言自我修养:从芯片、编译器到操作系统(附送书籍)

关注星标公众号,不错过精彩内容 来源 | 宅学部落 最近,阅读了王工(王利涛)赠送的一本由他编著的书籍《嵌入式C语言自我修养》,感觉写的挺不错。今天分享一下这本书籍《嵌入式C语言自我修养》:从芯片、编译器…

进行嵌入式C语言编程调试的通用办法

总结了一下调试我们嵌入式C程序的一些基本的办法和思想,供大家学习参考: 打印日志:在代码中添加打印语句,输出变量值、函数调用等信息,以便在程序运行时观察程序执行情况。 断点调试:在代码中添加断点&…

linux c与c语言的区别吗,嵌入式c语言与c语言的区别

原标题:嵌入式c语言与c语言的区别 最广泛使用的系统编程语言是C语言,它是使用自由格式源代码的简单编程语言;它曾用于以前用汇编语言构建的应用程序中。嵌入式C是C语言的扩展,它在嵌入式系统中应用于编写嵌入式软件,那么二者之间究竟有什么差异呢? 一、启动过程 1. 通用c…

嵌入式C语言——常见面试题

1、描述一下gcc编译过程? gcc编译过程分为4步骤:预处理、编译、汇编、链接。 预处理:头文件包含、宏替换、条件编译、删除注释。编译:主要进行词法、语法、语义分析等等,检查无误后把预处理好的文件编译成汇编文件。…

c语言对嵌入式的作用是什么,关于嵌入式C语言它有些什么意义

描述 首先,在当前产业结构升级的大背景下,机械行业未来的自动化、智能化程度会越来越高,所以机械类相关专业的知识结构必然会不断得到丰富和发展,而学习编程语言对于机械类专业来说具有较为实际的意义,尤其是C语言。 机…

总结嵌入式C语言难点(2部分)

结构类型和对齐 C语言提供自定义数据类型来描述一类具有相同特征点的事务,主要支持的有结构体,枚举和联合体。其中枚举通过别名限制数据的访问,可以让数据更直观,易读,实现如下: 联合体的是能在同一个存储…

嵌入式c语言教程 题库 百度云,嵌入式c语言视频教程尚观主讲视频教程

嵌入式C语言培训-01C语言概述-01C语言概念-发展历史-特点.mp4 嵌入式C语言培训-01C语言概述-02C基本程序结构-第一个helloworld程序-Linux下编辑编译执行.mp4 嵌入式C语言培训-01C语言概述-03C语言第2个程序第3个程序.mp4 嵌入式C语言培训-01C语言概述-04C程序开发过程.mp4 嵌入…

《嵌入式C语言》C语言介绍及环境搭建

--最具价值的嵌入式C语言1 C语言简介 C语言是国际上广泛流行的高级语言,是在B语言的基础上发展起来的, 1970年, 美国贝尔实验室的D.M.Ritchie设计了B 语言, 并用于编写了第一个UNIX操作系统。 1973年, D.M.Ritchie 在B语言的基础…

嵌入式C语言深入篇之 —— 变量

新建一个物联网行业交流学习QQ群,感兴趣可加:928840648 CUT 变量 可执行程序存储区 当一个C/C原码文件被编译链(比如gcc/g)编译及链接成为可执行程序后,由4个段组成,分别是:代码段&#xff…

嵌入式C语言编程技巧

基础语法编程技巧 变量 (1)变量名需见名知意,用英文单词命名,尽可能避免出现 a b 等单一字母的变量 (2)变量在定义同时进行初始化,防止乱码数据 (3)变量序号尽可能用英语…

嵌入式C语言强化学习——(嵌入式学习路线1)

前言 从零开始记录自己学习嵌入式,之前看稚晖君的视频,里面的费曼学习法觉得对自己很有帮助,所以准备把自己学习到的东西分享出来,便于学的更深(符合费曼学习法) 众所周知,嵌入式编一般是使用C…

嵌入式C语言开发

这是我的第一篇对ARM有有疑问并展开调查的文档总结,以备之后查阅。 首先的疑惑是发现之前的源码中都是在对寄存器做操作,所以对寄存器的地址是怎么被确定的就很疑惑。 搜索引擎关键词:嵌入式 寄存器 基地址 使用 参考《嵌入式15——HAL 库中…

嵌入式C语言编译过程

1.预处理 gcc -E -o a.i 001.c 把001.c输出为a.s文件。预处理的本质是把宏定义替换处理。#define ABC 123 2.编译 gcc -S -o a.s 001.c 3.汇编 gcc -c -i a.s 001.c 把c文件生成汇编文件 4.链接 gcc -o build 001.c把001.c生成build.exe可执行文件,从预处理开始。

嵌入式C语言自我修养分享课件

一.异构计算 1.背景: 随着物联网、大数据、人工智能时代的到来,海量的数据分析和大量复杂的运算对CPU 的算力要求越来越高,CPU 的大部分资源用于缓存和逻辑控制,适合运行各种复杂的串行程序,但是单核或者多核CPU处理性…

标准c语言与嵌入式,嵌入式C语言与C语言的区别

嵌入式C语言与C语言的区别:最常用的系统编程语言是C,它是在汇编语言中使用的一种简单的编程语言,源代码采用自由格式。Embeddedc是c语言用于编写嵌入式软件的扩展,这两者有什么区别? 首先是启动过程 1.普通C语言程序的…