当前位置: 首页 > news >正文

离线量化算法和工具 --学习记录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,集成产品开发)是华为引入并优化的一套产品开发管理体系&#xff0…...

如何在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(图形处理单元)扮演了至关重要的角色。那么,为什么大模…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

AI,如何重构理解、匹配与决策?

AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

Linux 中如何提取压缩文件 ?

Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...

GitFlow 工作模式(详解)

今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...

tomcat入门

1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...