Transformers documentation
HQQ
HQQ
Half-Quadratic Quantization (HQQ) поддерживает быструю квантизацию «на лету» для 8, 4, 3, 2 и даже 1 бита. Для неё не требуются данные калибровки, и она совместима с моделями любого типа (LLM, vision и т. д.).
HQQ также поддерживает дообучение с PEFT и полностью совместим с torch.compile для ещё более быстрого вывода и обучения.
Установите HQQ следующей командой, чтобы получить последнюю версию и собрать соответствующие CUDA-ядра, если вы используете устройство cuda. Также поддерживается Intel XPU с чистой реализацией на PyTorch.
pip install hqq
Вы можете либо заменить все линейные слои в модели на один и тот же конфигурационный файл квантования, либо назначить конкретный конфигурационный файл квантования для конкретных линейных слоев.
Квантуйте модель, создав HqqConfig и указав nbits и group_size для замены всех линейных слоёв (torch.nn.Linear) модели.
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
)Квантуйте модель, создав словарь, в котором указаны nbits и group_size для линейных слоёв, подлежащих квантованию. Передайте их в HqqConfig и с помощью конфигурации укажите, какие слои квантовать. Этот подход особенно полезен для квантования моделей с механизмом mixture-of-experts (MoE), поскольку они меньше страдают от более низких настроек квантования.
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
)Бэкенды
HQQ поддерживает различные бэкенды, включая чистый PyTorch и собственные CUDA-ядра для деквантования. Эти бэкенды подходят для старых GPU и обучения PEFT/QLoRA.
from hqq.core.quantize import *
HQQLinear.set_backend(HQQBackend.PYTORCH)Для более быстрого вывода HQQ поддерживает 4-битные объединённые ядра (torchao и Marlin) после квантования модели. Они позволяют достигать до 200 токенов/сек на одном 4090. Пример ниже демонстрирует, как включить бэкенд torchao_int4.
from hqq.utils.patching import prepare_for_inference
prepare_for_inference("model", backend="torchao_int4")См. руководство Backend для получения подробной информации.
Ресурсы
Подробнее о HQQ читайте в блоге Half-Quadratic Quantization of Large Machine Learning Models.
Update on GitHub