# BitNet

يستبدل [BitNet](https://huggingface.co/papers/2402.17764) طبقات الخطية التقليدية في طبقات Multi-Head Attention والشبكات الأمامية بطبقات BitLinear متخصصة. تقوم طبقات BitLinear بتكميم الأوزان بدقة ثلاثية (بقيم -1 و0 و1) وتكميم التنشيطات بدقة 8 بت.

  
  بنية BitNet مع طبقات BitLinear.

لا يمكن تكميم نماذج BitNet أثناء التشغيل. فهي تتطلب التكميم أثناء التدريب المسبق أو الضبط الدقيق، لأنها تقنية تدريب واعية بالتكميم (QAT). خلال التدريب، يتم تكميم الأوزان إلى قيم ثلاثية باستخدام تكميم متماثل لكل مشغل.

1. احسب متوسط القيم المطلقة لمصفوفة الأوزان واستخدمه كمقياس.
2. اقسم الأوزان على معامل القياس، ثم قرّب القيم، وحدّها بين -1 و 1، وأعد قياسها لتستمر بالدقة الكاملة.
3. تُكمَّم التفعيلات إلى عرض بت محدد (8 بت) باستخدام كمّية [absmax](https://huggingface.co/papers/2208.07339) (كمّية متناظرة لكل قناة). ويتضمن ذلك تحجيم التفعيلات إلى نطاق [−128,127].

راجع هذا [PR](https://github.com/huggingface/nanotron/pull/180) لتدريب مسبق أو ضبط دقيق لنموذج بدقة 1.58 بت باستخدام [Nanotron](https://github.com/huggingface/nanotron). ولضبط الدقة، قم بتحويل النموذج من صيغة Hugging Face إلى صيغة Nanotron. تجد خطوات التحويل في هذا [PR](https://github.com/huggingface/nanotron/pull/174).

حمّل نموذج BitNet المُكمَّم باستخدام [from_pretrained()](/docs/transformers/main/ar/main_classes/model#transformers.PreTrainedModel.from_pretrained).

```py
from transformers import AutoModelForCausalLM
path = "/path/to/model"
model = AutoModelForCausalLM.from_pretrained(path, device_map="auto")
```

## النوى

يُستخدم `@torch.compile` لفكّ حزم الأوزان وتنفيذ المرور الأمامي. وهو سهل التنفيذ للغاية ويحقق تحسينات كبيرة في السرعة. وسيتم دمج نوى مُحسَّنة إضافية في الإصدارات المستقبلية.

## الموارد

اقرأ [ضبط نماذج اللغة الكبيرة بدقة 1.58 بت: تكميم متطرف بسهولة](https://huggingface.co/blog/1_58_llm_extreme_quantization) لمعرفة المزيد حول كيفية تدريب نماذج BitNet وضبطها.

