文件最后提交记录最后更新时间
更新md文档格式 Co-authored-by: yuanbin_22<yuanbin22@huawei.com> # message auto-generated for no-merge-commit merge: !3677 merge ModifyAclnnMdMaster into master 更新md文档格式 Created-by: yuanbin_22 Commit-by: yuanbin_22 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 更新md文档格式 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> https://gitcode.com/cann/ops-nn/issues/2007 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-nn!36771 个月前
修改算子md文件 Co-authored-by: luo-yongqing<luoyongqing4@h-partners.com> # message auto-generated for no-merge-commit merge: !3564 merge master into master 修改算子md文件 Created-by: luo-yong-qing Commit-by: luo-yongqing Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 自动生成aclnn接口中表示,输出tensor带有const,属性的浮点类型是double,为保持aclnn头文件与文档中的描述接口一致,需要在接口描述中添加const,将float改成double ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> https://gitcode.com/cann/ops-nn/issues/1956 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> 文档更新,无需测试 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> https://gitcode.com/cann/ops-nn/blob/master/quant/dynamic_mx_quant/docs/aclnnDynamicMxQuant.md https://gitcode.com/cann/ops-nn/blob/master/quant/dynamic_mx_quant/docs/aclnnDynamicMxQuantV2.md https://gitcode.com/cann/ops-nn/blob/master/quant/dynamic_block_mx_quant/docs/aclnnDynamicBlockMxQuant.md https://gitcode.com/cann/ops-nn/blob/master/quant/dynamic_dual_level_mx_quant/docs/aclnnDynamicDualLevelMxQuant.md https://gitcode.com/cann/ops-nn/blob/master/quant/dynamic_mx_quant_with_dual_axis/docs/aclnnDynamicMxQuantWithDualAxis.md https://gitcode.com/cann/ops-nn/blob/master/quant/grouped_dynamic_mx_quant/docs/aclnnGroupedDynamicMxQuant.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-nn!35641 个月前
增加原型CMakeLists文件 Co-authored-by: ywx1080114<yuanbin22@huawei.com> # message auto-generated for no-merge-commit merge: !3780 merge AddOpGraph into master 增加原型CMakeLists文件 Created-by: yuanbin_22 Commit-by: ywx1080114 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> dynamic_block_mx_quant等算子原型没有打包到cann_eco包中的ops_proto_nn.h文件,需要对缺失的算子增加原型CMakeLists文件 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> https://gitcode.com/cann/ops-nn/issues/2057 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-nn!37801 个月前
remove simplified_key, default value is 0 Co-authored-by: cong-jiyu<congjiyu@h-partners.com> # message auto-generated for no-merge-commit merge: !4892 merge master into master remove simplified_key, default value is 0 Created-by: cong-jiyu Commit-by: cong-jiyu Merged-by: cann-robot Description: ## 描述 当simplified_key中属性只有default=0,且ascendc_config中配置了算子,那么simplified_key.ini文件可以删除,因为默认值为0. 修改了ascendc_config.json文件,将算子host/config中配置了soc,但是未在ascendc_config.json中的算子补充上去。 ## 关联的Issue [#1985](https://gitcode.com/cann/ops-nn/issues/1985) ## 测试 编译950、910bpass ## 文档更新 更新了ascendc_config.json配置了算子的simplified_key的ini文件 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-nn!489210 天前
DynamicBlockMxQuant tiling UT error Co-authored-by: yin-peng-hw<yinpeng37@huawei.com> # message auto-generated for no-merge-commit merge: !4636 merge DynamicBlockMxQuantDST into master DynamicBlockMxQuant tiling UT error Created-by: yin-peng Commit-by: yin-peng-hw Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 1. 修复DynamicBlockMxQuant tiling UT 部分用例校验失败问题; 2. 规范DynamicBlockMxQuant、DynamicDualLevelMxQuant、DynamicMxQuantWithDualAxis tiling ut部分代码的写法 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> 关联Issue [#2599](https://gitcode.com/cann/ops-nn/issues/2599) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> 本地tiling ut验证 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-nn!463620 天前
DynamicBlockMxQuant tiling UT error Co-authored-by: yin-peng-hw<yinpeng37@huawei.com> # message auto-generated for no-merge-commit merge: !4636 merge DynamicBlockMxQuantDST into master DynamicBlockMxQuant tiling UT error Created-by: yin-peng Commit-by: yin-peng-hw Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 1. 修复DynamicBlockMxQuant tiling UT 部分用例校验失败问题; 2. 规范DynamicBlockMxQuant、DynamicDualLevelMxQuant、DynamicMxQuantWithDualAxis tiling ut部分代码的写法 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> 关联Issue [#2599](https://gitcode.com/cann/ops-nn/issues/2599) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> 本地tiling ut验证 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-nn!463620 天前
新增DynamicBlockMxQuant算子 Co-authored-by: yin-peng-hw<yinpeng37@huawei.com> # message auto-generated for no-merge-commit merge: !1824 merge DynamicBlockMxQuant into master 新增DynamicBlockMxQuant算子 Created-by: yin-peng Commit-by: yin-peng-hw Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> DynamicBlockMxQuant Ascend950开发,具体包括: 1、算子原型定义、信息库注册和infershape功能; 2、tiling策略和kernel实现; 3、针对Ascend 950平台的编译配置与二进制生成规则; 4、新增tiling ut、kernel ut和infershape ut; 5、新增READEME文档和op_list文档更新。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> 关联Issue [#1731](https://gitcode.com/cann/ops-nn/issues/1731) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> 本地泛化精度和性能测试通过。 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 1、新增DynamicBlockMxQuant的算子README.md和aclnnDynamicBlockMxQuant.md文件; 2、更新docs/zh/op_list.md和docs/zh/op_api_list.md,在相应位置加上DynamicBlockMxQuant算子描述。 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-nn!18242 个月前
Modify the aclnn and readme issue Co-authored-by: zhouwenfang<zhouwenfang3@h-partners.com> # message auto-generated for no-merge-commit merge: !3314 merge master into master Modify the aclnn and readme issue Created-by: zhouwenfang Commit-by: zhouwenfang Merged-by: cann-robot Description: ## 描述 Modify the aclnn and readme issue ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 已对齐 ## 文档更新 Modify the aclnn and readme issue ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-nn!33141 个月前
README.md

DynamicBlockMxQuant

产品支持情况

产品 是否支持
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)为基本块进行分组,一个数据块的数 {{Vi}i=132∗32}\{\{V_i\}_{i=1}^{32*32}\} 量化为 {scale,{Pi}i=132∗32}\{scale, \{P_i\}_{i=1}^{32*32}\}

        shared_exp=floor(log2(maxi(∣Vi∣)))−emaxshared\_exp = floor(log_2(max_i(|V_i|))) - emax

        scale=2shared_expscale = 2^{shared\_exp}

        Pi=cast_to_dst_type(Vi/scale,round_mode), i from 1 to 32∗32P_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,​量化后的 PiP_{i} 按对应的 ViV_{i} 的位置组成输出y。

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

        DataType emax
        FLOAT4_E2M1 2
        FLOAT4_E1M2 0
        FLOAT8_E4M3FN 8
        FLOAT8_E5M2 15
    • 场景2,当scaleAlg为2时,只涉及FLOAT4_E2M1类型:

      • 将长向量按块分,每块长度为k,对每块单独计算一个块缩放因子Sfp32bS_{fp32}^b,再把块内所有元素用同一个Sfp32bS_{fp32}^b映射到目标低精度类型FP8。如果最后一块不足k个元素,把缺失值视为0,按照完整块处理。
      • 找到该块中数值的最大绝对值:

      Amax(Dfp32b)=max({∣di∣}i=1k)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可表示的范围内。

      Sfp32b=Amax(Dfp32b)dst_type_maxS_{fp32}^b = \frac{Amax(D_{fp32}^b)}{dst\_type\_max}

      • 将块缩放因子Sfp32bS_{fp32}^b转换为FP8格式下可表示的缩放值Sue8m0bS_{ue8m0}^b
      • 从块的浮点缩放因子Sfp32bS_{fp32}^b中提取无偏指数EintbE_{int}^b和尾数MfixpbM_{fixp}^b
      • 为保证量化时不溢出,对指数进行向上取整,且在FP8可表示的范围内:

      Eintb={Eintb+1,如果Sfp32b为正规数,且Eintb<254且Mfixpb>0Eintb,其余情况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}

      • 计算块缩放因子:Sue8m0b=2EintbS_{ue8m0}^b=2^{E_{int}^b}
      • 计算块转换因子:Rfp32b=1fp32(Sue8m0b)R_{fp32}^b=\frac{1}{fp32(S_{ue8m0}^b)}
      • 应用到量化的最终步骤,对于每个块内元素,di=DType(dfp32i⋅Rfp32n)d^i = DType(d_{fp32}^i \cdot R_{fp32}^n),最终输出的量化结果是(Sb,[di]i=1k)\left(S^b, [d^i]_{i=1}^k\right),其中SbS^b代表块的缩放因子,这里指Sue8m0bS_{ue8m0}^b[di]i=1k[d^i]_{i=1}^k代表块内量化后的数据。

参数说明

参数名 输入/输出/属性 描述 数据类型 数据格式
x 输入 表示输入x,对应公式中ViV_i
当dst_type为FLOAT4_E2M1、FLOAT4_E1M2时,x的最后一维必须是偶数。
FLOAT16、BFLOAT16 ND
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量化后的对应结果,对应公式中的PiP_i
shape和输入x一致。
FLOAT4_E2M1、FLOAT4_E1M2、FLOAT8_E4M3FN、FLOAT8_E5M2 ND
scale1 输出 表示-1轴每个分组对应的量化尺度,对应公式中的scale广播的scale1。
shape为x的-1轴的值除以32向上取整,并对其进行偶数pad,pad填充值为0。
FLOAT8_E8M0 ND
scale2 输出 表示-2轴每个分组对应的量化尺度,对应公式中的scale广播的scale2。
shape为x的-2轴的值除以32向上取整,并对其进行偶数pad,pad填充值为0;
scale2输出需要对每两行数据进行交织处理。
FLOAT8_E8M0 ND

约束说明

  • 关于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算子。