块缩放#
块缩放量化#
块缩放量化操作从更高精度的张量计算量化的输出和缩放因子张量。
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)