Transformers documentation
HQQ
HQQ
Half-Quadratic Quantization (HQQ) permite una cuantización rápida sobre la marcha para 8, 4, 3, 2 e incluso 1 bits. No requiere datos de calibración y es compatible con cualquier modalidad de modelo (LLMs, visión, etc.).
HQQ también admite el ajuste fino con PEFT y es totalmente compatible con torch.compile para una inferencia y un entrenamiento aún más rápidos.
Instale HQQ con el siguiente comando para obtener la última versión y compilar sus correspondientes kernels de CUDA si está utilizando un dispositivo cuda. También es compatible con Intel XPU mediante una implementación pura de PyTorch.
pip install hqq
Puede optar por reemplazar todas las capas lineales de un modelo con la misma configuración de cuantización o bien asignar una configuración de cuantización específica a capas lineales concretas.
Cuantice un modelo creando un HqqConfig y especificando nbits y group_size para reemplazar todas las capas lineales (torch.nn.Linear) del modelo.
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, HqqConfig
quant_config = HqqConfig(nbits=8, group_size=64)
model = AutoModelForCausalLM.from_pretrained(
"meta-llama/Llama-3.1-8B",
dtype=torch.float16,
device_map="auto",
quantization_config=quant_config
)Cuantice un modelo creando un diccionario que especifique nbits y group_size para las capas lineales a cuantizar. Páselos a HqqConfig y establezca qué capas cuantizar con la configuración. Este enfoque es especialmente útil para cuantizar mezclas de expertos (MoE), ya que se ven menos afectadas por configuraciones de cuantización más bajas.
q4_config = {'nbits':4, 'group_size':64}
q3_config = {'nbits':3, 'group_size':32}
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,
})
model = transformers.AutoModelForCausalLM.from_pretrained(
"meta-llama/Llama-3.1-8B",
dtype=torch.float16,
device_map="auto",
quantization_config=quant_config
)Backends
HQQ admite varios backends, incluidos PyTorch puro y kernels CUDA de descuantización personalizados. Estos backends son adecuados para GPUs más antiguas y para el entrenamiento con PEFT/QLoRA.
from hqq.core.quantize import *
HQQLinear.set_backend(HQQBackend.PYTORCH)Para una inferencia más rápida, HQQ admite núcleos fusionados de 4 bits (torchao y Marlin) después de que un modelo se cuantiza. Estos pueden alcanzar hasta 200 tokens/seg en una sola 4090. El ejemplo de abajo demuestra cómo habilitar el backend torchao_int4.
from hqq.utils.patching import prepare_for_inference
prepare_for_inference("model", backend="torchao_int4")Consulte la guía de Backend para obtener más detalles.
Recursos
Lea la publicación de blog Half-Quadratic Quantization of Large Machine Learning Models para obtener más detalles sobre HQQ.
Update on GitHub