离线量化算法和工具 --学习记录1
离线量化算法和工具
- 一、离线量化的基础概念
- 1.1、基本流程
- 1.2、量化的优点和缺点
- 1.3、如何生产一个硬件能跑的量化模型
- 1.4、PTQ的概念以及和QAT的区别
- 1.5、离线量化的标准流程
- 1.6、校准数据的选择
- 1.7、量化模式的选择
- 1.8、校准方式的选择
- 1.9、量化算法的选择
- 1.10、写入量化参数
一、离线量化的基础概念
1.1、基本流程
模型: 特指深度神经网络(用于提取图像/视频/语音/文字特征)
量化: 将信号的连续取值(或者大量可能的离散取值)近似为有限多个(或较少的)离散值的过程。
量化推理的流程(以8bit为例):
1.将该层权重量化成int8(通过权重的量化参数);
2.将该层输入激活量化为int8(通过激活的量化参数)
3.int8的激活和权重参与该层的运算(比如下图的 Conv2D),
4.将该层输出激活反量化为浮点格式并送入下一层。
1.2、量化的优点和缺点
模型量化优点:
减少内存: 量化的过程就将神经网络参数的32位浮点数表示,转换为更小的表示形式,例如8位整数。例如,从 32 位变为 8位将使模型大小减少4倍,因此量化的一个明显好处是显著减少内存。
加速推理: 由于可以使用整数而不是浮点数据类型执行操作,因此网络速度得到了提高。 整数运算在大多数处理器内核(包括微控制器)上需要更少的计算。
模型量化缺点:
量化的代价是神经网络可能会失去准确性,因为它们不能精确地表示信息。

1.3、如何生产一个硬件能跑的量化模型

1.4、PTQ的概念以及和QAT的区别
离线量化又称为训练后量化(Post-Training Quantization, PTQ),仅需要使用少量校准数据,确定最佳的量化参数降低量化误差。这种方法需要的数据量较少,但量化模型精度相比在线量化(Quantization Aware Training,QAT)稍逊一些。
PTQ 仅仅使用校准数据计算量化参数(scale,zero-point),而QAT是学习量化参数,甚至训练权重,所以其精度较好。但是PTQ因为其简单易用性,在工业界通常作为量化的第一选择。


1.5、离线量化的标准流程
- 选择校准数据:与训练/测试数据同源,非常重要;
- 选择量化模式:根据目标硬件,选择量化模式(对称/非对称,per-tensor/channel)
- 选择校准算法:通过自己的量化工具或者推理后端自带的默认量化工具,选择校准算法,校准每一层的激活的量化参数(scale,zero_point)(weight一般不用校准)
- 选择量化算法:通过量化工具,使用高阶的PTO算法调整权重;
- 写入量化参数:如果是自己手动产出的量化参数,需要将量化参数塞到模型里,部署到目标硬 件;
- 混合精度:量化误差分析及混合精度部署(可选,当量化精度比较差时
1.6、校准数据的选择
- 工业界的实际量化中,如果可以选择校准数据,尽量遵循以下原则:
量化数据不能太少,最好100-200张,具体数目可根据实际情况调整量化数据与训练/测试数据的来源、类别是相似的。 - 量化数据最好来源于测试数据的按
类sample或者随机sample。量化数据的预处理方式和训练/测试时的预处理方式是一致的,注意BGR/RGB,mean,std等数值的一致性。 由于离线量化只能拿到部分数据,因此校准数据是否能代表实际场景至关重要- 在实际使用中经常遇到校准集不够好导致量化掉点的情况。
学术界将该问题极端化,定义了两种场景
- 无数据量化
- Cross-domain量化
1.7、量化模式的选择
(主要是确定量化方案在自己的硬件是否有合适的推理库)

1.8、校准方式的选择
- 量化校准方法:Min Max
量化是深度学习模型优化中的一项关键技术,特别是在推理阶段。Min Max 是一种常见的量化校准方法,用于确定量化参数,如 scale(缩放因子)和 zero_point(零点)。
一、对称量化 (Symmetric Quantization)
在对称量化中,量化后的值围绕零点对称。scale 计算公式:
scale = 255 / (2 * max(abs(x))) (对于8位整数,考虑无符号或已处理符号的情况)其中,x 是浮点数的激活张量,max(abs(x)) 是 x 中绝对值的最大值。zero_point:
在对称量化中,zero_point 总是 0。
二、非对称量化 (Asymmetric Quantization)
非对称量化允许量化后的值不围绕零点对称,适用于数据分布不对称的情况。scale 计算公式:
scale = (max(x) - min(x)) / 255 (对于8位整数)其中,max(x) 和 min(x) 分别是 x 中的最大值和最小值。zero_point 计算公式:
zero_point = Clip(Round(min(x) / scale), -128, 127) (对于8位整数)其中,Clip 函数确保 zero_point 在 -128 和 127 的范围内,Round 函数用于四舍五入。

- KL Divergence(Tensorrt常用的量化方式):
KL Divergence:使用参数在量化前后的KL散度作为量化损失的衡量指标。

- Histogram:
Histogram: 首先采用KL散度的方式将所有参数映射为直方图,然后根据给定百分比,选取直方图的百分位点作为截断值。此方法可以去除掉一些极端值,并且可以灵活调节直方图百分比来调整截断值大小,以适应不同模型
- MSE:
MSE: 使用均方误差作为模型量化前后输出的损失的衡量指标。选取使得激活值在量化前后的均方误差最小的量化参数。此方法较为耗时,但是效果常常优于其他方法。
1.9、量化算法的选择

1.10、写入量化参数
很多推理后端都支持写入量化参数或者写入每一层tensor的range以TensorRT为例,假设我们通过自己的量化工具得到了每一层激活tensor的range,如下方左图,就可以通过下方右图所示的脚本写入到模型里。

相关文章:
离线量化算法和工具 --学习记录1
离线量化算法和工具 一、离线量化的基础概念1.1、基本流程1.2、量化的优点和缺点1.3、如何生产一个硬件能跑的量化模型1.4、PTQ的概念以及和QAT的区别1.5、离线量化的标准流程1.6、校准数据的选择1.7、量化模式的选择1.8、校准方式的选择1.9、量化算法的选择1.10、写入量化参数…...
python第七课
WSGI Middleware 中间件,可以理解称对应用程序的一组装饰器,对两边都起作用的元素。 重写environ,然后基于URL,将请求对象路由给不同的应用对象支持多个应用或者框架顺序地运行于同一个进程中通过转发请求和相应,支持负…...
华为IPD简介
创作灵感 现在“熟悉华为IPD”经常出现在高级招聘岗位能力要求上,于是作者写下此文章以此巩固相关知识储备 名词解释 华为IPD(Integrated Product Development,集成产品开发)是华为引入并优化的一套产品开发管理体系࿰…...
如何在Spring Boot中配置分布式配置中心
文章目录 如何在Spring Boot中配置分布式配置中心分布式配置中心的概念1. 集中管理2. 动态配置3. 环境隔离4. 安全性5. 可扩展性与适应性6. 与 CI/CD 流程的集成Spring Cloud Config 概述1. 集中式配置管理2. 多环境支持3. 版本控制4. 动态刷新5. 安全性6. 与微服务架构的无缝集…...
Golang internals
To be continued... time.Time golang的时区和神奇的time.Parse context.Context Go Context的踩坑经历 sync.Pool sync.Pool workflow in Go 1.12 new shared pools in Go 1.13 什么是cpu cache理解 Go 1.13 中 sync.Pool 的设计与实现Go: Understand the Design of Sync.Pool…...
天翼云910B部署DeepSeek蒸馏70B LLaMA模型实践总结
一、项目背景与目标 本文记录在天翼云昇腾910B服务器上部署DeepSeek 70B模型的全过程。该模型是基于LLaMA架构的知识蒸馏版本,模型大小约132GB。 1.1 硬件环境 - 服务器配置:天翼云910B服务器 - NPU:8昇腾910B (每卡64GB显存) - 系统内存&…...
数据治理常用的开源项目有哪些?
数据治理是企业在大数据时代中确保数据质量、安全性和可用性的关键环节。开源项目在数据治理中扮演着重要角色,提供了灵活、经济高效且功能强大的解决方案。以下是一些常用的开源数据治理项目: Apache Atlas: 功能:元数据管理、数…...
数据结构与算法之排序算法-(计数,桶,基数排序)
排序算法是数据结构与算法中最基本的算法之一,其作用就是将一些可以比较大小的数据进行有规律的排序,而想要实现这种排序就拥有很多种方法~ 📚 非线性时间比较类: 那么我将通过几篇文章,将排序算法中各种算法细化的&a…...
Word正文中每两个字符之间插入一个英文半角空格
Word正文中每两个字符之间插入一个英文半角空格 修改前 修改后 替换方法 快捷键 Ctrl H 唤出查找和替换界面依次输入上述内容全部替换即可 参考链接 【【2025年3月】计算机二级MS Office 2016 真题讲解视频打卡】 【精准空降到 25:27】...
把 DeepSeek1.5b 部署在显卡小于4G的电脑上
这里写自定义目录标题 介绍准备安装 Ollama查看CUDA需要版本安装CudaToolkit检查Cuda是否装好设置Ollama环境变量验证是否跑在GPU上ollama如何导入本地下载的模型安装及配置docker安装open-webui启动open-webui开始对话 调整gpu精度 介绍 Deepseek1.5b能够运行在只用cpu和gpu内…...
A4988一款带转换器和过流保护的 DMOS 微步驱动器的使用方式
A4988是一款带转换器和过流保护的 DMOS 微步驱动器,用于驱动双极步进电动机。它支持全、半、1/4、1/8 及 1/16 步进模式,输出驱动性能可达 35 V 及 2 A。其特点包括简单的步进和方向控制接口、可调电位器调节最大电流输出、自动电流衰减模式检测/选择以及…...
一口井深7米,一只蜗牛从井底往上爬每天爬3米掉下去1米,问几天能爬上井口?
一个井深7米,一只蜗牛从井底往上爬每天爬3米掉下去1米,问几天能爬上井口? 1. 通用解法 构建一个通用的解法,适用于任何井深和蜗牛的爬升、下滑距离。 问题描述: 井深为 H H H 米。蜗牛每天向上爬升 U U U 米。每…...
Asp.Net Core MVC 中级开发教程
Asp.Net Core MVC 中级开发教程 一、Asp.Net Core Mvc 区域使用 ASP.NET Core MVC的Areas使用整理 - 天马3798 - 博客园 二、Asp.Net Core 路径处理 Asp.Net Core Web相对路径、绝对路径整理 Asp.Net Core获取当前上下文对象 三、Asp.Net Core 服务使用和封装 四、Asp.Net …...
Windows上安装Go并配置环境变量(图文步骤)
前言 1. 本文主要讲解的是在windows上安装Go语言的环境和配置环境变量; Go语言版本:1.23.2 Windows版本:win11(win10通用) 下载Go环境 下载go环境:Go下载官网链接(https://golang.google.cn/dl/) 等待…...
C++效率掌握之STL库:string底层剖析
文章目录 1.学习string底层的必要性2.string类对象基本函数实现3.string类对象的遍历4.string类对象的扩容追加5.string类对象的插入、删除6.string类对象的查找、提取、大小调整7.string类对象的流输出、流提取希望读者们多多三连支持小编会继续更新你们的鼓励就是我前进的动力…...
【Erdas实验教程】004:影像镶嵌拼接
文章目录 一、实验目标二、实验数据三、实验过程一、实验目标 掌握具有坐标系且有重叠的多个影像的镶嵌。 二、实验数据 本实验数据为2景landsat TM影像和1景mss影像,如下所示: 数据获取方式:订阅专栏后,从私信查收。 三、实验过程 (1)启动镶嵌工具 在erdas中,常用…...
SpringMVC 请求参数接收
目录 请求 传递单个参数 基本类型参数传递 未传递参数 ?传递参数类型不匹配 传递多个参数 传递对象 后端参数重命名 传递数组 传递集合 传递JSON数据 JSON是什么 JSON的优点 传递JSON对象 获取URL中的参数 文件上传 在浏览器与程序进行交互时,主要…...
[高等数学]换元积分法
一、知识点 (一) 第一类换元法 定理1 设 f ( u ) f(u) f(u) 具有原函数, u φ ( x ) u\varphi(x) uφ(x) 可导,则有换元公式: ∫ f [ φ ( x ) ] φ ′ ( x ) d x [ ∫ f ( u ) d u ] u φ ( x ) . \int f[\varphi(x)]\varphi (x)dx[\int f(u)du]…...
Redis简介、常用命令及优化
文章目录 一、关系数据库??与非关系型数据库概述 1. 关系型数据库2. 非关系型数据库3.关系数据库与非关系型数据库区别 二、Redis简介 1.Redis的单线程模式2.Redis 优点3.Redis 缺点 三、安装redis四、Redis 命令工具五、Redis 数据库常用命令六、Redis 多数据库常用命令七、…...
大模型训练为什么依赖GPU
近年来,随着人工智能技术的飞速发展,特别是深度学习领域的进步,大模型的训练逐渐成为研究和工业界的热点。作为大模型训练中的核心硬件,GPU(图形处理单元)扮演了至关重要的角色。那么,为什么大模…...
小米TTS引擎接入OpenAI API标准接口:实现中文语音合成的本地化部署与生态兼容
1. 项目概述:将小米TTS引擎接入OpenAI API标准接口最近在折腾语音合成应用时,发现了一个挺有意思的需求:很多开发者想用小米的语音合成技术,但它的官方接口要么调用复杂,要么有各种限制。与此同时,像OpenAI…...
BarTender如何取消激活和重新激活
一、取消激活1、多台电脑、服务端取消激活方法A、打开Administration ConsoleB、许可—选中当前许可证—右键选择取消激活许可证C、点击下一步D、取消激活中E、取消激活成功,许可证没有处于激活的状态2、只安装了单台电脑的情况取消激活可以按照上述取消激活方式进行…...
c#插入排序
插入排序 两个区域 未排序区 用一个索引值做分水岭 未排序区元素与排序区元素比较插入到合适位置 直到未排序区清空 前提规则 排序开始 时,首先认为第一个元素在排序区中 其他所有元素在未排序区 排序开始后 每次将未排序区第一个元素取出用于和 排序区中的…...
Redis别再只当缓存用!8种常用数据结构+实战选型,一看就会
大家好,我是直奔標竿!做开发的朋友应该都有这种体会:学Redis入门,基本上都是从GET/SET开始,简单好记,上手也快。可一到实际项目里就犯难——不管什么数据,都往String里塞,到最后Redi…...
圣禾堂在线正式成为AIT创瑞科技授权代理商,全品类元器件现货供应保障升级
圣禾堂(深圳)电子科技有限公司(简称:圣禾堂在线)宣布与AIT创瑞科技达成战略合作,正式获得其授权代理证书。此次合作标志着圣禾堂在线在电源管理、存储芯片、分立器件及被动元件等领域的产品矩阵进一步丰富&…...
别再让Excel导入报错!用EasyExcel+自定义监听器搞定6种数据校验(附完整代码)
用EasyExcel构建企业级Excel导入校验体系的实战指南 每次运营人员上传Excel表格时,后台服务就像在拆盲盒——你永远不知道会收到格式混乱的数据、缺失的字段还是重复的记录。传统的数据校验方式往往在全部读取完成后才进行验证,这不仅浪费服务器资源&…...
ChatGPTBox:浏览器AI侧边栏插件部署与效率提升实战指南
1. 项目概述与核心价值最近在折腾浏览器插件,发现一个叫 ChatGPTBox 的开源项目挺有意思。简单来说,它不是一个独立的聊天机器人,而是一个功能强大的浏览器侧边栏工具。你可以把它理解为一个“瑞士军刀”,把各种主流AI模型&#x…...
CryptoGPT:基于LangChain的AI智能体实现链上金融操作实践
1. 项目概述:当大语言模型学会“自己赚钱” 最近在捣鼓一个挺有意思的实验性项目,叫 CryptoGPT。这名字听起来可能有点唬人,但它的核心想法其实挺直接的: 让像 ChatGPT 这样的大语言模型(LLM)能够自主地进…...
YOLO11涨点优化:Loss魔改 | 结合VariFocal Loss,不对等处理正负样本,大幅缓解密集目标检测的误检率
〇、写在前面:密集场景下的误检之痛 做目标检测的朋友,想必都遇到过这样的场景——你信心满满地跑完模型推理,打开可视化结果一看,一张图上密密麻麻全是框,正样本、负样本、高置信度误检、低置信度正检搅在一起,像一团解不开的毛线球。这就是密集目标检测中最让人头疼的…...

