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

CANN/ops-nn动态块MX量化算子

DynamicBlockMxQuant

【免费下载链接】ops-nn本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。项目地址: https://gitcode.com/cann/ops-nn

产品支持情况

产品是否支持
Ascend 950PR/Ascend 950DT
Atlas A3 训练系列产品/Atlas A3 推理系列产品×
Atlas A2 训练系列产品/Atlas A2 推理系列产品×
Atlas 200I/500 A2 推理产品×
Atlas 推理系列产品×
Atlas 训练系列产品×

功能说明

  • 算子功能:对输入变量,以数据块(32*32)为基本块进行MX量化转换为目的数据类型。在每个基本块中,根据scale_alg的取值采取不同的scale算法计算出当前块对应的量化参数scale(1*1),将其广播为scale1(32*1)和scale2(1*32)输出。同时对基本块中的每一个数除以scale,根据round_mode转换到对应的dst_type,得到量化结果y。

  • 计算公式:

    • 场景1,当scaleAlg为0时:

      • 将输入x以数据块(32*32)为基本块进行分组,一个数据块的数 ${{V_i}{i=1}^{32*32}}$ 量化为 ${scale, {P_i}{i=1}^{32*32}}$

        $$ shared_exp = floor(log_2(max_i(|V_i|))) - emax $$

        $$ scale = 2^{shared_exp} $$

        $$ P_i = cast_to_dst_type(V_i/scale, round_mode), \space i\space from\space 1\space to\space 32*32 $$

      • 同时将 scale(1*1)广播为scale1(32*1)和scale2(1*32)作为输出scale1和scale2,​量化后的 $P_{i}$ 按对应的 $V_{i}$ 的位置组成输出y。

      • emax: 对应数据类型的最大正则数的指数位。

        DataTypeemax
        FLOAT4_E2M12
        FLOAT4_E1M20
        FLOAT8_E4M3FN8
        FLOAT8_E5M215
    • 场景2,当scaleAlg为2时,只涉及FLOAT4_E2M1类型:

      • 将长向量按块分,每块长度为k,对每块单独计算一个块缩放因子$S_{fp32}^b$,再把块内所有元素用同一个$S_{fp32}^b$映射到目标低精度类型FP8。如果最后一块不足k个元素,把缺失值视为0,按照完整块处理。
      • 找到该块中数值的最大绝对值: $$ Amax(D_{fp32}^b)=max({|d_{i}|}_{i=1}^{k}) $$
      • 引入新的属性 dst_type_max。dst_type_max类型为float,默认值为0。默认输出时代表max_type为目标数据类型的最大值,如果传入其他数值,则需要按照传入的数值计算scale,有效值当前支持0.0、6.0和7.0,只支持在FLOAT4_E2M1场景设置该值。
      • 将FP32映射到目标数据类型FLOAT4_E2M1可表示的范围内。 $$ S_{fp32}^b = \frac{Amax(D_{fp32}^b)}{dst_type_max} $$
      • 将块缩放因子$S_{fp32}^b$转换为FP8格式下可表示的缩放值$S_{ue8m0}^b$
      • 从块的浮点缩放因子$S_{fp32}^b$中提取无偏指数$E_{int}^b$和尾数$M_{fixp}^b$
      • 为保证量化时不溢出,对指数进行向上取整,且在FP8可表示的范围内: $$ E_{int}^b = \begin{cases} E_{int}^b + 1, & \text{如果} S_{fp32}^b \text{为正规数,且} E_{int}^b < 254 \text{且} M_{fixp}^b > 0 \ E_{int}^b, & \text{其余情况} \end{cases} $$
      • 计算块缩放因子:$S_{ue8m0}^b=2^{E_{int}^b}$
      • 计算块转换因子:$R_{fp32}^b=\frac{1}{fp32(S_{ue8m0}^b)}$
      • 应用到量化的最终步骤,对于每个块内元素,$d^i = DType(d_{fp32}^i \cdot R_{fp32}^n)$,最终输出的量化结果是$\left(S^b, [d^i]{i=1}^k\right)$,其中$S^b$代表块的缩放因子,这里指$S{ue8m0}^b$,$[d^i]_{i=1}^k$代表块内量化后的数据。

参数说明

参数名输入/输出/属性描述数据类型数据格式
x输入表示输入x,对应公式中$V_i$。
当dst_type为FLOAT4_E2M1、FLOAT4_E1M2时,x的最后一维必须是偶数。
FLOAT16、BFLOAT16ND
round_mode可选属性表示数据转换的模式,对应公式中的round_mode。
当dst_type为40/41,对应输出y的数据类型为FLOAT4_E2M1/FLOAT4_E1M2时,支持{"rint", "floor", "round"};
当dst_type为35/36,对应输出y的数据类型为FLOAT8_E5M2/FLOAT8_E4M3FN时,仅支持{"rint"};
传入空指针时,采用"rint"模式。
STRING-
dst_type输入表示指定数据转换后y的类型。
输入范围为{35, 36, 40, 41},分别对应输出y1和y2的数据类型为{35:FLOAT8_E5M2, 36:FLOAT8_E4M3FN, 40:FLOAT4_E2M1, 41:FLOAT4_E1M2}
INT64-
scale_alg输入表示scale的计算方法。
当前仅支持取值0和2,分别代表OCP Microscaling Formats (Mx) Specification和Dynamic Dtype Range实现。
INT64-
dst_type_max输入表示max_type为目标数据类型的最大值。
在scale_alg=2,dst_type为FLOAT4_E2M1时生效,需要按照传入的数值计算scale。
有效值当前支持取值为0.0/6.0/7.0,只支持在FLOAT4_E2M1场景设置该值。
FLOAT-
y输出表示输入x量化后的对应结果,对应公式中的$P_i$。
shape和输入x一致。
FLOAT4_E2M1、FLOAT4_E1M2、FLOAT8_E4M3FN、FLOAT8_E5M2ND
scale1输出表示-1轴每个分组对应的量化尺度,对应公式中的scale广播的scale1。
shape为x的-1轴的值除以32向上取整,并对其进行偶数pad,pad填充值为0。
FLOAT8_E8M0ND
scale2输出表示-2轴每个分组对应的量化尺度,对应公式中的scale广播的scale2。
shape为x的-2轴的值除以32向上取整,并对其进行偶数pad,pad填充值为0;
scale2输出需要对每两行数据进行交织处理。
FLOAT8_E8M0ND

约束说明

  • 关于x、scale1、scale2的shape约束说明如下:
    • x的维度应该为2~3。
    • rank(scale1) = rank(x) + 1。
    • rank(scale2) = rank(x) + 1。
    • scale1.shape[-2] = (ceil(x.shape[-1] / 32) + 2 - 1) / 2。
    • scale2.shape[-3] = (ceil(x.shape[-2] / 32) + 2 - 1) / 2。
    • scale1.shape[-1] = 2。
    • scale2.shape[-1] = 2。
    • 其他维度与输入x一致。
    • 举例:输入x的shape为[B, M, N],目的数据类型为FP8类时,对应的y的shape为[B, M, N],scale1的shape为[B, M, ceil(N/64), 2],scale2的shape为[B, ceil(M/64), N, 2]。

调用说明

调用方式样例代码说明
aclnn接口test_aclnn_dynamic_block_mx_quant通过aclnnDynamicBlockMxQuant接口方式调用DynamicBlockMxQuant算子。
图模式-通过算子IR构图方式调用DynamicBlockMxQuant算子。

【免费下载链接】ops-nn本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。项目地址: https://gitcode.com/cann/ops-nn

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.jsqmd.com/news/793341/

相关文章:

  • Payum实战案例:构建支持多种支付方式的电商平台完整指南 [特殊字符]
  • 3D堆叠封装技术:热挑战与优化方案
  • 【数据结构】与排序算法鏖战5天,我终于搞懂了排序的思路和实现--排序算法大全的保姆级攻略
  • 动态紧凑模型在电子热设计中的高效应用
  • ARM GICv3中断控制器与ICC_EOIR1寄存器详解
  • Paris注解处理器深度解析:从@Style到@StyleableChild的完整实现原理
  • 虽然市面上已经有人流量统计摄像头----但是我有价格优势
  • 12,Springboot3+vue3实现系统公告功能
  • 【C++ -Day7】封装实战 | 用类封装日志、配置和文件操作模块
  • 电子热量表设计:PIC16F913微控制器应用与热力计算
  • Scarpet脚本语言深度解析:在Fabric Carpet中编写高级自动化程序的完整指南
  • android C++ opencv 年龄 性别识别深度神经网络模型
  • CANN/asc-devkit向量最小值函数
  • 告别理论!用TI毫米波雷达开发板实测多普勒测速(附Python代码)
  • 从DES到AES:被‘遗忘’的IDEA算法,它的设计思想给现代密码学留下了什么?
  • CTO 每月烧 600 亿 token,3 个月完成百名程序员七八年写的 800 万行代码
  • AI编码助手经验治理:ExperienceEngine解决重复错误与智能进化
  • 2026年AI大模型接口中转站排行榜新鲜出炉!五大平台硬核数据对比,为开发者提供权威选型指南
  • 别再只用Matplotlib画图了!用Python这3个库(SciPy, NumPy, Scikit-learn)给你的数据曲线做个‘美容’
  • CANN/asc-devkit向量减法ReLU函数
  • 我们只能要求手机在拍摄的时候呈现45度-----采用常用模型
  • Tacacs+协议报文解密与全流程实战抓包解析
  • Groundhog:基于Git仓库的开发者时间自动追踪工具
  • 大语言模型评测框架解析:从公平对比到工程选型实践
  • 视频技术演进:从模拟到数字的革命与压缩技术解析
  • FiveM服务器智能运维:基于CoPaw多智能体的自动化技能包实战
  • “内存对比工具V2.6版”的基础功能说明!
  • 人脸检测主流模型----第一名---占有率90%---MIT协议
  • 机器视觉(MV)与机器人视觉(RV)的本质区别(4)
  • 8.4.3 开始屏幕和任务栏的优化:StartAllBack 找回高效 Windows 11 使用体验