跳到内容

非均匀量化

在某些情况下,结合不同精度和/或策略的量化方案可能有助于获得更好的恢复效果。例如,在一些仅解码器模型中,down_proj 层已被证明更加敏感,通过将此层量化到 int8 或 fp8 而不是 int4 或 fp4 可以提高性能。本文件夹中的示例展示了几种非均匀量化的场景。

混合精度量化

我们通过将模型量化为 int8 和 int4 来演示混合精度,并在第二个示例中,将模型量化为 fp4(特别是 nvfp4)和 fp8。在这两种情况下,我们都使用配置组将更高的精度分配给 down_proj 层,将较低的精度分配给剩余的线性层。对于 nvfp4 和 fp8,我们还应用了两个模型压缩器——nvfp4-pack-quantizedfloat-quantized。生成的压缩模型的 config.json 显示 mixed-precision 作为 format 的值,表明该模型已使用多种格式进行了压缩。应用于每组层的具体格式在每个配置组的 format 键下指定。

多种策略

也可以有兴趣使用两种不同的 量化策略,例如组、通道或每张量,来量化模型。 此处,我们应用 fp8 量化,其中所有注意力权重都使用每通道策略进行量化,而所有 mlp 权重都使用每张量策略进行量化。这可以通过在配方中定义多个配置组来实现。生成的模型使用 float-quantized 压缩器进行压缩,并且可以直接在 vllm 中运行。

使用多种量化修饰符进行量化

本节概述了如何将多个量化修饰符应用于同一模型进行混合精度量化,例如将 AWQ W4A16 应用于模型的 self_attn 层,将 GPTQ W8A8 应用于其 mlp 层。这种多个修饰符的异构应用有两种形式

  1. 在一个单一的、顺序的管道中运行每个修饰符,执行一次校准运行。有关示例,请参阅 ./quantization_multiple_modifiers.py
  2. 在各自独立的管道中运行每个修饰符,为每个修饰符执行一次校准运行。要独立运行每个修饰符,请使用 --independent 标志运行示例(python ./quantization_multiple_modifiers.py --independent)。

这是 llm-compressor 的高级用法,并且是一个活跃的研究领域。在进一步研究和敏感性分析之后,将在未来的版本中提供最佳实践。