Transformers documentation
SINQ
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ística | SINQ | HQQ | A-SINQ | AWQ |
|---|---|---|---|---|
| 🎯 Calibración | Sin calibración | Sin calibración | Calibrado | Calibrado |
| 🧮 Tipo de cuantización | Simétrico y asimétrico | Solo asimétrico | Simétrico y asimétrico | Simétrico y asimétrico |
| 📦 Soporte para NF4 | Sí | No | Sí | No |
| ⚡ Velocidad de cuantización | ~2× más rápido que HQQ | Más lento | ~4× más rápido que AWQ | Más lento |
| 📈 Calidad del modelo | Mayor | Inferior | Mayor | Menor |
📄 ¿Quieres saber más?
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:
| Flag | Descripción | Tipo | Opciones | Predeterminado |
|---|---|---|---|---|
--nbits | Ancho de bits para la cuantización de pesos | int | 2, 3, 4, 5, 6, 8 | 4 |
--tiling_mode | Estrategia de teselado de la matriz de pesos | str | 1D, 2D | 1D |
--group_size | Pesos por grupo de cuantización | int | 64, 128 | 64 |
--method | Método de cuantización | str | sinq, asinq | sinq |
--modules_to_not_convert | Lista de las capas que NO se cuantizan | Lista 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