跳到內容

AutoRound

AutoRound 是英特爾(Intel)先進的量化演算法,旨在生成高效的 INT2、INT3、INT4 和 INT8 量化大型語言模型,在準確性和部署效能之間取得最佳平衡。

AutoRound 對基於 Transformer 的模型應用僅權重(weight-only)量化,從而顯著節省記憶體並加速推理,同時保持接近原始模型的準確性。它支援廣泛的硬體平臺,包括 CPU、Intel GPU、HPU 和支援 CUDA 的裝置

請參閱 AutoRound 指南瞭解更多詳情。

主要特性

✅ 支援 AutoRound、AutoAWQ、AutoGPTQ 和 GGUF

✅ 支援 10+ 種視覺-語言模型 (VLM)

✅ 支援逐層混合位量化,實現精細控制

✅ 支援 RTN (Round-To-Nearest) 模式,實現快速量化,並伴有輕微的準確性損失

✅ 支援多種量化方案:最佳 (best)、基礎 (base) 和輕量 (light)

✅ 提供高階實用工具,例如即時打包(immediate packing)和對 10+ 種後端的支援

安裝

uv pip install auto-round

模型量化

對於 VLM,請在 CLI 用法中更改為 auto-round-mllm,在 API 用法中更改為 AutoRoundMLLM

CLI 用法

auto-round \
    --model Qwen/Qwen3-0.6B \
    --bits 4 \
    --group_size 128 \
    --format "auto_round" \
    --output_dir ./tmp_autoround
auto-round \
    --model Qwen/Qwen3-0.6B \
    --format "gguf:q4_k_m" \
    --output_dir ./tmp_autoround

API 用法

from transformers import AutoModelForCausalLM, AutoTokenizer
from auto_round import AutoRound

model_name = "Qwen/Qwen3-0.6B"
model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype="auto")
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)

# the best accuracy, 4-5X slower, low_gpu_mem_usage could save ~20G but ~30% slower
# autoround = AutoRound(model, tokenizer, nsamples=512, iters=1000, low_gpu_mem_usage=True, bits=bits, group_size=group_size, sym=sym)

# 2-3X speedup, slight accuracy drop at W4G128
# autoround = AutoRound(model, tokenizer, nsamples=128, iters=50, lr=5e-3, bits=bits, group_size=group_size, sym=sym )

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

使用 vLLM 執行量化模型

以下是在 vLLM 中執行 AutoRound 格式的一些示例程式碼

from vllm import LLM, SamplingParams

prompts = [
    "Hello, my name is",
]
sampling_params = SamplingParams(temperature=0.6, top_p=0.95)
model_name = "Intel/DeepSeek-R1-0528-Qwen3-8B-int4-AutoRound"
llm = LLM(model=model_name)

outputs = llm.generate(prompts, sampling_params)

for output in outputs:
    prompt = output.prompt
    generated_text = output.outputs[0].text
    print(f"Prompt: {prompt!r}, Generated text: {generated_text!r}")

致謝

特別感謝 AutoGPTQ、AutoAWQ、GPTQModel、Triton、Marlin 和 ExLLaMAV2 等開源低精度庫,它們提供了低精度 CUDA 核心,並已被 AutoRound 利用。