[PTQ]均匀量化和非均匀量化

通信原理day7:第三章:抽样;均匀量化;非均匀量化;A律;增量(ΔM)调制 模拟信号的数字化通常包括抽样、量化和编码三个过程。 抽样将时域上连续的信号离散化,以便于量化处理; 量化则是将幅度上有无穷多种可能取值的连续模拟信号变成只有有限多种状态的数字信号(离散化); 编码则是将量化后的数字信号用某种二进制的码祖来表示。 1.抽样定理 对信号以fs的频率抽样后,系统的信息速率Rb=Nfs 低通信号的抽样定理 抽样频率 :ωs≥2ωH 本质:原信号在频域上频移ωs而不产生混叠... 阅读详情
AI摘要

本文讨论了均匀量化、PowersOfTwoQuant和AdditivePowersOfTwoQuant三种量化方法,重点关注它们在节省存储空间和加速推理方面的应用,以及对不同数据分布的适应性。通过Python代码示例展示了这些方法的实现。

均匀量化和非均匀量化

基本概念

  • 量化出发点:使用整型数据类型代替浮点数据,从而节省存储空间同时加快推理速度。
  • 量化基本形式
    • 均匀量化:浮点线性映射到定点整型上,可以根据scale/offset完成量化/反量化操作。
    • 非均匀量化
      • PowersOfTwoQuant:浮点映射成2的指数位上,根据power计算完成量化/反量化操作。
      • AdditivePowersOfTwoQuant:浮点映射成多个不同指数的和,而整型表示应该是跟硬件实现相关(后续待定聊聊)
  • 不同形式的量化对不同的数据分布的拟合程度不一样

均匀量化(UniformQuant)

  • 特点:

    • 适合range较大,分布较均匀的分布
    • 最普遍/大众的量化方式,基本上市面上的加速器都是只支持均匀量化
    • 可以很容易从对称量化扩展到非对称量化
  • python代码实现如下所示

    # 均匀量化
    class UniformQuant:
        def __init__(self, 
                    bit=8) -> None:
            self.bit = bit
    
        def quant(self, input, min=0.0, max=1.0):
            max_q = np.power(2, self.bit) - 1
            input = np.clip(input, min, max)
            scale = (max - min) / max_q
            q = np.clip(np.round(input / scale), 
                        0,
                        max_q)
            return q, scale
    
        def dequant(self, q, scale):
            return (scale * q).astype(np.float32)
    
        def fakequant(self, input):
            q, scale = self.quant(input)
            fakequant_input = self.dequant(q, scale)
            return fakequant_input
    

PowersOfTwoQuant

  • 特点:

    • 适合以0.0为中心的高斯分布数据,靠近0.0附近的精度非常高
    • 提高bits数,无法提高整体的精度
  • python代码实现如下所示

    # PoT量化
    class PowersOfTwoQuant:
        def __init__(self, 
                    bit=8) -> None:
            self.bit = bit
    
        def quant(self, input, alpha):
            max_q = np.power(2, self.bit) - 1
            input = np.clip(input / alpha, 0.0, 1.0)
            q = list()
            for i in input:
                if i == 0.0:
                    q.append(0)
                else:
                    e_tmp = np.log(i) / np.log(2.0)
                    e_tmp = np.round(e_tmp + max_q)
                    e_tmp = np.clip(e_tmp, 0, max_q)
                    q.append(e_tmp)
            q = np.array(q, dtype=np.uint32)
            return q
    
        def dequant(self, q, alpha):
            max_q = np.power(2, self.bit) - 1
            input = list()
            for i in q:
                if i == 0:
                    input.append(0.0)
                else:
                    input.append(np.power(2.0, i - max_q))
            
            input = np.array(input, dtype=np.float32)
            input = alpha * input
            return input
    
        def fakequant(self, input, alpha = None):
            if alpha is None:
                alpha = input.max()
            q = self.quant(input, alpha)
            fakequant_input = self.dequant(q, alpha)
            return fakequant_input
    
    

AdditivePowersOfTwoQuant

  • 特点:

    • 0.0附近的精度比均匀分布高
    • 提高bits数,可以提高整体的精度
    • 计算较为复杂,推理加速应该需要专门设计实现方式
  • python代码实现如下所示

    # APoT量化
    class AdditivePowersOfTwoQuant:
        def __init__(self, 
                    bit=8,
                    k=2) -> None:
            self.bit = bit
            self.k = k
            self.n = int(self.bit/self.k)
            self.p = np.array(self.gen_table(), dtype=np.float32)
            self.sort_values = self.get_all_values()
            self.sort_values.sort()
            # self.power_set = build_power_value(self.bit, additive=False)
            # self.power_set = self.power_set.detach().numpy()
    
        def get_all_values(self):
            m,n = list(self.p.shape)
            values = self.recursion_add(self.p.tolist())
            return np.array(values, dtype=np.float32)
        
    
        def recursion_add(self, input_list, callback=lambda a,b:a+b):
            # [list1, list2]
            res = list()
            if len(input_list) == 2:
                list1, list2 = input_list
                for a in list1:
                    for b in list2:
                        res.append(callback(a,b))
                return res
            elif len(input_list) > 3:
                tmp_input_list = input_list[:-2]
                tmp_res = self.recursion_add(input_list[-2:])
                tmp_input_list.append(tmp_res)
                return self.recursion_add(tmp_input_list)
            
    
        def gen_table(self):
            p = list()
            for i in range(self.n):
                one_lines_p = list()
                one_lines_p.append(0.0)
                for j in range(int(math.pow(2, self.k) - 2 + 1)):
                    one_lines_p.append(math.pow(2, -(i+j*self.n)))
                p.append(one_lines_p)
            return p
    
        def quant(self):
            # 待定
            pass
    
        def dequant(self):
            # 待定
            pass
    
        def fakequant(self, input):
            scale = input.max() / self.sort_values.max()
            fakequant_input = list()
            input = input / scale
            for v in input:
                argmin_index = np.argmin(np.abs(self.sort_values - v))
                tmp_value = self.sort_values[argmin_index]
                fakequant_input.append(tmp_value)
            fakequant_input = np.array(fakequant_input, dtype=np.float32) * scale
            return fakequant_input
    
    

试验展示

  • 数据分布在[0.0, 1.0]之间,全覆盖

  • 下图表示三种量化方式的x-fakequant_y的映射关系

    在这里插入图片描述

代码工程下载

下载地址

数字通信之量化(三) PCM 通信系统之信号的量化(三)1、均匀量化1.1、量化基本概念1.2、量化信噪比1.3、均匀量化的优缺点1.4、语音信号不能采用均匀量化2、非均匀量化2.1 非均匀量化的定义2.2、非均匀量化的实现方法2.2.1、压缩扩张技术2.2.2、直接非均匀编解码法2.2.3、非均匀量化和均匀量化对比3、量化信噪比3.1、均匀量化的信噪比3.2、非均匀量化的信噪比3.2.1、A律压扩特性的非均匀量化信噪比3.2.2、A率13折线压扩特性的信噪比     量化,是将幅度域上连续取值的信号(样值序列)变换为幅度域上离 阅读详情

相关推荐

【量化】PTQ4ViT: Post-Training Quantization Framework for Vision Transformers

作者的idea来源于对ViT中激活值的分布的观察,以及对不同评估量化误差的指标对比的观察。

Treasure Ashes 2049

非均匀量化

一、为什么需要非均匀量化? tensorflow,pytorch 等框架下也有量化操作,通常是为了减少权重存储空间,有利于部署移动端。但是基于数字电路的量化只能是均匀的,那么为什么还要研究非均匀量化呢? 忆阻器的电导权重是模拟量,本身具备非均匀量化的可能性,而且忆阻器电导的中间值比较不稳定,均匀量化的时候很难精确。 神经网络的权重本身是非均匀分布的,在密集的地方多取点,稀疏的地方少取点,量化后的误差会更小。 二、如何确定非均匀量化点? 选取的量化点有一个中心思想:它们最接近原始的分布。正好,数

http://www.icfgblog.com/ 7582

模型量化实战:从Uniform到APoT,一次搞懂三种主流PTQ方法(含避坑指南)

本文深入探讨了三种主流PTQ(Post-Training Quantization)方法在模型量化中的实战应用,包括Uniform量化、PoT量化和APoT量化。通过详细的技术解剖和实战案例,帮助开发者在精度、延迟和硬件兼容性之间找到最佳平衡点,特别适合移动端AI部署场景。

weixin_31897613的博客 234

非均匀量化的优点

  非均匀量化的优点: ① 在非均匀量化时,量化间隔和信号抽样值大小有关,抽样值越大,其量化间隔越大,抽样值越小,其量化间隔越小。这样当输入非均匀量化器的信号具有非均匀分布的概率密度的时候,非均匀量化器的输出端得到的平均信号量化噪声功率比较高。 ② 非均匀量化时,信号抽样值与量化噪声功率的均方根值成正比,也就是在信号抽样值越小,其量化噪声功率的均方根值越小,其信噪比越大,所以非均匀量化在处理...

dulingmo的博客 1万+

深度学习模型量化技术:原理与实践

模型量化是一种将深度学习模型从高精度浮点表示转换为低比特整型的关键技术,其核心原理是通过数学映射在保持模型性能的同时显著减少内存占用和计算开销。该技术通过scale-zero_point机制实现浮点到整型的线性变换,并发展出per-channel、对数量化等进阶方法。在工程实践中,量化技术能使模型内存占用降低75%以上,推理速度提升3倍,特别适合移动端和边缘计算场景。以Transformer和CNN为代表的现代神经网络中,混合精度量化和量化感知训练(QAT)已成为平衡精度与效率的主流方案,配合ARM SDO

weixin_29052717的博客 301

信号处理基础:信号的采样与量化_9.量化器类型:均匀量化与非均匀量化

均匀量化和非均匀量化是信号处理中的两种基本量化方法。均匀量化简单易实现,但可能在信号动态范围较大时导致较大的量化误差。非均匀量化通过调整量化步长,可以更好地适应信号的动态范围,减少量化误差,但实现复杂,计算量较大。选择合适的量化方法需要根据具体应用的需求和信号特性来决定。

2401_87715305的博客 1651

后训练量化(PTQ)完全指南:Awesome-Quantization-Papers核心方法总结

后训练量化(Post-Training Quantization,PTQ)是深度学习模型压缩领域的关键技术,能够在不重新训练模型的情况下显著降低模型存储和计算开销。本指南基于Awesome-Quantization-Papers项目的最新研究成果,为您深入解析PTQ的核心方法、应用场景和最佳实践。 ## 🚀 PTQ技术简介:为什么它是模型部署的必备技能? **后训练量化**是一种在模型训练完

gitblog_00939的博客 470

30、高效神经网络推理量化方法综述

本文综述了高效神经网络推理中的量化方法,系统地介绍了量化的基本概念与各类量化技术,包括均匀量化、非均匀量化、对称与非对称量化、动态与静态量化等。同时讨论了量化后的微调方法,如量化感知训练(QAT)和训练后量化(PTQ),以及随机量化的基本原理和应用。文章还针对不同场景提供了量化方法的选择建议,并展望了量化技术在未来的发展方向。通过合理选择量化策略,可以在保证模型精度的同时显著提升推理效率,适用于低功耗和资源受限的计算机视觉应用。

beta5的博客 191

定点化和模型量化(二)——量化的种类

一个问题是原有的激活函数是为分布在0~1的数据设计的,以sigmoid为例,浮点的时候要无限接近于1它才等于1,但量化数据很容易就大于1了,但从整个分布看这个值其实还处于比较低的水平。文章假设了BN-->relu这样的顺序结构,因此BN层得到的高斯分布,只有正半轴的部分保留了下来,此时不能直接使用BN的均值作为 E[x]。正如前面提到的,MobileNetV2的后量化会面临70.9% to 0.1%的准确度下降,但这篇文章不需要per channel量化,也不需要训练就可以得到接近原始精度的量化效果。

zcg1942的博客 1834

YOLOv5模型压缩方法:综述

在过去的几年里,广泛的研究致力于增强YOLO目标检测器。自YOLO提出以来,为了提高其准确性和效率,已经推出了8个主要版本。虽然YOLO的明显优点已被其在许多领域的广泛使用所取代,但将其部署在资源有限的设备上提出了挑战。为了解决这个问题,各种神经网络压缩方法被开发出来,这些方法主要分为三类,即网络剪枝、量化和知识蒸馏。利用模型压缩方法的丰硕成果,如降低内存使用和推理时间,使其有利于在硬件受限的边缘设备上部署大型神经网络。本文的重点是修剪和量化,因为它们比较模块化。

m0_47867638的博客 5212

字符串替换—牛客网(C++实现)

一.题目描述 请你实现一个简单的字符串替换函数。原串中需要替换的占位符为"%s",请按照参数列表的顺序一一替换占位符。若参数列表的字符数大于占位符个数。则将剩下的参数字符添加到字符串的结尾。 给定一个字符串A,同时给定它的长度n及参数字符数组arg,请返回替换后的字符串。保证参数个数大于等于占位符个数。保证原串由大小写英文字母组成,同时长度小于等于500。 测试样例: “A%sC%sE”,7,[‘...

qq_38358582的博客 1522

模型量化完全指南:从原理到实战加速大模型推理

模型量化技术通过将高精度参数(如Float32)转换为低精度格式(如INT8/INT4),有效压缩模型体积、提升推理速度并降低内存占用。主要分为后训练量化(PTQ)和量化感知训练(QAT)两种方式,采用均匀/非均匀量化策略。针对大模型特点,权重量化、激活值量化和梯度量化能显著减少存储和计算开销,结合静态/动态量化策略可平衡精度与效率。量化技术涉及参数粒度选择(逐层/逐通道)、位宽确定(统一/混合精度)以及误差优化方法(MSE/KL散度),是大模型部署的关键优化手段,广泛应用于视频处理、点云分析等领域。

2401_84204413的博客 775

基于RYU+Mininet的SDN校园网络实战:从零搭建虚拟化实验环境

本文详细介绍了如何利用RYU控制器和Mininet搭建SDN校园网络实验环境,从Ubuntu虚拟机准备到网络拓扑设计,再到关键网络功能实现。通过实战案例展示SDN在校园网络中的应用优势,包括简化配置、提升效率等,为网络工程师和学生提供了一套完整的虚拟化实验方案。

weixin_30872499的博客 455

【技术纵览】神经网络量化方法:从理论到高效推理的实践全景

本文全面解析神经网络量化方法,从理论到高效推理的实践全景。探讨了量化技术在模型压缩、计算加速和能效优化中的关键作用,包括均匀量化、非均匀量化的硬件适配,以及训练后量化(PTQ)和量化感知训练(QAT)的实战技巧。通过案例展示了量化在嵌入式设备和大模型部署中的实际应用,为开发者提供从实验室到工业落地的完整解决方案。

weixin_30307921的博客 417

Win11上从零跑通Carla自动驾驶仿真:保姆级环境配置与避坑指南(Python 3.7+)

本文详细介绍了在Win11系统上从零配置Carla自动驾驶仿真环境的完整流程,包括Python 3.7+环境搭建、依赖安装、常见问题排查及性能优化技巧。通过保姆级教程帮助开发者快速避坑,实现稳定的自动驾驶仿真测试环境部署。

weixin_33488239的博客 420

Spring Boot 实现多图片上传并回显,涨姿势了~

上传 Controller的代码非常简单,由于用了SpringMVC框架,所以直接用MultipartFile来接即可。由于是多图片上传所以用数组来接。此处应该注意参数名应该和<input>中的name值相对应: @RequestMapping("/pic") @ResponseBody publicResponseEntity<String>pic(MultipartFile[]pictures)throwsException{ ResponseEnti...

weixin_54556126的博客 893

QLoRA 原理与量化类型是什么?

QLoRA将基座模型4-bit量化冻结,只训练LoRA低秩参数,显著降低显存。其核心技术包括NF4非均匀量化、Double Quantization压缩量化常数和Paged Optimizers。量化类型需区分位宽、映射及粒度;QLoRA属于基座权重4-bit存储,计算时反量化至高精度,并非全模型低比特运算。

Penheim的博客 295

Python - 多页pdf 合称为一页

尝试使用 ReportLab 来重画 pdf,但探索起来有点麻烦。重要的是解决手头这个问题,所以就算方法蠢,但简单完事。以下生成结果,最有一页 pdf 可能会显示在第一页,手动编辑下 pdf 即可;或者你也可以修改代码逻辑来完善。打印ppt,一页占用A4纸比较浪费,想多页合成一个 A4大小;安装 fitz,单独安装 fitz 使用可能会报错。将 PDF 拆分为 图片来保存。

AI工程化、开源分享、文档翻译、代码笔记 1425

AI模型量化技术:原理、实践与部署优化

模型量化是深度学习模型压缩的核心技术之一,通过降低模型参数的数值精度(如从FP32到INT8)来减少存储占用和计算开销。其基本原理是将浮点数值映射到离散的整数区间,利用硬件对整数运算的高效支持实现加速。在工程实践中,量化技术能显著提升模型在边缘设备上的部署效率,例如将ResNet-50模型大小从98MB压缩至24MB。典型的应用场景包括移动端视觉识别、嵌入式语音处理等。当前主流方法包含训练后量化(PTQ)和量化感知训练(QAT),其中QAT通过模拟量化误差能更好保持模型精度。值得注意的是,混合精度量化和知识

weixin_29041195的博客 290

ARM交叉编译gdbserver并远程在线调试

arm-linux平台。5、生成完整的makefile,新建full_install,执行 ./configure --target=arm-linux-gnueabihf --host=arm-linux-gnueabihf --program-prefix=arm-linux-gnueabihf- CC=arm-linux-gnueabihf-gcc --prefix=/home/geyuxi/Documents/full_install。如果--host和--build不同,是交叉编译;

wangjie36的博客 3168

PyCharm 2024最新版图文安装教程(python环境搭建+PyCharm安装+运行测试+汉化+背景图设置)

PyCharm 2024新版图文安装教程(python环境搭建+PyCharm安装+运行测试+汉化+背景图设置)

Code_流苏:在代码中寻诗意,在实践中觅真知 4万+

大模型量化是什么?INT8/INT4/AWQ/GPTQ 怎么选?

INT8 和 INT4 告诉我们模型用了多少位;GPTQ、AWQ、SmoothQuant 告诉我们如何降低精度;QLoRA 告诉我们如何在低比特基础权重上继续训练;GGUF 和 safetensors 则负责模型如何落盘。把这些层次分开,量化选型就不会只剩下“哪个文件更小”。真正可靠的方案,必须在自己的模型、硬件、框架和业务数据上同时验证质量、显存、延迟与吞吐。量化没有绝对冠军,只有更适合当前约束的组合。

闵浮龙的博客 418

YOLO26科研优化:多损失函数(EIoU、SIoU等)融合,让边界框回归精度再上台阶

将原有损失函数替换为我们编写的MultiLoss。例如,在bbox_loss。

LXY_LOVE36的博客 171

AI模型量化与精度平衡策略

模型量化主要分为训练后量化(PTQ)和量化感知训练(QAT)。模型量化通过降低计算精度(如将32位浮点转为8位整数)来压缩模型体积、提升推理速度,但过度量化可能导致精度显著下降。例如,Transformer模型可通过分析各层敏感度,动态分配16位与8位精度,实现5倍压缩的同时精度损失小于1%。非均匀量化(如对数缩放)能为敏感层保留更精细的数值分布,而均匀量化则实现更简单的硬件加速。未来,随着自适应量化算法和专用硬件的成熟,轻量化与高精度的矛盾将进一步化解,推动AI在物联网、自动驾驶等领域的普惠应用。

ijkjff_628的博客 153

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

模型量化技术:从原理到工程实践的全景解析

模型量化作为深度学习模型压缩的核心技术,通过降低数值精度(如FP32→INT8)实现模型轻量化。其技术原理基于数值范围的线性/非线性映射,利用scale-zero_point机制保持计算等价性。在工程价值上,量化能显著降低模型存储体积(75%+)和加速推理(3-4倍),成为移动端/边缘计算场景的刚需技术。当前主流方案包括训练感知量化(QAT)和硬件协同设计,其中TensorRT的per-channel量化、LLM.int8()的混合精度策略等热词技术已广泛应用于计算机视觉、NLP等领域。随着大模型时代到来,

weixin_31100517的博客 184

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

模型量化的‘减肥’经济学:当AI遇见资源约束的现实世界

本文深入探讨了模型量化技术在AI产业化中的商业价值与实践应用,揭示了其作为算力资源货币化策略的经济学意义。通过INT8、FP16等量化方法,模型在保持高精度的同时显著降低内存占用和推理延迟,实现部署成本的大幅优化。文章结合移动端、工业质检等场景案例,展示了量化技术如何提升边缘计算效率,并展望了1-bit量化、非均匀量化等前沿发展方向。

defi6farmer的博客 644

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

上一篇: 【PTQ】Cross-Layer Equalization跨层均衡-证明和实践详细解读
下一篇: Disasm 示例程序改写和适配
慷仔
博客等级 码龄9年 88粉丝 46原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值