SINQ
Sinkhorn-Normalized Quantization (SINQ)は、精度を犠牲にすることなく、大規模言語モデルに対して最先端の性能を実現する、高速でプラグアンドプレイ、モデル非依存の量子化手法です。
🔍 ここにあるもの
📊 機能比較: SINQ vs HQQ (キャリブレーション不要) および A-SINQ vs AWQ (キャリブレーション済み)
| 機能 | SINQ | HQQ | A-SINQ | AWQ |
|---|---|---|---|---|
| 🎯 較正 | キャリブレーション不要 | キャリブレーション不要 | キャリブレーション済み | キャリブレーション済み |
| 🧮 量子化タイプ | 対称と非対称 | 非対称のみ | 対称と非対称 | 対称 & 非対称 |
| 📦 NF4 対応 | はい | いいえ | はい | いいえ |
| ⚡ 量子化の速度 | HQQより約2倍高速 | 遅い | AWQより約4倍高速 | 遅い |
| 📈 モデルの品質 | より高い | 下 | より高い | 下 |
📄 さらに詳しく知りたいですか?
1. SINQで任意のLLMを量子化
セットアップとクイックスタート
まず、パッケージをインストールします。インストールには2つの方法があります。
- 公式のGithubリポジトリ SINQ からソースとしてインストールする [推奨]
- pip パッケージを使用する場合:
pip install sinq
数行で量子化
SINQによる🤗 Hugging Faceモデルの量子化は簡単で、わずか数行のコードで完了します。 まず、SinqConfigを作成し、以下のパラメータを指定します。
| フラグ | 説明 | 型 | オプション | デフォルト |
|---|---|---|---|---|
--nbits | 重みの量子化に使用するビット幅 | int | 2, 3, 4, 5, 6, 8 | 4 |
--tiling_mode | 重み行列のタイル化戦略 | str | 1D, 2D | 1D |
--group_size | 量子化グループごとの重み | int | 64, 128 | 64 |
--method | 量子化手法 | str | sinq, asinq | sinq |
--modules_to_not_convert | 量子化されないレイヤーのリスト | str のリスト | [lm_head, …] | [lm_head] |
次に、量子化したいモデルを指定し、SinqConfigを量子化設定オプションとして渡します。
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
)
✅ これで完了です。モデルはSINQで量子化され、推論や保存の準備が整いました。
最新情報をチェックするには、公式のSINQ GitHubリポジトリをご覧ください!
保存と再読み込み
後で量子化モデルを再利用する場合は、ディスクに保存するか HuggingFace Hub にプッシュし、ベースの FP 重みなしで読み戻すことができます。 SINQ をソースからインストールした場合は、量子化モデルを読み戻す際に patch_hf_pretrained_io 関数を呼び出す必要があります。
# 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)それ以外の場合、pip 経由で SINQ をインストールした場合は、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)
✅ モデルの読み込みが完了し、推論の準備が整いました!
注: モデルが4ビットで量子化されており、
gemliteライブラリがインストールされている場合、推論の実行には gemlite の高速カーネルが使用されます。
lm-eval評価フレームワークと互換性あり
以下は、ベンチマークデータセット上でSINQ量子化モデルを評価する方法を示す最小限の例です。
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. 本研究成果の引用方法
研究やアプリケーションにおいてSINQが有用だと感じられた場合
@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. 現在の制限
現在、Hugging Face では A-SINQ メソッドはサポートされていません。この戦略でモデルを量子化するには、公式の SINQ リポジトリ を参照してください。 現時点で、SINQ 量子化戦略および SINQ 量子化モデルは Multi-GPU オプションをサポートしていません。そのため、システムに複数の GPU がある場合は、使用する GPU を指定してください。
Update on GitHub