# SINQ

[التكميم المعيار بواسطة سينكهورن (SINQ)](https://github.com/huawei-csl/SINQ/tree/main) هي تقنية تكميم سريعة، قابلة للتطبيق الفوري، وغير مرتبطة بنموذج محدد، توفر أداءً متقدماً على مستوى الحالة الفنية لنماذج اللغة الكبيرة دون المساس بالدقة.

### 🔍 ما ستجده هنا

- [1. تكميم (وحفظ) أي نموذج LLM باستخدام SINQ](#1-quantize-any-llm-with-sinq)
- [2. كيفية الاستشهاد بهذا العمل](#2-how-to-cite-this-work)
- [3. القيود الحالية](#3-current-limitations)

#### 📊 مقارنة الميزات: SINQ مقابل HQQ _(بدون معايرة)_ و A-SINQ مقابل AWQ _(مع معايرة)_

| ميزة | **SINQ** | **HQQ** | **A-SINQ** | **AWQ** |
|------------|:--------:|:--------:|:----------:|:-------:|
| 🎯 المعايرة | بدون معايرة | بدون معايرة |  معايرة | معايرة |
| 🧮 نوع التكميم | متماثل وغير متماثل | غير متماثل فقط | متماثل وغير متماثل | متماثل وغير متماثل |
| 📦 دعم NF4 | **نعم** | لا | **نعم** | لا |
| ⚡ سرعة التكميم | أسرع **بمرتين تقريبًا** من HQQ | أبطأ | أسرع **4 أضعاف تقريبًا** من AWQ | أبطأ |
| 📈 جودة النموذج | **أعلى** | أدنى | **أعلى** | أدنى |

📄 **هل تريد معرفة المزيد؟**
- اقرأ ورقتنا البحثية على [**arXiv**](http://arxiv.org/abs/2509.22944)
- تحقق من مستودع [**SINQ**](https://github.com/huawei-csl/SINQ/tree/main) الرسمي على GitHub

--- 

## 1. قم بتكميم أي نموذج LLM باستخدام SINQ

### الإعداد والبدء السريع

أولاً، ثبّت الحزمة. يمكن القيام بذلك بطريقتين:
- من المصدر باستخدام مستودع Github الرسمي [**SINQ**](https://github.com/huawei-csl/SINQ/tree/main) **[موصى به]**
- باستخدام حزمة pip:
```bash
pip install sinq
```

---

### الكمّية في بضعة أسطر

تكميم أي نموذج من نماذج 🤗 Hugging Face باستخدام SINQ أمرٌ بسيط ولا يستغرق سوى بضع سطور من الكود. أولاً، أنشئ [SinqConfig](/docs/transformers/main/ar/main_classes/quantization#transformers.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 كخيار لإعدادات التكميم

```python
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**](https://github.com/huawei-csl/SINQ/tree/main) الرسمي على GitHub للاطلاع على آخر التحديثات!

---

### الحفظ وإعادة التحميل

إذا كنت ترغب في إعادة استخدام نموذج مُكمَّم لاحقًا، فاحفظه على القرص أو ارفعه على HuggingFace Hub ثم أعد تحميله دون الحاجة إلى أوزان FP الأساسية. إذا قمت بتثبيت SINQ من المصدر، فيجب عليك استدعاء دالة *patch_hf_pretrained_io* عند إعادة تحميل نموذج مُكمَّم:
```python
# 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")
```
```python
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)
```
وإلا، إذا قمت بتثبيت SINQ عبر pip، يمكنك ببساطة استخدام الدوال المدمجة في HF:

```python
# --- 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`](https://github.com/EleutherAI/lm-evaluation-harness)

فيما يلي مثال مبسط يوضح كيفية تقييم نموذج مُكمَّم باستخدام SINQ على مجموعة بيانات مرجعية:

```python
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**](https://github.com/huawei-csl/SINQ/tree/main) على GitHub
- يرجى الاستشهاد ببحثنا:

```bibtex
@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 الرسمي](https://github.com/huawei-csl/SINQ/tree/main) لتكميم نموذج باستخدام هذه الاستراتيجية. في الوقت الحالي، لا تدعم استراتيجية تكميم SINQ والنماذج المكمّمة باستخدام SINQ خيار Multi-GPU، لذا إذا كان نظامك يحتوي على وحدات معالجة رسومية متعددة، يرجى تحديد الوحدة التي يجب استخدامها.

