AutoRound:让大模型量化变得简单高效的革命性工具
在当今AI技术飞速发展的时代,大型语言模型(LLMs)和视觉语言模型(VLMs)正以前所未有的速度改变着我们的生活和工作方式。然而,这些强大的模型往往需要巨大的计算资源和存储空间,这成为了它们在实际应用中的一大障碍。今天,我想和大家聊聊一个能够解决这个问题的创新工具——AutoRound,它如何让大模型量化变得既简单又高效。
为什么我们需要模型量化?
在深入探讨AutoRound之前,让我们先理解一下为什么模型量化如此重要。想象一下,你正在开发一个需要在移动设备上运行的AI应用。大型语言模型通常需要几十GB甚至上百GB的存储空间,这对于普通手机或平板来说几乎是不可能的。而模型量化就是将高精度的模型参数(如FP16或FP32)转换为低精度表示(如INT4或INT2)的过程,这样可以大幅减少模型大小和计算需求,同时尽量保持模型性能。
但传统量化方法往往面临两个挑战:一是量化后模型性能大幅下降;二是量化过程复杂且耗时。这正是AutoRound要解决的问题。
什么是AutoRound?
AutoRound是一个专为大型语言模型(LLMs)和视觉语言模型(VLMs)设计的高级量化库。它的核心价值在于:在2-4比特的超低比特宽度下,依然能够保持高精度,同时量化过程简单高效。
与市场上其他量化工具相比,AutoRound有几个突出特点:
-
高精度保持:即使在2-3比特的超低精度下,也能保持出色的模型性能 -
快速量化:7B参数规模的模型仅需约10分钟即可完成量化(单GPU) -
广泛的硬件兼容性:支持多种硬件平台和推理引擎 -
使用简单:提供命令行和API两种使用方式,学习曲线平缓
AutoRound的核心技术基于符号梯度下降(sign-gradient descent),这项技术使其能够在保持高精度的同时大幅降低量化难度。如果你对技术细节感兴趣,可以查看他们在arXiv上发表的论文:arxiv链接。
AutoRound的最新进展
技术总是在不断进步,AutoRound团队一直保持着活跃的更新节奏。以下是最近的一些重要更新:
-
2025年7月:AutoRound现在提供了对GGUF格式的实验性支持,并推荐对除3比特外的所有比特使用优化的RTN模式(
--iters 0
)。未来版本v0.6.1可能会为特定配置提供更先进的算法。示例模型:Intel/Qwen3-235B-A22B-q2ks-mixed-ar 和 Intel/DeepSeek-R1-0528-q2ks-mixed-ar。 -
2025年5月:为DeepSeek-R1-0528提供了量化配方,包括 Intel/DeepSeek-R1-0528-int2-mixed-ar、Intel/DeepSeek-R1-0528-int4-ar 和 Intel/DeepSeek-R1-0528-int4-asym-ar。
-
2025年5月:AutoRound已集成到vLLM中。现在可以使用vLLM 0.85.post1及以上版本直接运行AutoRound格式的模型。
-
2025年4月:AutoRound已集成到Transformers库中。可以使用Transformers 4.51.3及以上版本直接运行AutoRound格式的模型。
-
2025年3月:INT2混合精度的DeepSeek-R1模型(约200GB)保持了97.9%的精度。详情请查看 OPEA/DeepSeek-R1-int2-mixed-sym-inc。
这些更新表明AutoRound正在快速融入主流AI生态系统,为用户提供更便捷的使用体验。
为什么你应该选择AutoRound?
面对市场上众多的量化工具,你可能会问:为什么选择AutoRound?让我来详细解释它的核心优势。
1. 卓越的精度保持能力
AutoRound在低比特量化方面表现出色,特别是在2-3比特的超低精度下。它提供了多个示例模型,如 2-3比特模型集合,以及在4比特量化方面的领先结果,可以在 低比特开放LLM排行榜 上查看。
2. 与主流生态系统的无缝集成
AutoRound已经与多个主流AI框架和工具链集成:
-
Transformers:4.51.3及以上版本 -
vLLM:0.85.post1及以上版本 -
TorchAO:支持 -
sglang:正在集成中(参考PR)
这意味着你可以轻松地将AutoRound集成到现有的工作流程中,无需大幅调整代码。
3. 多种格式导出支持
AutoRound支持多种量化格式导出,确保最大程度的兼容性:
-
AutoRound(默认格式) -
AutoAWQ -
AutoGPTQ -
GGUF(实验性支持)
这种灵活性使你能够根据目标平台选择最合适的格式。
4. 亲民的量化成本
量化7B参数规模的模型只需约10分钟(单GPU),这对于需要快速迭代的开发团队来说是一个巨大的优势。详细的成本信息可以在 量化成本文档 中找到。
5. 广泛的视觉语言模型支持
AutoRound支持10+种视觉语言模型的开箱即用量化,包括 示例模型集合 和 支持矩阵。
6. 分层混合比特量化
AutoRound允许你为不同层指定不同的比特精度,实现精度和性能之间的精细权衡。详细使用方法见 混合比特量化文档。
7. 最近值舍入(RTN)模式
通过使用 --iters 0
参数,你可以启用无需校准的快速量化模式,虽然会有一些精度损失,但速度大幅提升。详情请参考 RTN模式文档。
8. 多种量化配方选择
AutoRound提供了三种不同的量化配置,以满足不同需求:
-
auto-round-best:最佳精度,但速度较慢(约慢3倍) -
auto-round:平衡精度和速度 -
auto-round-light:速度更快(2-3倍加速),但在W4和W2量化时会有一定精度损失
9. 高级实用功能
-
多GPU量化:支持在多个GPU上并行量化 -
多校准数据集:支持使用多个数据集进行校准 -
10+运行时后端支持:适应各种推理环境
如何安装和使用AutoRound?
理论讲得再多,不如动手实践。下面我将详细介绍如何安装和使用AutoRound。
安装方法
AutoRound提供了多种安装方式,适应不同硬件环境:
# CPU/Intel GPU/CUDA
pip install auto-round
# HPU
pip install auto-round-lib
如果你更喜欢从源码构建:
# CPU/Intel GPU/CUDA
pip install .
# HPU
python setup.py install lib
命令行使用方式
AutoRound提供了简单易用的命令行接口。以下是一个基本示例,将Qwen3-0.6B模型量化为4比特:
auto-round \
--model Qwen/Qwen3-0.6B \
--bits 4 \
--group_size 128 \
--format "auto_gptq,auto_awq,auto_round" \
--output_dir ./tmp_autoround
如果你追求最佳精度(但速度较慢),可以使用auto-round-best
:
## 最佳精度,速度慢3倍,low_gpu_mem_usage可节省约20G显存但慢30%
auto-round-best \
--model Qwen/Qwen3-0.6B \
--bits 4 \
--group_size 128 \
--low_gpu_mem_usage
如果你更关注速度,可以使用auto-round-light
:
## 轻量级精度,速度提升2-3倍,在W4G128时有轻微精度损失
auto-round-light \
--model Qwen/Qwen3-0.6B \
--bits 4 \
--group_size 128
根据官方建议,对于INT4量化推荐使用auto-round
,而对于INT2量化则推荐使用auto-round-best
。
API使用方式
如果你更喜欢编程方式,AutoRound也提供了Python 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)
output_dir = "./tmp_autoround"
## format= 'auto_round'(默认), 'auto_gptq', 'auto_awq'
autoround.quantize_and_save(output_dir, format="auto_round")
AutoRound提供了丰富的参数配置选项,可以根据你的需求进行调整:
参数 | 类型 | 默认值 | 说明 |
---|---|---|---|
bits | int | 4 | 量化比特数 |
group_size | int | 128 | 量化组大小 |
sym | bool | True | 是否使用对称量化 |
iters | int | 200 | 调优迭代次数 |
nsamples | int | 128 | 调优样本数 |
seqlen | int | 2048 | 序列长度 |
batch_size | int | 8 | 批处理大小 |
low_gpu_mem_usage | bool | False | 是否节省GPU内存 |
视觉语言模型(VLMs)的量化
AutoRound同样支持视觉语言模型的量化。使用方法略有不同,需要使用AutoRoundMLLM
:
from auto_round import AutoRoundMLLM
from transformers import Qwen2VLForConditionalGeneration, AutoProcessor, AutoTokenizer
## 加载模型
model_name = "Qwen/Qwen2-VL-2B-Instruct"
model = Qwen2VLForConditionalGeneration.from_pretrained(model_name, trust_remote_code=True, torch_dtype="auto")
tokenizer = AutoTokenizer.from_pretrained(model_name)
processor = AutoProcessor.from_pretrained(model_name, trust_remote_code=True)
## 量化模型
bits, group_size, sym = 4, 128, True
autoround = AutoRoundMLLM(model, tokenizer, processor, bits=bits, group_size=group_size, sym=sym)
autoround.quantize()
# 保存量化模型,设置format='auto_gptq'或'auto_awq'以使用其他格式
output_dir = "./tmp_autoround"
autoround.save_quantized(output_dir, format="auto_round", inplace=True)
注意:如果在量化过程中遇到问题,可以尝试设置iters=0
(启用RTN模式)并使用group_size=32
以获得更好的结果。
模型推理:如何使用量化后的模型?
量化只是第一步,如何高效地使用量化后的模型同样重要。AutoRound支持多种推理方式。
使用vLLM进行推理
vLLM是一个高性能的LLM服务库,现在已支持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}")
注意:目前对MoE模型和视觉语言模型的支持有限。
使用Transformers进行推理
Transformers库也已集成对AutoRound的支持:
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "Intel/DeepSeek-R1-0528-Qwen3-8B-int4-AutoRound"
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)[0]))
重要提示:在推理过程中,请避免手动将量化模型移动到不同设备(如model.to('cpu')
),这可能会导致意外异常。另外,对Gaudi设备的支持目前有限。
常见问题解答
AutoRound与AutoGPTQ、AutoAWQ有什么区别?
AutoRound的核心优势在于其在2-4比特的超低精度下仍能保持高精度,特别是在2-3比特范围内的表现优于其他工具。此外,AutoRound提供了更简单的使用流程和更快的量化速度。它还支持多种格式导出,包括AutoGPTQ和AutoAWQ格式,这意味着你可以根据需要选择最适合的格式。
量化过程中出现内存不足怎么办?
如果遇到内存不足问题,可以尝试以下方法:
-
使用 --low_gpu_mem_usage
参数,这可以节省约20GB显存,但会增加约30%的调优时间 -
减少 nsamples
(样本数量)或batch_size
(批处理大小) -
使用 auto-round-light
配置,它对资源的需求更低
如何选择合适的量化参数?
选择量化参数主要取决于你的应用场景:
-
对于INT4量化:推荐使用标准 auto-round
配置,平衡精度和速度 -
对于INT2量化:推荐使用 auto-round-best
配置,以获得最佳精度 -
如果速度是首要考虑因素:可以使用 auto-round-light
配置或RTN模式(--iters 0
)
为什么我的量化模型推理时出现错误?
推理错误可能由多种原因引起:
-
确保你使用的Transformers或vLLM版本符合要求(Transformers 4.51.3+或vLLM 0.85.post1+) -
不要手动将模型移动到不同设备(如 model.to('cpu')
) -
检查量化时使用的格式与推理时是否一致 -
对于Gaudi设备,目前支持有限,可能需要额外配置
AutoRound支持哪些模型架构?
AutoRound支持多种主流模型架构,包括:
-
Llama -
Qwen -
Mistral -
Mixtral -
DeepSeek -
以及其他多种视觉语言模型
具体支持列表可以在支持矩阵中查看。
未来展望
AutoRound团队正在积极扩展其功能,包括支持更多数据类型如MXFP、NVFP、W8A8等。这意味着未来AutoRound将能够支持更广泛的量化场景,为用户提供更多选择。
结语
模型量化是让大型语言模型在资源受限设备上运行的关键技术,而AutoRound通过其卓越的精度保持能力、简单的使用流程和广泛的生态系统支持,为这一领域带来了革命性的变化。
无论你是AI研究人员、工程师还是技术爱好者,AutoRound都能帮助你轻松地将大型语言模型部署到各种实际场景中。它不仅降低了模型部署的门槛,还为创新应用打开了更多可能性。
正如AutoRound团队所强调的:”我们的目标是让量化变得简单高效,而不是成为部署AI应用的障碍。” 通过不断优化和扩展,AutoRound正在朝着这个目标稳步前进。
如果你觉得AutoRound对你有帮助,请别忘了在GitHub上给它点个星⭐,并分享给你的社区。你的支持将激励团队继续改进这个工具,为整个AI社区创造更大价值。