文件最后提交记录最后更新时间
1 天前
18 天前
18 天前
8 天前
18 天前
10 小时前
6 个月前
8 天前
README

DynamicBlockQuant

产品支持情况

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

功能说明

  • 算子功能:对输入张量,通过给定的row_block_size和col_block_size将输入划分成多个数据块,以数据块为基本粒度进行量化。在每个块中,先计算出当前块对应的量化参数scale,并根据scale对输入进行量化。输出最终的量化结果,以及每个块的量化参数scale。

  • 计算公式:

    input_max=block_reduce_max(abs(x))input\_max = block\_reduce\_max(abs(x))

    scale=min((FP8_MAX/HiF8_MAX/DST_TYPE_MAX/INT8_MAX)/input_max,1/minscale)scale = min((FP8\_MAX/HiF8\_MAX /DST\_TYPE\_MAX / INT8\_MAX) / input\_max, 1/min_scale)

    y=cast_to_[FP8/HiF8/INT8](x/scale)y = cast\_to\_[FP8/HiF8/INT8](x / scale)

    其中block_reduce_max代表求每个block中的最大值。

参数说明

参数名 输入/输出/属性 描述 数据类型 数据格式
x 输入 表示算子输入的Tensor,对应公式中的`x`。shape支持2-3维。 FLOAT16、BFLOAT16、FLOAT32 ND
min_scale 可选属性
  • 表示参与scale计算的最小scale值,对应公式中的`min_scale`。必须为正浮点数。
  • 默认值为0.0。
FLOAT32 -
round_mode 可选属性
  • 表示量化的舍入模式,支持取值rint、round。
  • 默认值为rint。
STRING -
dst_type 可选属性
  • 指定输出y的数据类型。支持取值2、34、35、36,分别代表INT8、HIFLOAT8、FLOAT8_E5M2、FLOAT8_E4M3FN。
  • 默认值为35,对应的数据类型为FLOAT8_E5M2。
INT -
row_block_size 可选属性
  • 表示行维度上每个块包含的元素数量。支持取值1,128,256,512。
  • 默认值为1。
INT -
col_block_size 可选属性
  • 表示列维度上每个块包含的元素数量。支持取值64,128,192,256。
  • 默认值为128。
INT -
dst_type_max 可选属性
  • 目标数据类型的最大值。
  • 当前只支持目标数据类型为HIFLOAT8,且可选取值为0.0,15.0,56.0,224.0,32768.0
  • 0.0表示使用数据类型原始的最大值。
FLOAT32 -
y 输出 表示量化后的张量,对应公式中的`y`。shape与输入`x`的shape保持一致,数据类型由参数`dst_type`的取值决定。 INT8、HIFLOAT8、FLOAT8_E4M3FN、FLOAT8_E5M2 ND
scale 输出
  • 表示量化使用的缩放张量,对应公式中的`scale`。
  • 如果输入`x`的shape为[M, N],输出`scaleOut`的shape维度为[ceil(M/rowBlockSize), ceil(N/colBlockSize)];如果输入`x`的shape为[B, M, N],输出`scaleOut`的shape维度为[B, ceil(M/rowBlockSize), ceil(N/colBlockSize)]。
FLOAT32 ND
  • Atlas A2 训练系列产品/Atlas A2 推理系列产品、Atlas A3 训练系列产品/Atlas A3 推理系列产品:

    • 参数xyscale的shape仅支持2维
    • 参数round_mode只支持rint。
    • 参数dst_type仅支持取值2,代表INT8。
    • 参数row_block_size仅支持取值1或128。
    • 参数col_block_size仅支持取值1。
    • 参数dst_type_max仅支持取值0。
    • 参数y的数据类型仅支持INT8。
  • Ascend 950PR/Ascend 950DT:

    • 参数xyscale的shape仅支持2维或3维。
    • 参数round_mode的取值与参数y的数据类型存在对应关系:
      • 当输出y的数据类型是HIFLOAT8时,参数round_mode支持设置为round。
      • 当输出y的数据类型是INT8、FLOAT8_E4M3FN、FLOAT8_E5M2时,参数round_mode支持设置为rint。
    • 参数dst_type支持取值2、34、35、36,分别代表INT8、HIFLOAT8、FLOAT8_E5M2、FLOAT8_E4M3FN。
    • 参数y的数据类型支持INT8、HIFLOAT8、FLOAT8_E4M3FN、FLOAT8_E5M2。

约束说明

调用说明

调用方式 样例代码 说明
aclnn接口 test_aclnn_dynamic_block_quant 通过aclnnDynamicBlockQuant接口方式调用DynamicBlockQuant算子。
图模式 - 通过算子IR构图方式调用DynamicBlockQuant算子。