Transformers documentation
SINQ
SINQ
Sinkhorn-Normalized Quantization (SINQ) — это быстрый, универсальный и не требующий доработок метод квантования, обеспечивающий передовые результаты для больших языковых моделей без потери точности.
🔍 Что вы найдёте здесь
📊 Сравнение возможностей: SINQ и HQQ (без калибровки), а также A-SINQ и AWQ (с калибровкой)
| Возможность | SINQ | HQQ | A-SINQ | AWQ |
|---|---|---|---|---|
| 🎯 Калибровка | Без калибровки | Без калибровки | Откалиброванный | Откалиброванный |
| 🧮 Тип квантования | Симметрические и асимметрические | Только асимметричный | Симметрические и асимметрические | Симметрические и асимметрические |
| 📦 Поддержка NF4 | Да | Нет | Да | Нет |
| ⚡ Скорость квантования | ~2× быстрее, чем HQQ | Медленнее | ~4× Быстрее, чем AWQ | Медленнее |
| 📈 Качество модели | Выше | Ниже | Выше | Ниже |
📄 Хотите узнать больше?
1. Квантование любой LLM с помощью SINQ
Настройка и быстрый старт
Сначала установите пакет. Это можно сделать двумя способами:
- Из исходного кода с официального репозитория на Github SINQ [Рекомендуется]
- Использование пакета pip:
pip install sinq
Квантование в несколько строк
Квантование любой модели 🤗 Hugging Face с помощью SINQ — это просто, и для этого требуется всего несколько строк кода. Сначала создайте SinqConfig и укажите следующие параметры:
| Флаг | Описание | Тип | Параметры | По умолчанию |
|---|---|---|---|---|
--nbits | Разрядность для квантования весов | int | 2, 3, 4, 5, 6, 8 | 4 |
--tiling_mode | Стратегия тайлинга матрицы весов | str | 1D, 2D | 1D |
--group_size | Весов на группу квантования | int | 64, 128 | 64 |
--method | Метод квантования | str | sinq, asinq | sinq |
--modules_to_not_convert | Список слоёв, которые НЕ квантуются | Список str | [lm_head, …] | [lm_head] |
Затем укажите модель, которую вы хотите квантовать, и передайте SinqConfig в качестве параметра конфигурации квантования
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM, SinqConfig
model_name = "Qwen/Qwen3-1.7B"
cfg = SinqConfig(
nbits=4,
group_size=64,
tiling_mode="1D",
method="sinq",
modules_to_not_convert=["lm_head"]
)
tok = AutoTokenizer.from_pretrained(model_name)
qmodel = AutoModelForCausalLM.from_pretrained(
model_name,
quantization_config=cfg,
dtype=torch.bfloat16
)
✅ Всё готово. Ваша модель теперь квантована с помощью SINQ и готова для инференса или сохранения.
Следите за последними обновлениями в нашем официальном репозитории SINQ на GitHub!
Сохранение и перезагрузка
Если вы хотите повторно использовать квантованную модель, сохраните её на диск или загрузите на HuggingFace Hub, чтобы затем загрузить её без необходимости в базовых FP-весах. Если вы установили SINQ из исходного кода, при повторной загрузке квантованной модели следует вызвать функцию patch_hf_pretrained_io:
# Save sinq quantized model
model.save_pretrained("/path/to/save/qwen3-1.7B-sinq-4bit")
model.push_to_hub("HF_Hub_username/qwen3-1.7B-sinq-4bit")
tokenizer.push_to_hub("HF_Hub_username/qwen3-1.7B-sinq-4bit")from sinq.hf_io import patch_hf_pretrained_io
patch_hf_pretrained_io()
# Reload a sinq quantized model
hf_hub_model = "HF_Hub_username/qwen3-1.7B-sinq-4bit"
tokenizer = AutoTokenizer.from_pretrained(hf_hub_model)
model = AutoModelForCausalLM.from_pretrained(hf_hub_model)В противном случае, если вы установили SINQ через pip, вы можете просто использовать встроенные функции HF:
# --- Save to a folder (sharded safetensors) ---
# 'model' must already be SINQ-quantized
# Locally save
qmodel.save_pretrained("/path/to/save/qwen3-1.7B-sinq-4bit")
# Push to the Hub
qmodel.push_to_hub("HF_Hub_username/qwen3-1.7B-sinq-4bit")
tok.push_to_hub("HF_Hub_username/qwen3-1.7B-sinq-4bit")
# --- Reload later--
save_dir = "/path/to/save/qwen3-1.7B-sinq-4bit"
hf_hub_model = "HF_Hub_username/qwen3-1.7B-sinq-4bit"
# From local directory
tok = AutoTokenizer.from_pretrained(save_dir)
qmodel = AutoModelForCausalLM.from_pretrained(save_dir)
# From HF Hub
tok = AutoTokenizer.from_pretrained(hf_hub_model)
qmodel = AutoModelForCausalLM.from_pretrained(hf_hub_model)
✅ Ваша модель теперь загружена и готова для инференса!
Примечание: если модель была квантована в 4 бита и библиотека
gemliteустановлена, для выполнения инференса используется более быстрый ядро gemlite.
Совместимо с фреймворком оценки lm-eval
Ниже приведен минимальный пример, показывающий, как оценить модель, квантованную с помощью SINQ, на наборе данных для бенчмаркинга:
import torch
from lm_eval import evaluator
from lm_eval.models.huggingface import HFLM
device = torch.accelerator.current_accelerator().type if torch.accelerator.is_available() else "cpu"
# Wrap the already quantized model and tokenizer with HFLM
lm = HFLM(pretrained=qmodel, tokenizer=tok, device=device)
# Evaluate (many tasks available on lm-eval such as MMLU and HellaSwag)
results = evaluator.simple_evaluate(
model=lm,
tasks=["wikitext"], # small and fast benchmark
device=device
)2. Как цитировать эту работу
Если вы находите SINQ полезным в своих исследованиях или приложениях
- Поддержите наш проект, поставив звёздочку ⭐️ в репозитории SINQ на GitHub
- Пожалуйста, цитируйте нашу статью:
@misc{muller2025sinq,
title={SINQ: Sinkhorn-Normalized Quantization for Calibration-Free Low-Precision LLM Weights},
author={Lorenz K. Muller and Philippe Bich and Jiawei Zhuang and Ahmet Celik and Luca Benfenati and Lukas Cavigelli},
year={2025},
eprint={2509.22944},
archivePrefix={arXiv},
primaryClass={cs.LG},
url={http://arxiv.org/abs/2509.22944}
}3. Ограничения
В настоящее время метод A-SINQ не поддерживается в Hugging Face. Для квантования модели с использованием этой стратегии обратитесь к официальному репозиторию SINQ. На данный момент стратегия квантования SINQ и модели, квантованные с её помощью, не поддерживают опцию Multi-GPU, поэтому, если в вашей системе несколько GPU, укажите, какой именно из них следует использовать.
Update on GitHub