AWQ(Activation-aware Weight Quantization,激活感知权重量化)是一种面向大语言模型的 4 比特权重量化方法。其核心思路是:并非所有权重同等重要,AWQ 依据激活模式识别并保护约 1% 的关键权重,从而在不引入混合精度开销的前提下降低量化误差。
用途与适用场景 资料建议在以下情况使用 AWQ:需要 4 比特量化且精度损失低于 5%;部署指令微调或对话模型(AWQ 泛化性更好);希望相对 FP16 获得约 2.5-3 倍推理加速;使用 vLLM 进行生产服务;拥有 Ampere 及以上 GPU(A100、H100、RTX 40xx)以支持 Marlin 内核。 资料同时给出替代方案:若需要最大生态兼容性、使用 ExLlamaV2 后端或使用不支持 Marlin 的旧 GPU,可考虑 GPTQ;若需要零校准开销、使用 QLoRA 微调或偏好更简单集成,可考虑 bitsandbytes。
主要能力
- 4 比特权重量化,资料称精度损失通常低于 5%,推理加速约 2.5-3 倍。
- 显存降低:资料给出的示例为 Mistral 7B 从 14 GB 降至 5.5 GB(2.5x)、Llama 2-13B 从 26 GB 降至 10 GB(2.6x)、Llama 2-70B 从 140 GB 降至 35 GB(4x)。
- 支持多种内核后端:GEMM(默认,适合批量推理)、GEMV(单 token 生成,batch_size=1 时约快 20%)、Marlin(Ampere+ GPU,A100/H100 上约快 2 倍)、ExLlamaV2(兼容 AMD GPU)。
- 支持自定义校准数据,可针对领域模型调整。
- 支持多 GPU 部署,可通过 device_map="auto" 自动切分。
- 资料称支持 35+ 架构,包括 Llama 2/3、Code Llama、Mistral、Mixtral、Qwen、Qwen2、Qwen2.5-VL、Falcon、MPT、Phi、Yi、DeepSeek、Gemma,以及 LLaVA、LLaVA-Next、Qwen2-VL 等多模态模型。
使用方式 安装:
默认(Triton 内核)
pip install autoawq
带优化 CUDA 内核 + Flash Attention
pip install autoawq[kernels]
Intel CPU/XPU 优化
pip install autoawq[cpu] 资料给出的环境要求为 Python 3.8+、CUDA 11.8+、Compute Capability 7.5+。
加载预量化模型示例: from awq import AutoAWQForCausalLM from transformers import AutoTokenizer model_name = "TheBloke/Mistral-7B-Instruct-v0.2-AWQ" model = AutoAWQForCausalLM.from_quantized(model_name, fuse_layers=True) tokenizer = AutoTokenizer.from_pretrained(model_name) inputs = tokenizer("Explain quantum computing", return_tensors="pt").to("cuda") outputs = model.generate(**inputs, max_new_tokens=200) print(tokenizer.decode(outputs[0], skip_special_tokens=True))
自行量化模型示例: from awq import AutoAWQForCausalLM from transformers import AutoTokenizer model_path = "mistralai/Mistral-7B-Instruct-v0.2" model = AutoAWQForCausalLM.from_pretrained(model_path) tokenizer = AutoTokenizer.from_pretrained(model_path) quant_config = { "zero_point": True, "q_group_size": 128, "w_bit": 4, "version": "GEMM" } model.quantize(tokenizer, quant_config=quant_config) model.save_quantized("mistral-7b-awq") tokenizer.save_pretrained("mistral-7b-awq") 资料给出的量化耗时约为:7B 模型 10-15 分钟,70B 模型约 1 小时。
自定义校准数据示例: model.quantize( tokenizer, quant_config=quant_config, calib_data="wikitext", max_calib_samples=256, max_calib_seq_len=512 ) 也可直接传入自定义字符串列表作为 calib_data。
HuggingFace Transformers 集成:可直接用 AutoModelForCausalLM.from_pretrained 加载 AWQ 模型;也可通过 AwqConfig 启用融合模块(do_fuse=True、fuse_max_seq_len=512)。资料提示融合模块不能与 FlashAttention2 同时使用。
vLLM 集成:vLLM 可自动检测 AWQ 模型,示例为 LLM(model="TheBloke/Llama-2-7B-AWQ", quantization="awq", dtype="half")。
多 GPU 部署示例: model = AutoAWQForCausalLM.from_quantized( "TheBloke/Llama-2-70B-AWQ", device_map="auto", max_memory={0: "40GB", 1: "40GB"} )
性能与精度参考 资料给出的推理速度示例(RTX 4090):Mistral 7B GEMM 预填充 3,897 tok/s、解码 114 tok/s、显存 5.55 GB;TinyLlama 1B GEMV 预填充 5,179 tok/s、解码 431 tok/s、显存 2.10 GB;Llama 2-13B GEMM 预填充 2,279 tok/s、解码 74 tok/s、显存 10.28 GB。 困惑度示例:Llama 3 8B 从 8.20 升至 8.48(+3.4%);Mistral 7B 从 5.25 升至 5.42(+3.2%);Qwen2 72B 从 4.85 升至 4.95(+2.1%)。
限制与注意事项
- GEMV 后端仅支持 batch size 1,不适合大上下文。
- Marlin 需要 Compute Capability 8.0+(A100、H100、RTX 40xx)。
- 融合模块不能与 FlashAttention2 组合使用。
- 量化时若出现 CUDA OOM,可减少 max_calib_samples(如 64)。
- AMD GPU 支持需使用 ExLlama 后端。
- 资料明确说明 AutoAWQ 已被官方弃用,新项目可考虑 vLLM llm-compressor(https://github.com/vllm-project/llm-compressor)或面向 Apple Silicon 的 MLX-LM;已有量化模型仍可继续使用。
参考资料 论文:AWQ: Activation-aware Weight Quantization(arXiv:2306.00978),MLSys 2024 最佳论文。 GitHub:https://github.com/casper-hansen/AutoAWQ MIT Han Lab:https://github.com/mit-han-lab/llm-awq 模型:https://huggingface.co/models?library=awq