Transformers documentation

SINQ

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

Quantização Normalizada por Sinkhorn (SINQ) é uma técnica de quantização rápida, plug-and-play e agnóstica ao modelo, que oferece desempenho de estado da arte para Modelos de Linguagem de Grande Escala sem sacrificar a precisão.

🔍 O que você encontrará aqui

📊 Comparativo de recursos: SINQ vs HQQ (sem calibração) e A-SINQ vs AWQ (com calibração)

RecursoSINQHQQA-SINQAWQ
🎯 CalibraçãoSem calibraçãoSem calibraçãoCalibradoCalibrado
🧮 Tipo de quantizaçãoSimétrico & AssimétricoSomente assimétricoSimétrico & AssimétricoSimétrico & Assimétrico
📦 Suporte a NF4SimNãoSimNão
⚡ Velocidade de quantização~2× mais rápido que HQQMais lento~4× mais rápido que AWQMais lento
📈 Qualidade do ModeloSuperiorMenorSuperiorMenor

📄 Quer saber mais?

  • Leia nosso artigo no arXiv
  • Verifique o repositório oficial do SINQ no github

1. Quantize qualquer LLM com SINQ

Configuração e Início Rápido

Primeiro, instale o pacote. Isso pode ser feito de duas maneiras:

  • A partir do código-fonte usando o repositório oficial do Github SINQ [Recomendado]
  • Usando o pacote pip:
pip install sinq

Quantize em poucas linhas

Quantizar qualquer modelo do 🤗 Hugging Face com SINQ é simples e requer apenas algumas linhas de código. Primeiro, crie um SinqConfig e especifique os seguintes parâmetros:

FlagDescriçãoTipoOpçõesPadrão
--nbitsLargura de bits para quantização de pesosint2, 3, 4, 5, 6, 84
--tiling_modeEstratégia de tiling da matriz de pesosstr1D, 2D1D
--group_sizePesos por grupo de quantizaçãoint64, 12864
--methodMétodo de quantizaçãostrsíncrono, assíncronosinq
--modules_to_not_convertLista das camadas que NÃO são quantizadasLista de str[lm_head, …][lm_head]

Em seguida, especifique o modelo que deseja quantizar e passe o SinqConfig como opção de configuração de quantização

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
)

✅ É isso. Seu modelo agora está quantizado com SINQ e pronto para inferência ou salvamento.

Consulte nosso repositório oficial no GitHub SINQ para se manter atualizado!


Salvar e recarregar

Se você deseja reutilizar um modelo quantizado posteriormente, salve-o em disco ou envie-o para o HuggingFace Hub e recarregue-o sem precisar dos pesos base em FP. Se você instalou o SINQ a partir do código-fonte, deve chamar a função patch_hf_pretrained_io ao recarregar um modelo quantizado:

# 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)

Caso contrário, se você instalou o SINQ por meio do pip, pode simplesmente usar as funções embutidas do 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)

✅ Seu modelo agora está carregado e pronto para inferência!

Observação: se o modelo tiver sido quantizado em 4 bits e a biblioteca gemlite estiver instalada, o kernel mais rápido do gemlite é usado para executar a inferência.


Compatível com o framework de avaliação lm-eval

Abaixo está um exemplo mínimo mostrando como avaliar um modelo quantizado com SINQ em um conjunto de dados de referência:

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. Como citar este trabalho

Se você encontrar o SINQ útil em suas pesquisas ou aplicações

  • Apoie nosso projeto dando uma estrela ⭐️ no repositório do github SINQ
  • Por favor, cite nosso artigo:
@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. Limitações atuais

Atualmente, o método A-SINQ não é suportado no Hugging Face. Consulte o repositório oficial SINQ para quantizar um modelo com essa estratégia. No momento, a estratégia de quantização SINQ e os modelos quantizados com SINQ não suportam a opção Multi-GPU, portanto, se o seu sistema possui múltiplas GPUs, especifique qual delas deve ser utilizada.

Update on GitHub