Transformers documentation
SINQ
SINQ
Sinkhorn-Normalized Quantization (SINQ)은 정확도를 희생하지 않으면서 Large Language Models에 대해 최첨단 성능을 제공하는 빠르고, 플러그 앤 플레이 방식의, 모델에 무관한 양자화 기법입니다.
🔍 여기서 만나볼 수 있는 내용
📊 기능 비교: SINQ vs HQQ(교정 없음) 및 A-SINQ vs AWQ(교정됨)
| 기능 | SINQ | HQQ | A-SINQ | AWQ |
|---|---|---|---|---|
| 🎯 보정 | 교정 불필요 | 교정 불필요 | 보정됨 | 보정됨 |
| 🧮 양자화 유형 | 대칭 & 비대칭 | 비대칭 전용 | 대칭 & 비대칭 | 대칭 & 비대칭 |
| 📦 NF4 지원 | 예 | 아니요 | 예 | 아니요 |
| ⚡ 양자화 속도 | HQQ보다 2배 빠름 | 느림 | AWQ보다 4배 빠름 | 느림 |
| 📈 모델 품질 | 높음 | 낮추기 | 높음 | 낮음 |
📄 더 알고 싶으신가요?
1. SINQ로 모든 LLM 양자화
설정 및 빠른 시작
먼저 패키지를 설치합니다. 두 가지 방법으로 설치할 수 있습니다:
- 공식 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 | quantize되지 않은 레이어 목록 | 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에 push한 후, base 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 bit으로 양자화되어 있고
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