已合并
docs(gmm): 明确MXFP8量化中存储block与group size的概念区分 #9736
zhoushaolong创建于 16 天前
docs(gmm): 明确MXFP8量化中存储block与group size的概念区分 #9736
已合并
共 1 个文件变更+11-9
| @@ -49,7 +49,7 @@ | |||
| 49 | \frac{x}{1 + \exp\left(-1.595769121 \times \left(x + 0.044715 \times x^3\right)\right)} | 49 | \frac{x}{1 + \exp\left(-1.595769121 \times \left(x + 0.044715 \times x^3\right)\right)} |
| 50 | $$ | 50 | $$ |
| 51 | * $E$ 表示专家数,$M$ 表示总token数,$K$ 表示输入特征维度,$N$ 表示输出特征维度。 | 51 | * $E$ 表示专家数,$M$ 表示总token数,$K$ 表示输入特征维度,$N$ 表示输出特征维度。 |
| 52 | - * $blocksize$ 表示MX量化时共享指数的分组大小,当前仅支持64。 | 52 | + * $blocksize$ 表示MX量化结果的存储block大小,当前仅支持64,对应2个MX量化group,每个group包含32个元素。 |
| 53 | 53 | ||
| 54 | - **输入**: | 54 | - **输入**: |
| 55 | 55 | ||
| @@ -81,7 +81,7 @@ | |||
| 81 | 81 | ||
| 82 | - 4.对激活结果进行MX量化,目标数据类型DType由输出Tensor y的数据类型指定: | 82 | - 4.对激活结果进行MX量化,目标数据类型DType由输出Tensor y的数据类型指定: |
| 83 | 83 | ||
| 84 | - - 场景1,当scaleAlg为0时,表示OCP实现,将激活结果$S_i$在N轴按$k=blocksize$分组,一组$k$个数$\{V_j\}_{j=1}^{k}$动态量化为$\{YScale, \{P_j\}_{j=1}^{k}\}$。 | 84 | + - 场景1,当scaleAlg为0时,表示OCP实现,将激活结果$S_i$在N轴按$group\_size=32$分组,一组$group\_size$个数$\{V_j\}_{j=1}^{group\_size}$动态量化为$\{YScale, \{P_j\}_{j=1}^{group\_size}\}$。 |
| 85 | 85 | ||
| 86 | $$ | 86 | $$ |
| 87 | shared\_exp = floor(log_2(max_j(|V_j|))) - emax | 87 | shared\_exp = floor(log_2(max_j(|V_j|))) - emax |
| @@ -92,10 +92,10 @@ | |||
| 92 | $$ | 92 | $$ |
| 93 | 93 | ||
| 94 | $$ | 94 | $$ |
| 95 | - P_j = cast\_to\_dst\_type(V_j / YScale, roundMode), \space j \space from \space 1 \space to \space blocksize | 95 | + P_j = cast\_to\_dst\_type(V_j / YScale, roundMode), \space j \space from \space 1 \space to \space group\_size |
| 96 | $$ | 96 | $$ |
| 97 | 97 | ||
| 98 | - 量化后的$P_j$按对应$V_j$的位置组成输出$Y$,$YScale$按对应N轴分组组成输出$YScale$。 | 98 | + 量化后的$P_j$按对应$V_j$的位置组成输出$Y$,$YScale$按对应N轴的量化group组成输出$YScale$。 |
| 99 | 99 | ||
| 100 | - $emax$:对应数据类型的最大正则数的指数位。 | 100 | - $emax$:对应数据类型的最大正则数的指数位。 |
| 101 | 101 | ||
| @@ -104,7 +104,7 @@ | |||
| 104 | | FLOAT8_E4M3FN | 8 | | 104 | | FLOAT8_E4M3FN | 8 | |
| 105 | | FLOAT8_E5M2 | 15 | | 105 | | FLOAT8_E5M2 | 15 | |
| 106 | 106 | ||
| 107 | - - 场景2,当scaleAlg为1时,表示cuBLAS实现,只涉及FP8类型。将激活结果$S_i$在N轴按$k=blocksize$分组,每块单独计算一个块缩放因子$S_{fp32}^b$,再把块内所有元素用同一个$S_{fp32}^b$映射到目标FP8类型。如果最后一块不足$k$个元素,缺失值视为0并按完整块处理。 | 107 | + - 场景2,当scaleAlg为1时,表示cuBLAS实现,只涉及FP8类型。将激活结果$S_i$在N轴按存储$blocksize=64$分组,每块单独计算一个块缩放因子$S_{fp32}^b$,再把块内所有元素用同一个$S_{fp32}^b$映射到目标FP8类型。如果最后一块不足$blocksize$个元素,缺失值视为0并按完整块处理。 |
| 108 | 108 | ||
| 109 | 找到该块中数值的最大绝对值: | 109 | 找到该块中数值的最大绝对值: |
| 110 | 110 | ||
| @@ -556,10 +556,12 @@ aclnnStatus aclnnGroupedMatmulActivationQuantWeightNz( | |||
| 556 | <td>(M, N)</td> | 556 | <td>(M, N)</td> |
| 557 | <td>(M, ceil(N / 64), 2)</td> | 557 | <td>(M, ceil(N / 64), 2)</td> |
| 558 | </tr> | 558 | </tr> |
| 559 | - </tbody> | 559 | + </tbody> |
| 560 | - </table> | 560 | + </table> |
| 561 | - | 561 | + |
| 562 | - - N必须为64整数倍。 | 562 | + - 表中xScale和outputScale的shape第三维为2,表示每个64元素的存储block中包含2个MX量化group,每个group覆盖32个元素。 |
| 563 | + | ||
| 564 | + - N必须为64整数倍。 | ||
| 563 | 565 | ||
| 564 | ## 调用示例 | 566 | ## 调用示例 |
| 565 | 567 | ||