Transformers documentation

SINQ

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.2).
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) là một kỹ thuật lượng tử hóa nhanh, có thể tích hợp ngay lập tức và không phụ thuộc vào mô hình, mang lại hiệu suất tiên tiến cho các Mô hình Ngôn ngữ Lớn mà không làm giảm độ chính xác.

🔍 Những gì bạn sẽ tìm thấy ở đây

📊 So sánh tính năng: SINQ so với HQQ (không hiệu chuẩn) và A-SINQ so với AWQ (đã hiệu chuẩn)

Tính năngSINQHQQA-SINQAWQ
🎯 Hiệu chuẩnKhông cần hiệu chuẩnKhông cần hiệu chuẩnĐã hiệu chuẩnĐã hiệu chuẩn
🧮 Loại lượng tử hóaĐối xứng & Không đối xứngChỉ không đối xứngĐối xứng & Không đối xứngĐối xứng & Không đối xứng
📦 Hỗ trợ NF4CóKhôngCóKhông
⚡ Tốc độ lượng tử hóa~2× Nhanh hơn so với HQQChậm hơn~4× Nhanh hơn so với AWQChậm hơn
📈 Chất lượng Mô hìnhCao hơnThấp hơnCao hơnThấp hơn

📄 Bạn muốn biết thêm?

  • Đọc bài báo của chúng tôi trên arXiv
  • Kiểm tra kho github chính thức của SINQ

1. Lượng tử hóa bất kỳ LLM nào bằng SINQ

Cài đặt & Bắt đầu nhanh

Đầu tiên, hãy cài đặt gói. Bạn có thể thực hiện theo hai cách:

  • Từ mã nguồn bằng cách sử dụng kho lưu trữ Github chính thức SINQ [Đề xuất]
  • Sử dụng gói pip:
pip install sinq

Lượng tử hóa chỉ với vài dòng

Việc lượng tử hóa bất kỳ mô hình 🤗 Hugging Face nào bằng SINQ rất đơn giản và chỉ cần vài dòng mã. Đầu tiên, tạo một SinqConfig và chỉ định các tham số sau:

CờMô tảLoạiTùy chọnMặc định
--nbitsĐộ rộng bit cho lượng tử hóa trọng sốint2, 3, 4, 5, 6, 84
--tiling_modeChiến lược chia nhỏ ma trận trọng sốstr1D, 2D1D
--group_sizeSố lượng trọng số trên mỗi nhóm lượng tử hóaint64, 12864
--methodPhương pháp lượng tử hóastrsinq, asinqsinq
--modules_to_not_convertDanh sách các lớp KHÔNG được lượng tử hóaDanh sách str[lm_head, …][lm_head]

Sau đó, chỉ định mô hình bạn muốn lượng tử hóa và truyền SinqConfig dưới dạng tùy chọn cấu hình lượng tử hóa

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
)

✅ Xong. Mô hình của bạn giờ đã được lượng tử hóa bằng SINQ và sẵn sàng để suy luận hoặc lưu trữ.

Hãy xem kho lưu trữ github chính thức SINQ của chúng tôi để cập nhật thông tin mới nhất!


Lưu & tải lại

Nếu bạn muốn tái sử dụng một mô hình đã lượng tử hóa sau này, hãy lưu nó xuống đĩa hoặc đẩy lên HuggingFace Hub và tải lại mà không cần trọng số FP gốc. Nếu bạn đã cài đặt SINQ từ mã nguồn, bạn nên gọi hàm patch_hf_pretrained_io khi tải lại một mô hình đã lượng tử hóa:

# 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)

Ngược lại, nếu bạn đã cài đặt SINQ thông qua pip, bạn có thể đơn giản sử dụng các hàm tích hợp sẵn của 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)

✅ Mô hình của bạn hiện đã được tải và sẵn sàng để suy luận!

Lưu ý: Nếu mô hình đã được lượng tử hóa ở 4 bit và thư viện gemlite được cài đặt, kernel nhanh hơn của gemlite sẽ được sử dụng để chạy suy luận.


Tương thích với khung đánh giá lm-eval

Dưới đây là một ví dụ tối giản cho thấy cách đánh giá một mô hình đã lượng tử hóa SINQ trên một bộ dữ liệu chuẩn:

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. Cách trích dẫn công việc này

Nếu bạn thấy SINQ hữu ích trong nghiên cứu hoặc ứng dụng của mình

  • Hỗ trợ dự án của chúng tôi bằng cách đặt một ngôi sao ⭐️ trong kho github SINQ
  • Vui lòng trích dẫn bài báo của chúng tôi:
@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. Những hạn chế hiện tại

Hiện tại, phương pháp A-SINQ chưa được hỗ trợ trong Hugging Face. Vui lòng tham khảo kho SINQ chính thức để lượng tử hóa mô hình bằng chiến lược này. Hiện tại, chiến lược lượng tử hóa SINQ và các mô hình đã được lượng tử hóa bằng SINQ không hỗ trợ tùy chọn Multi-GPU, do đó nếu hệ thống của bạn có nhiều GPU, vui lòng chỉ định GPU nào sẽ được sử dụng.

Update on GitHub