什么是 AutoRound?

发布于 2025 年 4 月 29 日
在 GitHub 上更新

随着大型语言模型 (LLM) 和视觉语言模型 (VLM) 的规模和复杂性不断增长,高效部署它们变得越来越具有挑战性。量化通过减小模型大小和推理延迟来提供解决方案。英特尔的 AutoRound 作为一款尖端量化工具应运而生,它平衡了精度、效率和兼容性。

AutoRound 是英特尔开发的一种仅权重训练后量化 (PTQ) 方法。它使用符号梯度下降联合优化权重舍入和裁剪范围,从而在大多数情况下以最小的精度损失实现精确的低位量化(例如 INT2 - INT8)。例如,在 INT2 下,它在相对精度方面比流行的基线高出**2.1 倍**。下图概述了 AutoRound 的核心算法。欲了解更多详情,请参阅我们的论文

algorithm overview<

尽管性能强劲,AutoRound 仍快速且轻量级——在轻量模式下,量化一个 72B 模型仅需 **A100 GPU 上的 37 分钟**。它还支持混合位调优、lm-head 量化、GPTQ/AWQ/GGUF 格式导出以及灵活的调优配方。

主要优势

低比特位宽下的卓越精度

AutoRound 提供了极具前景的结果,特别是在低位量化场景中。对各种任务的评估表明,在 2 位精度下,它远远优于流行的方法(来源)。在 4 位精度下,AutoRound 在大多数情况下仍保持竞争优势,如 低位开放 LLM 排行榜所示。

Average of 10+ tasks at W2g128<
W2g128 上 10 多个任务的平均值

Average of 10+ tasks at W4<
W4 上 10 多个任务的平均值

2. 广泛兼容性

模型

LLMs: AutoRound 支持几乎所有流行的 LLM 架构,包括 Qwen、LLaMA 和 DeepSeek 等知名模型。通过 OPEAKaitchupfbaldassarri 等集合,可以在 Hugging Face 上找到即用型量化模型。

VLMs: AutoRound 支持超过 10 种视觉语言模型 (VLM),包括 Mistral-Small-3.1、Gemma3 等。您可以在 README 中找到完整列表,即用型量化模型可在 OPEA Hugging Face 集合中找到。对于尚未支持的模型,您仍然可以使用 --iters 0 应用我们的 RTN 方法。无需调优,但预计会出现一些精度损失。

设备

  • CPU
  • 英特尔 GPU
  • CUDA

量化配置

  • 仅 Int8 权重
  • 仅 Int4 权重
  • 仅 Int3 权重
  • 仅 Int2 权重
  • 仅混合位宽权重

导出格式

  • AutoRound
  • GPTQ
  • AWQ
  • 部分 GGUF

3. 灵活/高效量化

AutoRound 仅需 200 个调优步骤和少量校准数据集(最少 128 个样本)即可实现高精度。与其他计算密集型的 int2 方法相比,这种效率转化为更快的量化时间和更少的资源消耗。

AutoAWQ
样本数=128
序列长度=512
数据集='pile'
AutoAWQ
样本数=512
序列长度=2048
数据集='pile'
Transformer 中的 GPTQ
样本数=?
序列长度=?
数据集='c4'
AutoRoundLight
样本数=128
序列长度=2048
数据集='pile-10k'
AutoRound
样本数=128
序列长度=2048
数据集='pile-10k'
AutoRound
样本数=512
序列长度=2048
数据集='pile-10k
Qwen2.5 3B 7 分钟 17 分钟 13 分钟 3 分钟 8 分钟 9 分钟
Llama3.1-8B 13 分钟 27 分钟 22 分钟 6 分钟 13 分钟 17 分钟
Qwen2.5 72B 105 分钟 230 分钟 内存不足 (OOM) 37 分钟 120 分钟 149 分钟

开始使用 AutoRound

安装

pip install auto-round

量化与序列化

目前,仅支持离线模式生成量化模型。

命令行使用

auto-round \
    --model Qwen/Qwen3-0.6B \
    --bits 4 \
    --group_size 128 \
    --format "auto_round,auto_awq,auto_gptq" \
    --output_dir ./tmp_autoround

AutoRound 还提供了另外两种配方,auto-round-bestauto-round-light,分别旨在实现最佳精度和提高速度。

auto-round-best \
    --model Qwen/Qwen3-0.6B \
    --output_dir ./tmp_autoround

对于 2 位,我们建议使用 auto-round-bestauto-round。有关三种配方的比较,请参阅下表。

13 个任务(mmlu-pro、if_eval、gsm8k 等)的 W4G128 平均精度和时间成本结果(测试是在 Nvidia A100 80G 上使用启用 torch_compile 的 PyTorch 2.6.0 版本进行的)

模型 Qwen2.5-0.5B-Instruct Falcon3-3B Qwen2.5-7B-Instruct Meta-Llama-3.1-8B-Instruct Falcon3-10B Qwen2.5-72B-Instruct
16 位 0.4192 0.5203 0.6470 0.6212 0.6151 0.7229
最佳 0.4137(7m) 0.5142(23m) 0.6426(58m) 0.6116(65m) 0.6092(81m) 0.7242(575m)
默认 0.4129(2m) 0.5133(6m) 0.6441(13m) 0.6106(13m) 0.6080(18m) 0.7252(118m)
轻量级 0.4052(2m) 0.5108(3m) 0.6453(5m) 0.6104(6m) 0.6063(6m) 0.7243(37m)

AutoRound API 使用

此设置在精度和调优成本之间提供了更好的权衡,建议在所有场景中使用。

from transformers import AutoModelForCausalLM, AutoTokenizer
from auto_round import AutoRound

model_name = "Qwen/Qwen3-0.6B"
model = AutoModelForCausalLM.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)
bits, group_size, sym = 4, 128, True
autoround = AutoRound(
    model,
    tokenizer,
    bits=bits,
    group_size=group_size,
    sym=sym,
    # enable_torch_compile=True,
)

output_dir = "./tmp_autoround"
autoround.quantize_and_save(output_dir, format='auto_round,auto_awq,auto_gptq') 

有关 API 使用或混合位配置的 AutoRound 最佳/轻量级设置,请参阅 AutoRound README

推理

AutoRound 会根据已安装的库自动选择最佳可用后端,并在找到更好的后端时提示用户安装其他库。欲了解更多详情,请参阅 HF READMEAutoRound README

CPU/英特尔 GPU/CUDA

from transformers import AutoModelForCausalLM, AutoTokenizer

model_name = "OPEA/Qwen2.5-1.5B-Instruct-int4-sym-inc"
model = AutoModelForCausalLM.from_pretrained(model_name, device_map="auto", torch_dtype="auto")
tokenizer = AutoTokenizer.from_pretrained(model_name)
text = "There is a girl who likes adventure,"
inputs = tokenizer(text, return_tensors="pt").to(model.device)
print(tokenizer.decode(model.generate(**inputs, max_new_tokens=50, do_sample=False)[0]))

将 GPTQ/AWQ 转换为 AutoRound

大多数 GPTQ/AWQ 模型可以转换为 AutoRound 格式,以获得更好的兼容性并支持英特尔设备。请注意,如果模型被序列化,量化配置将发生更改。

from transformers import AutoModelForCausalLM, AutoTokenizer, AutoRoundConfig

model_name = "ybelkada/opt-125m-gptq-4bit"
quantization_config = AutoRoundConfig()
model = AutoModelForCausalLM.from_pretrained(model_name, device_map="cpu", torch_dtype="auto",
                                             quantization_config=quantization_config)
tokenizer = AutoTokenizer.from_pretrained(model_name)
text = "There is a girl who likes adventure,"
inputs = tokenizer(text, return_tensors="pt").to(model.device)
print(tokenizer.decode(model.generate(**inputs, max_new_tokens=50, do_sample=False)[0]))

结论

AutoRound 在大型语言模型和视觉语言模型的训练后量化方面迈出了有意义的一步。通过结合高精度、卓越效率以及与流行模型、设备和导出格式的广泛兼容性,AutoRound 使低位量化既实用又强大。无论您是大规模部署 LLM 还是在 VLM 上试验边缘推理,AutoRound 都提供了实现最佳性能所需的工具和灵活性,且开销最小。我们邀请您试用它,并加入不断推动高效 AI 部署边界的不断壮大的社区。

欢迎并非常感谢对 AutoRound 的贡献!无论是修复 bug、改进文档、添加新功能还是提出改进建议,您的帮助始终受到重视。

如果您在使用 AutoRound 时遇到任何问题,请在 AutoRound 存储库上提交问题。

致谢

我们要感谢包括 AutoGPTQ、AutoAWQ、GPTQModel、Triton、Marlin 和 ExLLaMAV2 在内的开源低精度库,AutoRound 中使用了它们的 CUDA 内核。

社区

注册登录以评论