Transformers documentation
SINQ
SINQ
Sinkhorn-Normalized Quantization (SINQ), doğrulukta ödün vermeden Büyük Dil Modelleri için en iyi performansı sunan, hızlı, tak-çalıştır ve model bağımsız bir kuantizasyon tekniğidir.
🔍 Burada Neler Bulacaksınız
- 1. SINQ ile herhangi bir LLM'i (ve kaydetmek için) kuantize edin
- 2. Bu Çalışmayı Nasıl Atıf Yapılır
- 3. Mevcut Sınırlamalar
📊 Özellik Karşılaştırması: SINQ ve HQQ (kalibrasyonsuz) ile A-SINQ ve AWQ (kalibreli)
| Özellik | SINQ | HQQ | A-SINQ | AWQ |
|---|---|---|---|---|
| 🎯 Kalibrasyon | Kalibrasyonsuz | Kalibrasyonsuz | Kalibre Edilmiş | Kalibre Edilmiş |
| 🧮 Kantizasyon Türü | Simetrik ve Asimetrik | Yalnızca asimetrik | Simetrik ve Asimetrik | Simetrik ve Asimetrik |
| 📦 NF4 Desteği | Evet | Hayır | Evet | Hayır |
| ⚡ Kantizasyon Hızı | HQQ'den ~2× daha hızlı | Daha yavaş | AWQ'dan ~4× Daha Hızlı | Daha yavaş |
| 📈 Model Kalitesi | Daha yüksek | Düşük | Daha yüksek | Düşük |
📄 Daha fazla bilgi edinmek ister misiniz?
1. SINQ ile herhangi bir LLM'i kuantize edin
Kurulum ve Hızlı Başlangıç
Öncelikle paketi yükleyin. Bu iki şekilde yapılabilir:
- Resmî Github deposu SINQ kullanılarak kaynak kodundan [Önerilen]
- pip paketi kullanılarak:
pip install sinq
Birkaç satırda kuantizasyon yapın
SINQ ile herhangi bir 🤗 Hugging Face modelini kuantize etmek basittir ve yalnızca birkaç satır kod gerektirir. Öncelikle bir SinqConfig oluşturun ve aşağıdaki parametreleri belirtin:
| Bayrak | Açıklama | Tür | Seçenekler | Varsayılan |
|---|---|---|---|---|
--nbits | Ağırlık kuantizasyonu için bit genişliği | int | 2, 3, 4, 5, 6, 8 | 4 |
--tiling_mode | Ağırlık matrisi karoları oluşturma stratejisi | str | 1D, 2D | 1D |
--group_size | Kantizasyon grubu başına ağırlıklar | int | 64, 128 | 64 |
--method | Kantizasyon yöntemi | str | sinq, asinq | sinq |
--modules_to_not_convert | Kantize edilmeyen katmanların listesi | str listesi | [lm_head, …] | [lm_head] |
Ardından, kuantize etmek istediğiniz modeli belirtin ve SinqConfig'i kuantizasyon yapılandırması seçeneği olarak iletin
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
)
✅ Bu kadar. Modeliniz artık SINQ ile kuantize edildi ve çıkarım veya kaydetme için hazır.
Güncel kalmak için resmi SINQ github deposumuzu kontrol edin!
Kaydet & yeniden yükle
Daha sonra bir kuantize modeli yeniden kullanmak istiyorsanız, onu diske kaydedin veya HuggingFace Hub'a gönderin ve temel FP ağırlıklarına ihtiyaç duymadan yeniden yükleyin. SINQ'ı kaynak kodundan yüklediyseniz, kuantize bir modeli yeniden yüklerken patch_hf_pretrained_io fonksiyonunu çağırmalısınız:
# 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)Aksi takdirde, SINQ'ı pip üzerinden yüklediyseniz, HF yerleşik işlevlerini doğrudan kullanabilirsiniz:
# --- 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)
✅ Modeliniz artık yüklendi ve çıkarım için hazır!
Not: Model 4 bit olarak kuantize edilmişse ve
gemlitekütüphanesi yüklüyse, çıkarım (inference) için gemlite daha hızlı çekirdeği kullanılır.
lm-eval değerlendirme çerçevesiyle uyumlu
Aşağıda, SINQ-kuantize edilmiş bir modelin bir benchmark veri setinde nasıl değerlendirileceğini gösteren minimal bir örnek bulunmaktadır:
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. Bu Çalışmayı Nasıl Atıf Yapılır
Araştırmalarınızda veya uygulamalarınızda SINQ'ı faydalı bulduysanız
- SINQ github deposuna yıldız ⭐️ ekleyerek projemizi destekleyin
- Lütfen makalemizi atıf olarak kullanın:
@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. Mevcut Sınırlamalar
Şu anda A-SINQ yöntemi Hugging Face'te desteklenmemektedir. Bir modeli bu stratejiyle kuantize etmek için lütfen resmi SINQ deposuna başvurun. Şu anda SINQ kuantizasyon stratejisi ve SINQ ile kuantize edilmiş modeller, Multi-GPU seçeneğini desteklememektedir; bu nedenle sisteminizde birden çok GPU varsa, hangisinin kullanılacağını belirtmeniz gerekir.
Update on GitHub