Half-Quadratic Quantization (HQQ) 开源项目教程
项目介绍
Half-Quadratic Quantization (HQQ) 是一个快速且精确的模型量化工具,它不需要校准数据即可量化大型模型。HQQ 的核心优势在于其速度和兼容性,支持 8、4、3、2、1 位量化,并且可以应用于任何模型(如大型语言模型和视觉模型)。HQQ 的反量化步骤是线性操作,这意味着它与各种优化的 CUDA/Triton 内核兼容。此外,HQQ 还支持 peft 训练,并尝试使其完全兼容 torch compile
,以实现更快的推理和训练。
项目快速启动
安装
推荐使用以下方法安装最新版本的 HQQ 并构建其相应的 CUDA 内核:
pip install hqq
量化模型
要量化一个模型,需要创建一个 HqqConfig
。以下是两种创建 HqqConfig
的方法:
from transformers import AutoModelForCausalLM, AutoTokenizer, HqqConfig
# 方法1:所有线性层将使用相同的量化配置
quant_config = HqqConfig(nbits=8, group_size=64, quant_zero=False, quant_scale=False, axis=0)
应用案例和最佳实践
语言模型量化
HQQ 可以用于量化大型语言模型,如 GPT 系列模型。以下是一个量化 GPT-2 模型的示例:
from transformers import AutoModelForCausalLM, AutoTokenizer, HqqConfig
# 加载模型和分词器
model = AutoModelForCausalLM.from_pretrained("gpt2")
tokenizer = AutoTokenizer.from_pretrained("gpt2")
# 创建量化配置
quant_config = HqqConfig(nbits=4, group_size=64, quant_zero=False, quant_scale=False, axis=0)
# 量化模型
quantized_model = model.quantize(quant_config)
视觉模型量化
HQQ 同样适用于视觉模型,如 ResNet 系列模型。以下是一个量化 ResNet-50 模型的示例:
from transformers import AutoModelForImageClassification, HqqConfig
# 加载模型
model = AutoModelForImageClassification.from_pretrained("microsoft/resnet-50")
# 创建量化配置
quant_config = HqqConfig(nbits=4, group_size=64, quant_zero=False, quant_scale=False, axis=0)
# 量化模型
quantized_model = model.quantize(quant_config)
典型生态项目
Hugging Face Transformers
HQQ 与 Hugging Face Transformers 库兼容,可以直接在 Transformers 库中使用 HQQ 进行模型量化。以下是一个在 Transformers 库中使用 HQQ 的示例:
from transformers import AutoModelForCausalLM, AutoTokenizer, HqqConfig
# 加载模型和分词器
model = AutoModelForCausalLM.from_pretrained("gpt2")
tokenizer = AutoTokenizer.from_pretrained("gpt2")
# 创建量化配置
quant_config = HqqConfig(nbits=4, group_size=64, quant_zero=False, quant_scale=False, axis=0)
# 量化模型
quantized_model = model.quantize(quant_config)
PyTorch
HQQ 与 PyTorch 完全兼容,可以直接在 PyTorch 项目中使用 HQQ 进行模型量化。以下是一个在 PyTorch 中使用 HQQ 的示例:
import torch
from hqq import HqqConfig
# 加载模型
model = torch.hub.load('pytorch/vision:v0.9.0', 'resnet50', pretrained=True)
# 创建量化配置
quant_config = HqqConfig(nbits=4, group_size=64, quant_zero=False, quant_scale=False, axis=0)
# 量化模型
quantized_model = model.quantize(quant_config)
通过以上教程,您可以快速上手并应用 HQQ 进行模型量化,从而提高模型推理和训练的效率。