Transformers 文档

HQQ

Hugging Face's logo
加入Hugging Face社区

并获取增强型文档体验

开始使用

HQQ

半二次量化 (Half-Quadratic Quantization, HQQ) 通过快速鲁棒优化实现了动态量化。它不需要校准数据,可用于量化任何模型。
更多详细信息,请参考官方包

对于安装,我们建议您使用以下方法获取最新版本并构建其相应的 CUDA 内核。

pip install hqq

要量化模型,您需要创建一个HqqConfig。有两种方法可以做到这一点。

from transformers import AutoModelForCausalLM, AutoTokenizer, HqqConfig

# Method 1: all linear layers will use the same quantization config
quant_config  = HqqConfig(nbits=8, group_size=64, quant_zero=False, quant_scale=False, axis=0) #axis=0 is used by default
# Method 2: each linear layer with the same tag will use a dedicated quantization config
q4_config = {'nbits':4, 'group_size':64, 'quant_zero':False, 'quant_scale':False}
q3_config = {'nbits':3, 'group_size':32, 'quant_zero':False, 'quant_scale':False}
quant_config  = HqqConfig(dynamic_config={
  'self_attn.q_proj':q4_config,
  'self_attn.k_proj':q4_config,
  'self_attn.v_proj':q4_config,
  'self_attn.o_proj':q4_config,

  'mlp.gate_proj':q3_config,
  'mlp.up_proj'  :q3_config,
  'mlp.down_proj':q3_config,
})

第二种方法对于量化混合专家 (MoE) 尤其有趣,因为专家受较低量化设置的影响较小。

然后,您只需按如下方式量化模型

model = transformers.AutoModelForCausalLM.from_pretrained(
    model_id, 
    torch_dtype=torch.float16, 
    device_map="cuda", 
    quantization_config=quant_config
)

优化运行时

HQQ 支持各种后端,包括纯 PyTorch 和自定义反量化 CUDA 内核。这些后端适用于旧的 gpu 和 peft/QLoRA 训练。为了获得更快的推理速度,HQQ 支持 4 位融合内核(TorchAO 和 Marlin),在单个 4090 上可达到每秒 200 个 token。有关如何使用后端的更多详细信息,请参阅https://github.com/mobiusml/hqq/?tab=readme-ov-file#backend

< > GitHub 更新