推进大模型低比特量化:AutoRound x LLM Compressor

5 分钟阅读
英特尔神经网络压缩团队,红帽 AI 模型优化团队

在不牺牲精度的前提下,实现更快、更高效的大模型服务!

总结

我们很高兴地宣布,AutoRound——英特尔最先进的基于微调的训练后量化 (PTQ) 算法——现已集成到 LLM Compressor 中。此次合作带来了以下优势:

  • 更高的低位宽量化精度
  • 轻量级微调(只需数百步,而非数千步)
  • 零额外的推理开销
  • compressed-tensors 无缝兼容,并可在 vLLM 中直接部署
  • 简化的工作流:只需几行代码即可量化并部署模型

更广泛的量化方案和模型覆盖即将推出——立即尝试并帮助我们塑造未来的构建方向。

什么是 AutoRound?

AutoRound 是一种先进的训练后量化 (PTQ) 算法,专为大语言模型 (LLM) 和多模态大模型 (VLM) 设计。它为每个量化张量引入了三个可训练参数:V(舍入偏移量/调整)、αβ(学习到的截断范围控制)。通过按顺序处理解码器层并应用带符号梯度下降,AutoRound 联合优化舍入和截断,以最小化块级输出的重构误差。

核心优势

  • 卓越的精度,尤其是在极低位宽的情况下
  • 支持多种数据类型: W4A16、MXFP8、MXFP4、FP8、NVFP4,更多类型正在支持中
  • 混合位宽,逐层的精度搜索,以实现灵活的精度与效率权衡
  • 适用于 LLMVLM

AutoRound 能够使量化模型以多种低位格式运行,旨在加速在 英特尔® 至强® (Xeon®) 处理器英特尔® Gaudi® AI 加速器英特尔® 数据中心 GPU英特尔® Arc™ B 系列显卡 以及其他 GPU(如基于 CUDA 的设备)上的推理。

展望未来,英特尔正在为其代号为 Crescent Island 的下一代数据中心 GPU 增加对 FP8、MXFP8 和 MXFP4 格式的本地支持。使用 AutoRound 量化的模型将自然地扩展,以在整个英特尔 AI 硬件组合中充分利用这些数据类型。这为从算法创新到实际部署创建了一条一致的路径。

有关更多详细信息,请参阅论文 AutoRound (EMNLP 2024) 和 GitHub 仓库 intel/auto-round

为什么要集成到 LLM Compressor 中?

LLM Compressor 已经提供了一个统一的、模块化的系统,用于量化和剪枝等压缩原语。将 AutoRound 集成到此生态系统中:

  • 与现有的修改器架构(例如 GPTQModifier)保持一致
  • 复用了顺序校准和逐层加载基础设施
  • 实现了未来与更丰富的多修改器方案的互操作性
  • 生成可供 vLLM 部署的量化模型,实现了从压缩到部署的简洁工作流

集成概述

我们通过在 LLM Compressor 中引入新的 AutoRoundModifier 完成了集成的第一阶段,使得生成可在 vLLM 中无缝加载的 W{n}A16 (例如 W4A16) 压缩模型成为可能,如 PR #1994 所实现。通过简单的配置——只需指定模型和校准数据——您就可以快速生成高质量的低位检查点。这一初始阶段支持量化包括 LlamaQwen 模型家族在内的一系列密集 LLM,并展示了在实际部署中的强大兼容性。

立即尝试(快速开始)

1. 安装

git clone https://github.com/vllm-project/llm-compressor.git
cd llm-compressor
pip install -e .

2. 加载模型与分词器

from transformers import AutoModelForCausalLM, AutoTokenizer
MODEL_ID = "Qwen/Qwen3-8B"
model = AutoModelForCausalLM.from_pretrained(MODEL_ID, torch_dtype="auto")
tokenizer = AutoTokenizer.from_pretrained(MODEL_ID)

3. 准备校准数据

from auto_round.calib_dataset import get_dataset
NUM_CALIBRATION_SAMPLES = 128
MAX_SEQUENCE_LENGTH = 2048
ds = get_dataset(tokenizer=tokenizer,
                 seqlen=MAX_SEQUENCE_LENGTH,
                 nsamples=NUM_CALIBRATION_SAMPLES)

4. 使用 AutoRound 进行量化

AutoRound 量化可以在各种设备(包括 CPU 和 GPU)上运行。量化和部署不一定必须在同一设备上进行。例如,您可以在装有 GPU 的工作站上进行量化,随后部署在 AIPC 上。

from llmcompressor import oneshot
from llmcompressor.modifiers.autoround import AutoRoundModifier
 
recipe = AutoRoundModifier(
    targets="Linear",
    scheme="W4A16",
    ignore=["lm_head"],
    iters=200,
)
 
oneshot(
    model=model,
    dataset=ds,
    recipe=recipe,
    max_seq_length=MAX_SEQUENCE_LENGTH,
    num_calibration_samples=NUM_CALIBRATION_SAMPLES,
    shuffle_calibration_samples=False,
)
 
SAVE_DIR = MODEL_ID.split("/")[-1] + "-W4A16-G128-AutoRound"
model.save_pretrained(SAVE_DIR, save_compressed=True)
tokenizer.save_pretrained(SAVE_DIR)

在实践中,128 个校准样本 + ~200 次迭代通常即可达到稳定的收敛。如果您针对的是极低位或更严格的精度目标,可以增加样本数或迭代次数。

5. 在 vLLM 中部署

量化完成后,相同的压缩模型可以在不同的硬件上进行部署,而无需依赖用于调优的设备。例如,您可以在单台 英特尔® Arc™ Pro B60 GPU 上部署量化后的 Qwen3-8B-W4A16-G128-AutoRound 模型。

vllm serve Qwen3-8B-W4A16-G128-AutoRound \
    --dtype=bfloat16 \
    --gpu-memory-utilization 0.8 \
    --max-num-batched-tokens 8192 

注意:请从 PR #29484 安装 vLLM。在 XPU 上部署时,必须使用 --enforce-eager 标志运行 vLLM。

6. 评估(示例:使用 lm_eval 进行 GSM8K 评估)

lm_eval --model vllm \
  --model_args pretrained="./Qwen3-8B-W4A16-G128-AutoRound,max_model_len=8192,max_num_batched_tokens=32768,max_num_seqs=128,gpu_memory_utilization=0.8,dtype=bfloat16,max_gen_toks=2048,enable_prefix_caching=False,enforce_eager=True" \
  --tasks gsm8k \
  --num_fewshot 5 \
  --limit 1000 \
  --batch_size 128
 
|Tasks|Version|     Filter     |n-shot|  Metric   |   |Value|   |Stderr|
|-----|------:|----------------|-----:|-----------|---|----:|---|-----:|
|gsm8k|      3|flexible-extract|     5|exact_match|  |0.911|±  | 0.009|
|     |       |strict-match    |     5|exact_match|  |0.911|±  | 0.009|

注意:由于非确定性,结果可能会有波动。

结论与未来规划

通过这一初步集成,AutoRound 和 LLM Compressor 已经为低位 LLM 提供了一条实用的、面向生产的路径:W4A16 量化得到了端到端的支持,工作流配置简单,并且支持 Llama 和 Qwen 等密集模型。该设置稳健、精简,已准备好用于实际部署。

展望未来,我们计划扩展对 FP8、MXFP4、MXFP8 和 NVFP4 等其他方案的支持,增加自动混合位宽搜索以实现精细化的逐层优化,并覆盖更多模型家族,包括混合专家 (MoE) 模型。我们还旨在加深与 LLM Compressor 中其他算法的互操作性,这将允许 AutoRound 被组合到更丰富的多修改器方案中,从而服务于社区用例和英特尔的生产工作负载。

如果您希望影响我们接下来优先处理的格式、模型和工作流,请参与 RFC #1968 中的讨论并分享您的基准测试或部署需求,或者将您的反馈提交给英特尔社区,以便我们可以根据实际需求调整路线图。

致谢

我们要感谢 LLM Compressor 和 vLLM 社区。特别感谢 Kyle Sayers、Dipika Sikka、Brian Dellabetta、Charles Hernandez、Robert Shaw 和 Kunshang Ji 对早期提案提供的宝贵反馈以及对拉取请求的认真审查。

llm-compressor#1968, llm-compressor#1994, llm-compressor#2055, llm-compressor#2062, auto-round#993, auto-round#1053, auto-round#1055, auto-round#1072, vllm#29484