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.2).
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 modeloMayorInferiorMayorMenor

📄 ¿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