应用变换以提高量化精度
此目录包含示例脚本,用于将变换应用于模型以提高量化精度。有关变换的更多信息,请参阅 QuaRot: Outlier-Free 4-Bit Inference in Rotated LLMs。目前支持的两种变换样式是 SpinQuant/QuaRot 风格 (SpinQuantModifier) 和 QuIP 风格 (QuIPModifier)。
另请参阅 [vLLM Office Hours #31] vLLM 和 LLM Compressor 更新 - 2025 年 8 月 28 日。
安装
要开始,请执行以下命令来安装必要的依赖项
快速入门
提供的示例脚本演示了在量化之前应用 QuIP 风格变换的过程。
步骤 1:选择模型、数据集和配方
在此步骤中,您将选择一个用于量化的基础模型以及一个变换 + 量化配方。
- 模型:可以从本地目录引用,也可以从 Hugging Face Hub 检索。
- 配方:这些是 YAML 文件或 Python 修饰器对象,用于描述模型在训练期间或之后应如何进行优化。在此示例中,我们在
QuantizationModifier之前使用QuIPModifier,并将方案设置为FP8。
from llmcompressor.modifiers.transform import QuIPModifier
from llmcompressor.modifiers.quantization import QuantizationModifier
recipe = [
QuIPModifier(
rotations=["v", "u"], transform_block_size=128, transform_type="hadamard"
),
QuantizationModifier(targets="Linear", scheme="W4A16", ignore=["lm_head"]),
]
请注意,QuIPModifier 是可自定义的。有关可用参数的完整列表,请参阅 文档字符串 或文档。
rotations决定了使用输入旋转 (v) 还是输出旋转 (u)。transform_block_size决定了 hadamard 的大小。较小的 hadamard 在运行时成本较低。transform_type决定了变换的构造方式。hadamard 使用 Sylvester 构造。
步骤 2:使用 Oneshot 运行量化
oneshot 方法将所选配方应用于您的模型和数据集,而无需进行任何微调。模型将被量化并保存到 Llama-3.1-8B-Instruct-quip-w4a16。我们使用 "datafree" 管道,因为我们的配方不需要校准数据。
from llmcompressor import oneshot
# Apply algorithms.
oneshot(model=model, recipe=recipe, pipeline="datafree")
# Save to disk compressed.
SAVE_DIR = MODEL_ID.split("/")[1] + "-quip-w4a16"
model.save_pretrained(SAVE_DIR, save_compressed=True)
tokenizer.save_pretrained(SAVE_DIR)
步骤 3:在 vLLM 中运行优化后的模型
使用 hadamard 变换类型优化的模型将能够利用 hadacore 内核来加速推理。使用 benchmarks/latency.py 脚本来测试延迟
密集模型延迟(秒)
| Base | Hadacore | GEMM |
|---|---|---|
| 0.4710 | 0.4948 | 1.3946 |
量化模型延迟(秒)
| Base W4A16 | Hadacore | GEMM |
|---|---|---|
| 0.4402 | 0.4489 | 1.2917 |