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) 是一种快速、即插即用且与模型无关的量化技术,能够在不牺牲精度的前提下,为大语言模型提供最先进的性能。

🔍 这里有什么

📊 功能对比:SINQ 与 HQQ(无需校准)以及 A-SINQ 与 AWQ(已校准)

功能SINQHQQA-SINQAWQ
🎯 校准无需校准无需校准已校准已校准
🧮 量化类型对称与非对称仅非对称对称与非对称对称与非对称
📦 NF4 支持是No是No
⚡ 量化速度~2× 更快 于 HQQ较慢~4× 更快 比 AWQ较慢
📈 模型质量更高降低更高降低

📄 想了解更多?

  • 阅读我们在 arXiv 上发表的论文
  • 查看官方的 SINQ GitHub 仓库

1. 使用 SINQ 量化任意 LLM

设置与快速入门

首先,安装该包。可以通过以下两种方式完成:

  • 使用官方 Github 仓库 SINQ 从源代码安装 [推荐]
  • 使用 pip 软件包:
pip install sinq

几行代码完成量化

使用 SINQ 量化任意 🤗 Hugging Face 模型非常简单,只需几行代码即可。 首先,创建一个 SinqConfig 并指定以下参数:

标志描述类型选项默认
--nbits权重量化的位宽int2, 3, 4, 5, 6, 84
--tiling_mode权重矩阵平铺策略str1D, 2D1D
--group_size每个量化组的权重int64, 12864
--method量化方法strsinq, asinqsinq
--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 有用

  • 通过在 SINQ GitHub 仓库中点亮一颗 ⭐️ 来支持我们的项目
  • 请引用我们的论文:
@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 量化模型不支持多 GPU 选项,因此如果您的系统包含多个 GPU,请指定要使用哪一个。

Update on GitHub