SINQ

SINQ

SINQ(Sinkhorn-Normalized Quantization)는 정확도를 희생하지 않으면서 대형 언어 모델에 최신 수준의 성능을 제공하는 빠르고 플러그 앤 플레이 방식의 모델 비종속 양자화 기법입니다.

출처: 문서

본문

Sinkhorn-Normalized Quantization (SINQ)는 정확도를 희생하지 않으면서 대형 언어 모델에 최신 수준의 성능을 제공하는 빠르고 플러그 앤 플레이 방식의 모델 비종속 양자화 기법입니다.

🔍 여기서 찾을 수 있는 것

📊 기능 비교: SINQ vs HQQ (캘리브레이션 없음) 및 A-SINQ vs AWQ (캘리브레이션됨)

Feature SINQ HQQ A-SINQ AWQ
🎯 Calibration Calibration-free Calibration-free Calibrated Calibrated
🧮 Quantization Type Symmetric & Asymmetric Asymmetric only Symmetric & Asymmetric Symmetric & Asymmetric
📦 NF4 Support Yes No Yes No
⚡ Quantization Speed ~2× Faster than HQQ Slower ~4× Faster than AWQ Slower
📈 Model Quality Higher Lower Higher Lower

📄 더 알고 싶으신가요?

  • arXiv에서 논문 읽기
  • 공식 SINQ GitHub 저장소 확인

1. SINQ로 모든 LLM 양자화

설정 및 빠른 시작

먼저 패키지를 설치하세요. 두 가지 방법이 있습니다.

  • 공식 GitHub 저장소 SINQ에서 소스로 설치 [권장]
  • pip 패키지 사용:
pip install sinq

몇 줄로 양자화

SINQ로 🤗 Hugging Face 모델을 양자화하는 것은 간단하며 몇 줄의 코드만 필요합니다. 먼저 SinqConfig를 만들고 다음 파라미터를 지정하세요.

Flag Description Type Options Default
--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 양자화하지 않을 레이어 목록 List of 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. 현재 제한 사항

현재 A-SINQ 방법은 Hugging Face에서 지원되지 않습니다. 이 전략으로 모델을 양자화하려면 공식 SINQ 저장소를 참고하세요. 현재 SINQ 양자화 전략과 SINQ 양자화 모델은 Multi-GPU 옵션을 지원하지 않으므로, 시스템에 GPU가 여러 개 있다면 사용할 GPU를 지정해 주세요.

더 알아보기 (Learn more)