Transformers documentation

SINQ

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

arXiv License GitHub stars hf-space

SINQ

Sinkhorn-Normalized Quantization (SINQ) — это быстрый, универсальный и не требующий доработок метод квантования, обеспечивающий передовые результаты для больших языковых моделей без потери точности.

🔍 Что вы найдёте здесь

📊 Сравнение возможностей: SINQ и HQQ (без калибровки), а также A-SINQ и AWQ (с калибровкой)

ВозможностьSINQHQQA-SINQAWQ
🎯 КалибровкаБез калибровкиБез калибровкиОткалиброванныйОткалиброванный
🧮 Тип квантованияСимметрические и асимметрическиеТолько асимметричныйСимметрические и асимметрическиеСимметрические и асимметрические
📦 Поддержка NF4ДаНетДаНет
⚡ Скорость квантования~2× быстрее, чем HQQМедленнее~4× Быстрее, чем AWQМедленнее
📈 Качество моделиВышеНижеВышеНиже

📄 Хотите узнать больше?

  • Прочитайте нашу статью на arXiv
  • Проверьте официальный репозиторий SINQ на GitHub

1. Квантование любой LLM с помощью SINQ

Настройка и быстрый старт

Сначала установите пакет. Это можно сделать двумя способами:

  • Из исходного кода с официального репозитория на Github SINQ [Рекомендуется]
  • Использование пакета pip:
pip install sinq

Квантование в несколько строк

Квантование любой модели 🤗 Hugging Face с помощью SINQ — это просто, и для этого требуется всего несколько строк кода. Сначала создайте SinqConfig и укажите следующие параметры:

ФлагОписаниеТипПараметрыПо умолчанию
--nbitsРазрядность для квантования весовint2, 3, 4, 5, 6, 84
--tiling_modeСтратегия тайлинга матрицы весовstr1D, 2D1D
--group_sizeВесов на группу квантованияint64, 12864
--methodМетод квантованияstrsinq, asinqsinq
--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