[ PROMPT_NODE_22820 ]
gptq
[ SKILL_DOCUMENTATION ]
# GPTQ (生成式预训练 Transformer 量化)
一种训练后量化方法,通过分组量化将大语言模型压缩至 4-bit,且精度损失极小。
## 何时使用 GPTQ
**在以下情况使用 GPTQ:**
- 需要在有限的 GPU 显存中容纳大模型 (70B+)
- 希望实现 4 倍内存压缩,且精度损失 <2%
- 在消费级 GPU (RTX 4090, 3090) 上部署
- 需要更快的推理速度 (相比 FP16 加速 3-4 倍)
**建议在以下情况使用 AWQ:**
- 需要略高的精度 (<1% 损失)
- 拥有较新的 GPU (Ampere, Ada)
- 需要 Marlin 内核支持 (在某些 GPU 上速度提升 2 倍)
**建议在以下情况使用 bitsandbytes:**
- 需要与 transformers 的简单集成
- 需要 8-bit 量化(压缩率较低,但质量更好)
- 不需要预量化的模型文件
## 快速开始
### 安装
bash
# 安装 AutoGPTQ
pip install auto-gptq
# 使用 Triton (仅限 Linux,速度更快)
pip install auto-gptq[triton]
# 使用 CUDA 扩展 (速度更快)
pip install auto-gptq --no-build-isolation
# 完整安装
pip install auto-gptq transformers accelerate
### 加载预量化模型
python
from transformers import AutoTokenizer
from auto_gptq import AutoGPTQForCausalLM
# 从 HuggingFace 加载量化模型
model_name = "TheBloke/Llama-2-7B-Chat-GPTQ"
model = AutoGPTQForCausalLM.from_quantized(
model_name,
device="cuda:0",
use_triton=False # Linux 上设为 True 以提升速度
)
tokenizer = AutoTokenizer.from_pretrained(model_name)
# 生成
prompt = "Explain quantum computing"
inputs = tokenizer(prompt, return_tensors="pt").to("cuda:0")
outputs = model.generate(**inputs, max_new_tokens=200)
print(tokenizer.decode(outputs[0]))
### 量化你自己的模型
python
from transformers import AutoTokenizer
from auto_gptq import AutoGPTQForCausalLM, BaseQuantizeConfig
from datasets import load_dataset
# 加载模型
model_name = "meta-llama/Llama-2-7b-chat-hf"
tokenizer = AutoTokenizer.from_pretrained(model_name)
# 量化配置
quantize_config = BaseQuantizeConfig(
bits=4, # 4-bit 量化
group_size=128, # 分组大小 (推荐: 128)
desc_act=False, # 激活顺序 (CUDA 内核设为 False)
damp_percent=0.01 # 阻尼因子
)
# 加载模型进行量化
model = AutoGPTQForCausalLM.from_pretrained(
model_name,
quantize_config=quantize_config
)
# 准备校准数据
dataset = load_dataset("c4", split="train", streaming=True)
calibration_data = [
tokenizer(example["text"])["input_