什麼是 AutoRound?
隨著大型語言模型 (LLM) 和視覺語言模型 (VLM) 的規模和複雜性不斷增長,高效部署它們變得越來越具有挑戰性。量化透過減小模型大小和推理延遲來提供解決方案。英特爾的 AutoRound 作為一款尖端量化工具應運而生,它平衡了精度、效率和相容性。
AutoRound 是英特爾開發的一種僅權重訓練後量化 (PTQ) 方法。它使用符號梯度下降聯合最佳化權重舍入和裁剪範圍,從而在大多數情況下以最小的精度損失實現精確的低位量化(例如 INT2 - INT8)。例如,在 INT2 下,它在相對精度方面比流行的基線高出**2.1 倍**。下圖概述了 AutoRound 的核心演算法。欲瞭解更多詳情,請參閱我們的論文。
儘管效能強勁,AutoRound 仍快速且輕量級——在輕量模式下,量化一個 72B 模型僅需 **A100 GPU 上的 37 分鐘**。它還支援混合位調優、lm-head 量化、GPTQ/AWQ/GGUF 格式匯出以及靈活的調優配方。
主要優勢
低位元位寬下的卓越精度
AutoRound 提供了極具前景的結果,特別是在低位量化場景中。對各種任務的評估表明,在 2 位精度下,它遠遠優於流行的方法(來源)。在 4 位精度下,AutoRound 在大多數情況下仍保持競爭優勢,如 低位開放 LLM 排行榜所示。
W2g128 上 10 多個任務的平均值
W4 上 10 多個任務的平均值
2. 廣泛相容性
模型
LLMs: AutoRound 支援幾乎所有流行的 LLM 架構,包括 Qwen、LLaMA 和 DeepSeek 等知名模型。透過 OPEA、Kaitchup 和 fbaldassarri 等集合,可以在 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-best
和 auto-round-light
,分別旨在實現最佳精度和提高速度。
auto-round-best \
--model Qwen/Qwen3-0.6B \
--output_dir ./tmp_autoround
對於 2 位,我們建議使用 auto-round-best
或 auto-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 README 或 AutoRound 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 核心。