CANN/amct压缩概念详解

news2026/5/9 17:26:16
压缩概念【免费下载链接】amctAMCT是CANN提供的昇腾AI处理器亲和的模型压缩工具仓。项目地址: https://gitcode.com/cann/amct本节给出模型压缩过程中用到的概念并介绍了不同压缩方法的原理。量化量化是指对模型的权重weight和数据activation进行低比特处理让最终生成的网络模型更加轻量化从而达到节省网络模型存储空间、降低传输时延、提高计算效率达到性能提升与优化的目标。AMCT将量化和模型转换分开实现对模型中可量化算子的独立量化并输出量化后的模型。该模型可以在昇腾AI处理器上运行达到提升推理性能的目的。以量化到INT8数据类型为例其运行原理如下图所示。量化根据是否需要重训练分为训练后量化Post-Training Quantization简称PTQ和量化感知训练Quantization-Aware Training简称QAT概念解释如下数据类型概念HIFloat8HiF8HIFloat8HiF8是AI处理器定制的新8比特浮点数据格式由Sign位符号位表示数值的正负、Dot位、Exponet位指数位用于表示数值的范围和Mantissa位尾数为用于表示数值的有效数字组成。HiF8在IEEE 754的基础上扩增了一个点位域Dot用于动态调整阶码域位宽和尾数域位宽。其中S为HiF8符号域数值E为HiF8阶码域数值M为HiF8尾数域数值dot位为0b’0000时HiF8数据为Denormal value。转换原则如下用户可在配置文件中自行配置详情请参见config详细配置float32/bfloat16/float16的NAN转换为HiF8的NAN。float32/bfloat16/float16的INF转换为HiF8的INF符号位不变。float32/bfloat16/float16绝对值大于HiF8的可表示范围上限转换为HiF8的MAX符号位不变。float32/bfloat16/float16绝对值小于HiF8的可表示范围下限转换为HiF8的0。其他值按照舍入模式进行转换。注意HiF8或float8数据由于本身数据精度问题当原始输入数据中存在绝对值小于1.5*2^-10的数据时转换为float8的精度无法保证原始数据中存在绝对值小于1.5*10^-24的数据时转换为HiF8的精度无法保证。FLOAT8float8float8是float16的衍生物有E4M3和E5M2两种编码格式。当前仅支持E4M3编码格式。E4M3包含4比特指数、3比特尾数以及1比特符号位训练时前向传播使用。E5M2包含5比特指数、2比特尾数以及1比特符号位训练时反向传播使用。E4M3相比E5M2数据范围更小但是精度更高多用于推理场景。转换原则如下用户可在配置文件中自行配置详情请参见config详细配置float32/bfloat16/float16的NAN转换为float8的NAN。float32/bfloat16/float16绝对值大于float8的可表示范围上限转换为float8的MAX符号位不变。float32/bfloat16/float16绝对值小于float8的可表示范围下限转换为float8的0。其他值按照“Round to nearest, tie to Even”的舍入模式进行转换。MXFP8MXFP8是基于Microscaling微缩放格式的低精度8位浮点数表示方法它由scale缩放因子和element元素组成多个element共享一个scale相比传统的16位浮点数fp16或32位浮点数fp32能显著减少数据存储和传输需求减少大模型显存占用从而提升产品推理竞争力。FP8_E4M3FN是FP8数据格式的一种一种8位浮点量化格式包含4比特指数、3比特尾数以及1比特符号位FP8_E4M3FN而MXFP8比FP8多了Shared Exponent一种数据表示方法多个元素共享一个指数exponent通过微缩放技术相比FP8能够提供更高的精度和更细的量化粒度。转换原则如下用户可在配置文件中配置该类型详情请参见config详细配置float32/bfloat16/float16到float8的转换float32/bfloat16/float16的NAN转换为float8的NAN。float32/bfloat16/float16绝对值大于float8的可表示范围上限转换为float8的MAX符号位不变。float32/bfloat16/float16绝对值小于float8的可表示范围下限转换为float8的0。其余值按照“Round to nearest, tie to Even”的舍入模式(RINT)转换到FP8_E4M3FN。MXFP8数据格式转换对于torch.nn.Linear算子Weight Tensor数据按照-1轴方向每32个数据计算一个shared exponent计算公式如下MXFP4MXFP4也是基于Microscaling微缩放格式的低精度4位浮点数表示方法它由scale缩放因子和element元素组成多个element共享一个scale相比传统的16位浮点数fp16或32位浮点数fp32能显著减少数据存储和传输需求减少大模型显存占用从而提升产品推理竞争力。FP4_E2M1是FP4数据格式的一种一种4位浮点量化格式包含2比特指数、1比特尾数以及1比特符号位FP4_E2M1而MXFP4比FP4多了Shared Exponent一种数据表示方法多个元素共享一个指数exponent通过微缩放技术相比FP4能够提供更高的精度和更细的量化粒度。转换原则如下用户可在配置文件中配置该类型详情请参见config详细配置float16/bfloat16到FP4_E2M1的转换小于FP4_E2M1的数值转换到FP4_E2M1最小值大于FP4_E2M1的数值转换到FP4_E2M1最大值NAN和INF不支持转换其余值按照“Round to nearest, tie to Even”的舍入模式(RINT)转换到FP4_E2M1。MXFP4数据格式转换对于torch.nn.Linear算子Weight Tensor数据按照-1轴方向每32个数据计算一个shared exponent计算公式如下FP4_E2M1FP4_E2M1是FP4数据格式的一种一种4位浮点量化格式包含2比特指数、1比特尾数以及1比特符号位FP4_E2M1。float16/bfloat16高精度到FP4_E2M1低精度的转换原则如下用户可在配置文件中配置该类型详情请参见config详细配置小于FP4_E2M1的数据最小值转换为FP4_E2M1最小值大于FP4_E2M1的数值转换到FP4_E2M1最大值NAN和INF不支持转换其余值按照“Round to nearest, tie to Even”的舍入模式(RINT)转换到FP4_E2M1。FP4_E2M1能够表达的数值有16个分别为{±0±0.5±1±1.5±2±3±4±6}。INT8使用8比特的int8数据来表示比如32比特的float32数据将float的矩阵乘运算转换为int8的矩阵乘运算加速运算和实现模型压缩。INT4使用4比特的int4数据来表示比如32比特的float32数据。相较于int8量化int4量化可以实现更优的量化效果但可能带来更大的精度损失。总体说明HiF8相比于float8能更好的兼顾精度和动态范围而MXFP8和MXFP4可以减少大模型显存占用。MXFP8和MXFP4有专门的硬件加速单元处理量化因子速度更快。FP4_E2M1和FP4_E1M2对于均匀分布的数据建议用FP4_E1M2如果是高斯分布建议使用FP4_E2M1。训练后量化训练后量化是指在模型训练结束之后进行的量化对训练后模型中的权重由浮点数量化到低比特整数并通过少量校准数据基于推理过程对数据activation进行校准量化从而尽可能减少量化过程中的精度损失。训练后量化简单易用只需少量校准数据适用于追求高易用性和缺乏训练资源的场景。通常训练后的模型权重已经确定因此可以根据权重的数值离线计算得到权重的量化参数。而通常数据是在线输入的因此无法准确获取数据的数值范围通常需要一个较小的有代表性的数据集来模拟在线数据的分布利用该数据集执行前向推理得到对应的中间浮点结果并根据这些浮点结果离线计算出数据的量化参数。其原理如下图所示。![](https://raw.gitcode.com/cann/amct/raw/6b9aea0ddae91757240a16e93e2399b4896e7724/docs/figures/ptq_principles.png 训练后量化原理?utm_sourcegitcode_repo_files)量化感知训练量化感知训练是指在重训练过程中引入量化通过重训练提高模型对量化效应的能力从而获得更高的量化模型精度的一种量化方式。量化感知训练借助用户完整训练数据集在训练过程中引入伪量化的操作从浮点量化到定点再还原到浮点的操作用来模拟前向推理时量化带来的误差并借助训练让模型权重能更好地适应这种量化的信息损失从而提升量化精度。通常量化感知训练相比训练后量化精度损失会更小但主要缺点是整体量化的耗时会更长此外量化过程需要的数据会更多通常是完整训练数据集。 其运行原理如下图所示。​ ![](https://raw.gitcode.com/cann/amct/raw/6b9aea0ddae91757240a16e93e2399b4896e7724/docs/figures/qat_principles.png 量化感知训练原理?utm_sourcegitcode_repo_files)量化过程中的其他概念解释如下权重weight量化权重量化是指根据权重的数值分布情况将权重处理到低比特。激活activation量化激活量化又称为数据量化是指根据数据的数值分布情况将输入的数据activation处理到低比特。每一层的数据分布是未知且巨大的只能在前向过程推理或者训练中确定因此数据量化是基于推理或者训练过程的。校准数据集量化场景中做前向推理使用的数据集。该数据集的分布代表着所有数据集的分布获取校准集时应该具有代表性推荐使用测试集的子集作为校准数据集。如果数据集不是模型匹配的数据集或者代表性不够则根据校准集计算得到的量化因子在全数据集上表现较差量化损失大量化后精度低。量化因子将浮点数量化为整数的参数包括缩放因子scale偏移量offset。将浮点数量化为整数以INT8为例的公式如下$$ int_valclip(round(float_val/scaleoffset),-128,127) $$scale量化因子浮点数的缩放因子该参数又分为scale_d数据量化scale因子仅支持对数据进行统一量化。scale_w权重量化scale因子支持标量对当前层的权重进行统一量化、向量两种模式。offset量化因子偏移量该参数又分为offset_d数据量化offset因子仅支持对数据进行统一量化。offset_w权重量化offset因子同scale_w一样支持标量和向量两种模式且需要同scale_w维度一致。量化粒度是指对神经网络中Matmul等矩阵类算子的不同输入Tensor采用不同的量化计算级别常见的量化计算粒度包括[!NOTE]说明m、n、k变量分别表示Tensor计算的不同轴大小。左矩阵、右矩阵分别指cube算子中用于矩阵乘法计算的两个输入Tensor一般左矩阵代表激活activation、右矩阵代表权重weight请用户按实际情况理解和使用。per-channel量化简称C量化量化对象是右矩阵每个channel分别使用独立的量化参数。假设右矩阵shape为(k, n)k为reduce轴生成量化参数的shape为(n, )。per-group量化简称G量化量化对象既可以是左矩阵也可以是右矩阵AMCT仅支持右矩阵在reduce轴上对数据分组每组使用独立的量化参数。假设右矩阵shape为(k, n)k为reduce轴在k轴上分组group size为gs生成量化参数的shape为(k/gs, n)。per-tensor量化简称T量化量化对象既可以是左矩阵也可以是右矩阵每个Tensor共用一个相同的量化参数。假设左矩阵shape为(m, k)右矩阵shape为(k, n)k为reduce轴生成量化参数的shape为(1, )。per-token量化简称K量化量化对象是左矩阵每个token分别使用独立的量化参数。假设左矩阵shape为(m, k)k为reduce轴生成量化参数的shape为(m, )。稀疏稀疏是通过结构剪枝的方式对模型中的部分算子实现权重的稀疏化从而得到一个参数量更小、计算量更小的网络模型。AMCT目前有两种稀疏方式通道稀疏和4选2结构化稀疏。每次只能使能其中一种稀疏方式即对于同一层可压缩算子通道稀疏和4选2结构化稀疏不能同时配置。通道稀疏与4选2结构化稀疏相比稀疏颗粒度更大对模型的精度影响也越大但是能够获取到的性能收益也越大用户可以根据实际情况选择一种稀疏方式。通道稀疏通道稀疏基于重训练通过裁剪网络通道数在保持网络功能的前提下缩减模型参数量从而降低整网的计算量。由于通道稀疏本身是依据通道的重要性进行裁剪会裁剪掉重要性相对较低的通道但是直接裁剪通道对网络精度影响较大故裁剪后的模型需要进行重训练以保证业务精度。通道稀疏的实现通常包括两个步骤首先是通道选择需要选择合适的通道组合以保留丰富的信息然后是重建需要使用选择的通道对下一层的输出进行重建。通道稀疏原理如下图所示。4选2结构化稀疏由于硬件约束Atlas 推理系列产品、Atlas 训练系列产品、Ascend 950PR/Ascend 950DT不支持4选2结构化稀疏特性。4选2结构化稀疏基于重训练在每4个连续的权重中保留2个重要性相对较高的权重其余权重置0。因为稀疏的粒度较小因此4选2结构化稀疏可以保留较多重要信息具有细粒度稀疏的精度优势同时4选2结构化稀疏在专门设计的硬件上可以降低运算量具有结构化稀疏的性能优势。与通道稀疏不同的是4选2稀疏并不改变权重的形状因此不会影响上层或下层的算子。原理如下图所示在cin维度上相邻的4个元素为一组在每组4个元素中保留绝对值最大的两个元素如果cin不是4的倍数填0补齐到4的倍数。组合压缩组合压缩是结合了稀疏和量化的特性根据配置文件先进行稀疏然后进行量化在稀疏时根据相应算法插入稀疏算子然后量化时对稀疏后的模型插入数据和权重的量化层和SearchN的层生成组合压缩模型以期望得到更高的性能收益。生成组合压缩模型后对模型进行重训练保存为既可以进行精度仿真又可以部署的量化模型。逐层蒸馏蒸馏量化是模型压缩的一种方法利用原始模型的监督信息对量化模型进行训练以达到更好量化精度的目的。将预训练好的原始模型作为教师网络以教师网络层的输出做为目标对学生网络进行监督训练通过计算教师网络和学生网络输出预测值的损失进行梯度更新最终得到一个更高精度的量化模型。相比训练后量化知识蒸馏的量化可以取得更好的精度结果。相比量化感知训练知识蒸馏的量化不需要有标签的数据集且可以在更短的量化时间内获得不错的量化结果。![](https://raw.gitcode.com/cann/amct/raw/6b9aea0ddae91757240a16e93e2399b4896e7724/docs/figures/distill.png 逐层蒸馏示意图?utm_sourcegitcode_repo_files)张量分解深度学习运算尤其是CV计算机视觉类任务运算包含大量的卷积运算而张量分解通过分解卷积核的张量可以将一个大卷积核分解为两个小卷积核的连乘即将卷积核分解为低秩的张量从而降低存储空间和计算量降低推理开销。以1个64*64*3*3的卷积分解为32*64*3*1和64*32*1*3的级联卷积为例可以减少1 - (32*64*3*1 64*32*1*3) / 64*64*3*3 66.7%的计算量在计算结果近似的情况下带来更具性价比的性能收益。张量分解运行原理如下图所示以PyTorch框架为例。![](https://raw.gitcode.com/cann/amct/raw/6b9aea0ddae91757240a16e93e2399b4896e7724/docs/figures/decomposition.png 张量分解运行原理?utm_sourcegitcode_repo_files)模型部署优化主要为算子融合是指通过数学等价将模型中的多个算子运算融合单算子运算以减少实际前向过程中的运算量如将卷积层和BN层融合为一个卷积层。其运行原理如下图所示以PyTorch框架为例。![](https://raw.gitcode.com/cann/amct/raw/6b9aea0ddae91757240a16e93e2399b4896e7724/docs/figures/model_deploy_optimize.png 模型部署优化原理?utm_sourcegitcode_repo_files)【免费下载链接】amctAMCT是CANN提供的昇腾AI处理器亲和的模型压缩工具仓。项目地址: https://gitcode.com/cann/amct创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2598208.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…