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

Sinkhorn-Normalized Quantization (SINQ) es una técnica de cuantización rápida, de uso inmediato e independiente del modelo, que ofrece un rendimiento de última generación para los Large Language Models sin sacrificar la precisión.

🔍 Lo que encontrarás aquí

📊 Comparación de características: SINQ frente a HQQ (sin calibración) y A-SINQ frente a AWQ (con calibración)

CaracterísticaSINQHQQA-SINQAWQ
🎯 CalibraciónSin calibraciónSin calibraciónCalibradoCalibrado
🧮 Tipo de cuantizaciónSimétrico y asimétricoSolo asimétricoSimétrico y asimétricoSimétrico y asimétrico
📦 Soporte para NF4SíNoSíNo
⚡ Velocidad de cuantización~2× más rápido que HQQMás lento~4× más rápido que AWQMás lento
📈 Calidad del modeloMayorInferiorMayorInferior

📄 ¿Quieres saber más?

  • Lee nuestro artículo en arXiv
  • Consulte el repositorio de GitHub oficial de SINQ

1. Cuantice cualquier LLM con SINQ

Configuración y comienzo rápido

Primero, instale el paquete. Se puede hacer de dos maneras:

  • Desde el código fuente usando el repositorio oficial de Github SINQ [Recomendado]
  • Usando el paquete pip:
pip install sinq

Cuantiza en unas pocas líneas

Cuantizar cualquier modelo de 🤗 Hugging Face con SINQ es sencillo y requiere solo unas pocas líneas de código. Primero, crea un SinqConfig y especifica los siguientes parámetros:

FlagDescripciónTipoOpcionesPredeterminado
--nbitsAncho de bits para la cuantización de pesosint2, 3, 4, 5, 6, 84
--tiling_modeEstrategia de teselado de la matriz de pesosstr1D, 2D1D
--group_sizePesos por grupo de cuantizaciónint64, 12864
--methodMétodo de cuantizaciónstrsinq, asinqsinq
--modules_to_not_convertLista de las capas que NO se cuantizanLista de str[lm_head, …][lm_head]

Luego, especifique el modelo que desea cuantizar y pase SinqConfig como opción de configuración de cuantización

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
)

✅ Listo. Tu modelo ahora está cuantizado con SINQ y está listo para inferencia o para guardarse.

¡Consulta nuestro repositorio oficial de GitHub SINQ para mantenerte al día!


Guardar y recargar

Si desea reutilizar un modelo cuantizado más adelante, guárdelo en el disco o súbelo al HuggingFace Hub y recárguelo sin necesidad de los pesos base en FP. Si instaló SINQ desde el código fuente, debe llamar a la función patch_hf_pretrained_io al recargar un modelo cuantizado:

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

En caso contrario, si instalaste SINQ a través de pip, puedes usar simplemente las funciones integradas de 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)

✅ ¡Tu modelo ya está cargado y listo para la inferencia!

Nota: Si el modelo ha sido cuantizado en 4 bits y se ha instalado la biblioteca gemlite, se utiliza el kernel más rápido de gemlite para ejecutar la inferencia.


Compatible con el marco de evaluación lm-eval

A continuación se muestra un ejemplo mínimo que ilustra cómo evaluar un modelo cuantizado con SINQ en un conjunto de datos de referencia:

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. Cómo citar este trabajo

Si encuentras que SINQ es útil en tus investigaciones o aplicaciones

  • Apoya nuestro proyecto añadiendo una estrella ⭐️ en el repositorio de github de SINQ
  • Cite nuestro artículo:
@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. Limitaciones actuales

Actualmente, el método A-SINQ no está soportado en Hugging Face. Consulte el repositorio oficial de SINQ para cuantizar un modelo con esta estrategia. En este momento, la estrategia de cuantización SINQ y los modelos cuantizados con SINQ no admiten la opción Multi-GPU, por lo que si su sistema cuenta con varias GPU, especifique cuál debe utilizarse.

Update on GitHub