Hugging Face AutoGPTQ 与 Transformers 集成
Hugging Face 已将 AutoGPTQ 库集成到 Transformers 库中,允许用户以 8、4、3 或 2 位精度对大语言模型 (LLM) 进行量化和运行。这种集成显著降低了部署 LLM 的硬件要求,实现了在精度损失微乎其微的情况下进行 4 位量化,并且在小批量大小下,推理速度与 float16 (fp16) 基准相当。
GPTQ 量化技术概述
GPTQ 是一种训练后量化 (PTQ) 方法,它使用校准数据集和数小时的计算来压缩预训练模型。与在训练期间进行的量化感知训练 (QAT) 不同,GPTQ 允许在无需昂贵的全文重训的情况下压缩大规模模型。
混合精度方案
GPTQ 采用混合 int4/fp16 量化方案。在这种架构中,权重被量化为 int4,而激活值保持为 float16。在推理过程中,权重在靠近计算单元的融合内核 (fused kernel) 中即时去量化,而不是在 GPU 全局内存中。这带来了两个主要优势:
- 节省内存:Int4 量化可提供接近 4 倍的内存节省。
- 推理速度:通过降低权重位宽来减少数据通信时间,从而实现潜在的加速。
量化算法
GPTQ 基于最优脑量化 (OBQ) 框架构建。它将每一层的压缩视为最小化原始权重矩阵与量化版本之间均方误差 (MSE) 的问题。通过采用逐通道量化,GPTQ 一次量化一个权重,并使用 Hessian 矩阵更新剩余的非量化权重以补偿误差。
GPTQ 对此过程进行了优化,使其比 OBQ 快得多。例如,一个 Bloom 模型 (176B) 可以在不到 4 个 GPU 小时内完成量化,而使用 OBQ 对一个 BERT 模型 (336M) 进行量化则需要 2 个 GPU 小时。
AutoGPTQ 与 Transformers 集成
AutoGPTQ 是一个提供广泛覆盖各种 transformer 架构的库,这使其比特定架构的实现更具通用性。Hugging Face 通过 Optimum 库集成了 AutoGPTQ API 的极简版本,为 LLM 量化提供原生的 Transformers API。
原生支持与用法
用户现在可以通过安装 AutoGPTQ 和 optimum,直接通过 AutoModelForCausalLM 运行 GPTQ 模型。该集成同时支持 Nvidia GPU 和由 RoCm 驱动的 AMD GPU。
此次集成的关键优势包括:
- 可序列化性:量化后的模型可以保存并在 Hugging Face Hub 上共享。
- 性能:在小批量大小下,推理延迟与 FP16 推理相当。
- 硬件兼容性:通过 RoCm 原生支持 AMD GPU。
- 内核支持:支持多种架构下的 Exllama 内核。
性能基准测试
在单张 NVIDIA A100-SXM4-80GB GPU 上进行的基准测试中(提示长度 512,生成 token 数 512,batch size 1),观察到以下结果:
| gptq | act_order | bits | group_size | kernel | Load time (s) | Per-token latency (ms) | Throughput (tokens/s) | Peak memory (MB) |
|---|---|---|---|---|---|---|---|---|
| False | None | None | None | None | 26.0 | 36.958 | 27.058 | 29152.98 |
| True | False | 4 | 128 | exllama | 36.2 | 33.711 | 29.663 | 10484.34 |
| True | False | 4 | 128 | autogptq-cuda-old | 36.2 | 46.44 | 21.53 | 10344.62 |
部署与微调
Text-Generation-Inference (TGI)
GPTQ 支持已添加到用于生产级服务的 Text-Generation-Inference (TGI) 库中。这使得在有限的硬件上部署超大规模模型成为可能;例如,现在可以在单张 A100-80GB GPU 上运行 70B 模型,而使用 fp16 检查点则无法实现这一点。
使用 PEFT 进行微调
虽然量化模型无法使用标准方法进行训练,但用户可以利用 PEFT (Parameter-Efficient Fine-Tuning) 库在冻结的量化模型之上训练适配器 (adapters)。
当前局限性与未来方向
支持的架构
目前,该集成支持具有 decoder-only 或 encoder-only 架构的大语言模型(例如 Llama, OPT, GPT-Neo, GPT-NeoX)。视觉、音频和多模态模型尚未得到支持。
改进领域
- 内核优化:虽然使用了 Exllama 内核,但通过基于 Triton 的内核或来自 MIT Han Lab 或 Kim et al. 的其他实现仍有进一步改进的潜力。
- 权重与激活值量化:GPTQ 仅对权重进行量化。未来的方向包括探索可以利用 Nvidia Tensor Cores 进行整数运算的 W4A8 量化内核。
- Batch Size 扩展:设计能够随较大 batch size 高效扩展的高性能 W4A16 内核仍然是一个开放的挑战。