SuperAPI AI 工具集

gptq

智能体与模型

查看项目

更新于 10-21 16:21

技能介绍

GPTQ(Generative Pre-trained Transformer Quantization)是一种训练后量化方法,利用分组量化将大语言模型压缩至 4-bit,在精度损失较小的情况下大幅降低显存占用。

用途与适用场景

资料建议在以下情况使用 GPTQ:需要将大模型(70B 以上)放入有限的 GPU 显存;希望获得约 4 倍显存缩减且精度损失低于 2%;在消费级 GPU(RTX 4090、3090)上部署;需要比 FP16 快 3-4 倍的推理速度。

资料同时给出替代方案:若需要略好的精度(损失低于 1%)、拥有较新 GPU(Ampere、Ada)或需要 Marlin 内核支持,可考虑 AWQ;若需要与 transformers 简单集成、使用 8-bit 量化或不需要预量化模型文件,可考虑 bitsandbytes。

主要能力

  • 分组量化:将每个权重矩阵划分为若干组(通常每组 128 个元素),每组拥有独立的 scale 与 zero-point,并利用 Hessian 信息最小化量化误差。
  • 组大小权衡:组大小 -1(按列)模型最小、精度最好但最慢,仅适合研究;32 精度更好但更慢;128 为推荐默认值;256 更快但精度略低;1024 最快但精度最低,不推荐。
  • 量化配置:标准 4-bit(bits=4、group_size=128、desc_act=False、damp_percent=0.01)可实现约 4 倍显存缩减、困惑度增加约 1.5%、速度提升 3-4 倍;3-bit 配置(bits=3、group_size=128、desc_act=True)可实现约 5 倍显存缩减、困惑度增加约 3%;高精度 4-bit 配置(group_size=32、desc_act=True、damp_percent=0.005)可实现约 3.5 倍显存缩减、困惑度增加约 0.8%。
  • 内核后端:ExLlamaV2(默认,最快,比 Triton 快 1.5-2 倍)、Marlin(需 Ampere 及以上 GPU,计算能力 ≥ 8.0,在 A100/H100 上约快 2 倍)、Triton(仅 Linux,比 CUDA 后端快 1.2-1.5 倍)。
  • 集成能力:可直接通过 transformers 加载量化模型(自动检测 GPTQ);支持 QLoRA 微调(GPTQ + LoRA),资料称 70B 模型可在单张 A100 80GB 上训练。
  • 部署模式:支持多 GPU 自动/手动设备映射、CPU 卸载、批量推理。

使用方式

安装:

pip install auto-gptq
pip install auto-gptq[triton]        # 仅 Linux,更快
pip install auto-gptq --no-build-isolation   # 带 CUDA 扩展,更快
pip install auto-gptq transformers accelerate  # 完整安装

加载预量化模型(示例):

from transformers import AutoTokenizer
from auto_gptq import AutoGPTQForCausalLM

model_name = "TheBloke/Llama-2-7B-Chat-GPTQ"
model = AutoGPTQForCausalLM.from_quantized(
    model_name,
    device="cuda:0",
    use_triton=False
)
tokenizer = AutoTokenizer.from_pretrained(model_name)

自行量化模型:使用 BaseQuantizeConfig 配置 bits、group_size、desc_act、damp_percent,加载模型后准备校准数据(资料示例使用 c4 数据集,取 128 条、每条截断至 512 token),调用 model.quantize(calibration_data),再通过 save_quantized 保存或 push_to_hub 推送。

通过 transformers 直接使用:

from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained(
    "TheBloke/Llama-2-13B-Chat-GPTQ",
    device_map="auto",
    trust_remote_code=False
)

性能数据(资料提供)

显存缩减:Llama 2-7B 从 14 GB 降至 3.5 GB;13B 从 26 GB 降至 6.5 GB;70B 从 140 GB 降至 35 GB;Llama 3-405B 从 810 GB 降至 203 GB,均为约 4 倍。

推理速度(Llama 2-7B,A100):FP16 为 25 tok/s;GPTQ 4-bit(CUDA)85 tok/s(3.4×);ExLlama 105 tok/s(4.2×);Marlin 120 tok/s(4.8×)。

精度(WikiText-2 困惑度):Llama 2-7B 从 5.47 升至 5.55(+1.5%);13B 从 4.88 升至 4.95(+1.4%);70B 从 3.32 升至 3.38(+1.8%)。

支持的模型与资源

资料列出支持的模型系列包括 LLaMA 家族(Llama 2、Llama 3、Code Llama)、Mistral(7B、Mixtral 8x7B、8x22B)、Qwen(Qwen、Qwen2、QwQ)、DeepSeek(V2、V3)、Phi(Phi-2、Phi-3)以及 Yi、Falcon、BLOOM、OPT,HuggingFace 上有 100 多个模型。预量化模型可在 TheBloke 的 HuggingFace 页面(https://huggingface.co/TheBloke)或 https://huggingface.co/models?library=gptq 查找。

相关资源:GitHub https://github.com/AutoGPTQ/AutoGPTQ;论文 arXiv:2210.17323;Discord https://discord.gg/autogptq。

限制与注意事项

资料中的操作流程强调:先检查环境(GPU 类型、显存、驱动/CUDA 版本、框架版本、数据集位置与大小);确认输入格式、标识符与参数;先做小规模冒烟测试;执行完整任务;在留出数据上验证指标并与基线对比,记录随机种子、配置与硬件;报告运行内容与不确定项。

常见问题处理:CUDA 显存不足时减小 batch size、启用梯度累积/检查点或混合精度、或对模型分片;损失为 NaN 或发散时降低学习率、检查数据非法值并启用梯度裁剪;若指令中的函数、标志或端点在当前安装版本中不存在,应查阅该版本文档并告知用户,不得虚构 API;输入、标识符或参数不明确时应询问用户或明确说明假设。

资料还提示:不要编造结果、参数、标识符、引用或统计数据;没有日志不要声称训练结果;大任务前先估算算力成本;版本相关细节可能过时,应以所安装版本的官方文档为准;涉及花钱、占用共享 GPU 或云配额、触碰个人或患者数据、或不可撤销的操作前应先询问。

相关技能

资料列出相关技能:quantizing-models-bitsandbytes(8-bit 或 4-bit 量化,50-75% 显存缩减)、hqq-quantization(无需校准数据的半二次量化)、awq-quantization(激活感知权重量化,4-bit 压缩,约 3 倍加速)。