讲解 GPTQ 这一面向大语言模型的一次性权重量化方法:利用近似二阶信息逐层压缩权重,并结合 Transformers 加载 GPTQ-Int8 模型、用 AutoGPTQ 量化自定义模型以及配合 vLLM 部署的完整示例。

| **[GitHub](https://github.com/AutoGPTQ/AutoGPTQ) | [Paper ](https://arxiv.org/abs/2210.17323)|**
简介
GPTQ是一种类似GPT的LLM的量化方法,它使用基于近似二阶信息的一次性权重量化。
https://zhuanlan.zhihu.com/p/2376060096
Transformer
1 | from transformers import AutoModelForCausalLM, AutoTokenizer |
vLLM
vLLM 支持 GPTQ,这意味着您可以直接使用我们提供的 GPTQ 模型或通过 vLLM 进行 AutoGPTQ 训练的模型。
1 | python -m vllm.entrypoints.openai.api_server --model Qwen/Qwen1.5-7B-Chat-GPTQ-Int8 |
或者使用 python client 调用:
1 | from openai import OpenAI |
AutoGPTQ 量化自定义模型
建议通过源代码安装来安装最新版本的软件包:
1 | git clone https://github.com/AutoGPTQ/AutoGPTQ |
构建自己的AWQ量化模型,并使用训练数据进行校准:
1 | from auto_gptq import AutoGPTQForCausalLM, BaseQuantizeConfig |
如果想在多个 GPU 上加载模型,则需要使用 max_memory 而不是 device_map。比如:
1 | model = AutoGPTQForCausalLM.from_pretrained( |
需要准备数据以进行校准。将样本放入一个列表中,其中每个样本都是一段文本。由于直接使用微调数据来进行校准,所以需要使用ChatML模板对其进行格式化:
1 | import torch |
其中每个 msg 是一个典型的聊天消息,如下所示:
1 | [ |
最后保存自己的模型:
1 | model.save_quantized(quant_path, use_safetensors=True) |

