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 更新