块缩放#

块缩放量化#

块缩放量化操作从更高精度的张量计算量化的输出和缩放因子张量。

MXFP8 配方沿行(和可选的列)跨 32 个 FP32 元素进行量化,以生成 32 个 FP8 输出值(E4M3 或 E5M2)和 1 个 FP8 缩放因子(E8M0)。NVFP4 配方沿行跨 16 个 FP32 元素进行量化,以生成 16 个 FP4 输出值(E2M1)和 1 个 FP8 缩放因子(E4M3)。

该计算可以通过以下公式进行数学表示

\( scale = quantize\_round\_up(amax(vals) / vmax\_otype) \) \( output = quantize\_round\_to\_even(vals / scale) \)

其中

  • vals 是一个元素块。

  • vmax_otype 是输出数据类型可表示的最大值。

C++ API#

std::array<std::shared_ptr<Tensor_attributes>, 2> block_scale_quantize(std::shared_ptr<Tensor_attributes> x,
                                                                       Block_scale_quantize_attributes);

其中输出数组的顺序为 [y, scale]

Block_scale_quantize_attributes 是一个带有 setter 的轻量级结构体

Block_scale_quantize_attributes&
set_block_size(int32_t const value)

Block_scale_quantize_attributes&
set_axis(int64_t const value)

Block_scale_quantize_attributes&
set_transpose(bool const value)

块缩放反量化#

块缩放反量化操作从量化的输入和缩放张量计算反量化的输出张量。

该计算可以通过以下公式进行数学表示

\( output = dequantize(vals * scale) \)

其中

  • vals 是一个元素块。

  • 缩放被广播到块大小。

C++ API#

std::shared_ptr<Tensor_attributes> block_scale_dequantize(std::shared_ptr<Tensor_attributes> x,
                                                          std::shared_ptr<Tensor_attributes> scale,
                                                          Block_scale_dequantize_attributes);

Block_scale_dequantize_attributes 是一个带有 setter 的轻量级结构体

Block_scale_dequantize_attributes&
set_block_size(int32_t const value)