七、深入学习TensorRT,Quantized

news/2025/2/8 23:48:12/

Working with Quantized Types(一)

  • Quantization Workflows
    • Post-training quantization (PTQ)
    • Quantization-aware training (QAT)
    • Quantization Modes

距离上一篇文章已经过去快一年了,这一年也真够忙的,也够累的,躺平吧又躺不平,赚钱吧又赚不到,先混着吧,考虑到对于部署的人来说,TensorRT的确非常重要,而且自己还有很多不会的地方,所以还是想着把剩下没有滤掉的地方认真搞一下,特别是后面的plugin部分,估计是面试的重点和难点。
这一节我们来学习一下量化的知识。
官方文档说TensorRT支持的量化方法是对称量化,支持有符号int8、FP8、有符号int4、和FP4,量化到反量化也只是一个简单的乘法操作,使用sacle的倒数,再经过clamping、rounding或者casting进行。TensorRT对激活值+权重的量化支持int8、fp8、fp4,但是对于Weight-only的量化,也就是只量化权重的情况只支持int4。

Quantization Workflows

对于网络的量化,有两种方式,分别是PTQ和QAT

Post-training quantization (PTQ)

对网络进行训练后得到尺度因子。TensorRT为PTQ提供了一个称为calibration的工作流程。当网络在代表性输入数据上执行时,它测量每个激活张量内的激活分布,然后使用该分布来估计每个张量的缩放值

Quantization-aware training (QAT)

利用伪量化计算训练过程中的尺度因子,模拟量化和反量化过程。这允许训练过程补偿量化和反量化操作的影响。
可以使用Quantization Toolkit来进行QAT和PTQ,在github仓库里,这部分缺少guide,暂时放过,后面有机会补充。
几种量化算法:
int8:
首先统计出ch通道的最大最小值,然后计算出s,再然后x/s,并且约束范围到[-128, 127]
在这里插入图片描述
FP8:
基本一致,只是约束的范围不同而已
在这里插入图片描述
int4:
在这里插入图片描述
上方的舍入规则:
Round half to even 的规则:
如果舍入的数值的尾数正好是中间值(例如 0.5、5.5 等),则舍入到最近的偶数。
否则,按照常规的舍入规则进行舍入。

Quantization Modes

tensorrt支持三种量化尺度

  1. 逐张量量化:单个尺度值(标量)用于缩放整个张量。
  2. 逐通道量化:一个尺度张量沿着给定的轴传播——对于卷积神经网络,这通常是通道轴,就是按照通道方向进行统计
  3. 块量化:张量沿着单个维度分成固定大小的1维块。为每个块定义一个比例因子
    激活值只能使用逐张量量化,权重这几种方法都支持
    对于其中的范围,你可以手动设置,需要使用setDynamicRange这个函数来:
tensor->setDynamicRange(min_float, max_float);

剩下的官方文档说了一堆,目前感觉没啥用,就不看了。


http://www.ppmy.cn/news/1570444.html

相关文章

C++----继承

一、继承的基本概念 本质:代码复用类关系建模(是多态的基础) class Person { /*...*/ }; class Student : public Person { /*...*/ }; // public继承 派生类继承基类成员(数据方法),可以通过监视窗口检…

力扣-字符串-541 反转字符串Ⅱ

思路 和《反转字符串》的代码类似&#xff0c;只是每次处理2k个 代码 class Solution { public:string reverseStr(string s, int k) {int length s.length();int reverse 0;while(reverse < length){int left, right;if(reverse k < length){left reverse, right…

CSS Fonts(字体)

CSS Fonts(字体) 在网页设计中,字体是传达信息、增强用户体验和提升视觉效果的关键元素。CSS(层叠样式表)提供了丰富的工具和属性来控制网页中的字体样式。本文将详细探讨CSS字体相关的知识,包括字体的选择、样式设置、响应式设计以及跨浏览器兼容性等问题。 字体选择 …

ARM嵌入式学习--第十三天(I2C)

I2C --介绍 I2C&#xff08;Inter-intergrated Circuit 集成电路&#xff09;总线是Philips公司在八十年代初推出的一种串行、半双工的总线&#xff0c;主要用于近距离、低速的芯片之间的通信&#xff1b;I2C总线有俩根双向的信号线&#xff0c;一根数据线SDA用于收发数据&…

【鸿蒙开发】第二十四章 AI - Core Speech Kit(基础语音服务)

目录 1 简介 1.1 场景介绍 1.2 约束与限制 2 文本转语音 2.1 场景介绍 2.2 约束与限制 2.3 开发步骤 2.4 设置播报策略 2.4.1 设置单词播报方式 2.4.2 设置数字播报策略 2.4.3 插入静音停顿 2.4.4 指定汉字发音 2.5 开发实例 3 语音识别 3.1 场景介绍 3.2 约束…

java面试题-集合篇

Collection 1.Collection有哪些类&#xff1f; Java集合框架中的Collection接口是所有集合类的基础接口&#xff0c;定义了一些基本的集合操作&#xff0c;如添加元素、删除元素、判断是否包含某个元素等。常见的集合类包括List、Set和Queue。 List List接口定义了按照索引…

RabbitMQ 从入门到精通:从工作模式到集群部署实战(一)

#作者&#xff1a;闫乾苓 文章目录 RabbitMQ简介RabbitMQ与VMware的关系架构工作流程RabbitMQ 队列工作模式及适用场景简单队列模式&#xff08;Simple Queue&#xff09;工作队列模式&#xff08;Work Queue&#xff09;发布/订阅模式&#xff08;Publish/Subscribe&#xff…

使用ES5和ES6求函数参数的和、解析URL Params为对象

文章目录 1 使用ES5和ES6求函数参数的和1.1 ES51.2 ES6 2 解析URL Params为对象 1 使用ES5和ES6求函数参数的和 1.1 ES5 function sum() {let sum 0;Array.prototype.forEach.call(arguments, function(item) {sum item * 1;})return sum; }1.2 ES6 function sum(...nums)…