Qwen3 AWQ 量化部署 — 4bit 量化让大模型跑得动
为什么需要量化
一个 FP16 的 Qwen3-8B 需要 16GB 显存,很多用户的 GPU 装不下。量化可以显著减小模型体积:
| 量化格式 | Qwen3-8B 大小 | 精度损失 |
|---|---|---|
| FP16(原生) | ~16GB | 无 |
| 8bit | ~8GB | 极小 |
| 4bit(AWQ) | ~5GB | 小 |
| 4bit(GPTQ) | ~5GB | 小 |
| 2bit | ~2.5GB | 较大 |
AWQ 原理
AWQ(Activation-aware Weight Quantization)的核心思想:
- 对每一层权重做重要性分析
- 保留权重绝对值最大的 1% 为 FP16(避免显著精度损失)
- 其余 99% 量化到 4bit
- 量化时考虑激活分布,选择最优量化范围
相比传统 per-tensor 量化,AWQ 的 per-group + 激活感知策略让精度损失更小。
使用 Hugging Face AWQ 量化模型
Qwen3 的部分规格已经有社区贡献的 AWQ 量化版在 Hugging Face 上。
Transformers 加载
pip install autoawq transformers accelerate
from transformers import AutoModelForCausalLM, AutoTokenizer
# 加载 AWQ 量化版(模型名通常带 -awq 后缀)
model_name = "Qwen/Qwen3-8B-Instruct-AWQ" # 示例,检查 HF 是否有这个仓库
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype="auto",
device_map="auto"
)
# 之后和原生加载一样的使用方式
用 AutoAWQ 自己量化
如果 Hugging Face 上没有你要的规格,可以自己量化:
pip install autoawq
from autoawq import AutoAWQForCausalLM
model_path = "Qwen/Qwen3-8B"
quant_path = "Qwen3-8B-AWQ"
quant_config = {
"zero_point": True,
"q_group_size": 128,
"w_bit": 4,
"version": "GEMM"
}
# 加载模型
model = AutoAWQForCausalLM.from_pretrained(model_path)
# 量化
model.quantize(
tokenizer,
quant_config=quant_config,
calib_data="pileval",
calib_length=512,
calib_samples=128
)
# 保存量化后的模型
model.save_quantized(quant_path)
量化需要一组校准数据来统计激活分布,pileval 是常用的校准数据集。
AWQ vs GPTQ
| 方面 | AWQ | GPTQ |
|---|---|---|
| 量化精度 | 略好(激活感知) | 好 |
| 量化速度 | 较快 | 较慢(需要重算误差) |
| 推理速度 | 快 | 快 |
| 工具链 | AutoAWQ | AutoGPTQ |
| 支持的推理框架 | Transformers + vLLM + SGLang | Transformers + vLLM + SGLang + ExLlama |
两者都是 4bit 量化,精度损失接近。AWQ 量化更快,GPTQ 推理生态更丰富一些。
在推理框架中使用 AWQ
vLLM
pip install autoawq
vllm serve Qwen/Qwen3-8B-Instruct-AWQ \
--quantization awq \
--port 8000
SGLang
SGLang 也支持 AWQ 量化模型,直接加载即可:
python -m sglang.launch_server \
--model-path Qwen/Qwen3-8B-Instruct-AWQ \
--quantization awq \
--port 30000
Ollama
Ollama 不直接支持 AWQ,但可以加载 GGUF 格式(GGUF 内部使用自己的量化算法)。如果想在 Ollama 里用 AWQ 量化模型,需要先转换成 GGUF。
显存估算(量化后)
| 规格 | FP16 原生 | AWQ 4bit | 8bit |
|---|---|---|---|
| Qwen3-0.6B | 1.2GB | 0.4GB | 0.6GB |
| Qwen3-4B | 8GB | 2.5GB | 4GB |
| Qwen3-8B | 16GB | 5GB | 8GB |
| Qwen3-14B | 28GB | 8GB | 14GB |
| Qwen3-32B | 64GB | 16GB | 32GB |
| Qwen3-30B-A3B | 60GB | 15GB | 30GB |
量化的精度损失
量化不是无损的。4bit 量化可能导致:
- 在低资源设备上,AWQ 4bit 的 MMLU 分数下降约 1-5%
- 在小模型上,量化损失相对更大
- 在大模型上,量化损失几乎可以忽略
实际使用中,绝大多数场景下 4bit 量化模型的表现和原生模型差异很小。
相关阅读
- 02-GPTQ 量化:另一个主流量化方案
- 03-GGUF 格式:Ollama 和 LM Studio 用的格式
- 01-Transformers 代码调用:加载原生模型