في هذه المدونة، نقدم النقاط البارزة والمبررات المنطقية حول سلسلة Falcon-Edge – وهي مجموعة من نماذج اللغات القوية والعالمية والقابلة للضبط والمتوفرة بتنسيق ثلاثي، استنادًا إلى بنية BitNet.
وبالاعتماد على تجربتنا مع BitNet، تقدم Falcon-Edge نموذجًا جديدًا لما قبل التدريب ويتحقق من صحته، والذي يوفر مخرجات كاملة النطاق من عملية تدريب واحدة، مما يؤدي في الوقت نفسه إلى إنتاج متغيرات نموذجية غير كمية ومكممة. ينتج هذا النهج الشامل نموذجًا غير تابع لـBitNet بتنسيق bfloat16، ونموذج BitNet الأصلي، ومتغير BitNet المكمّم مسبقًا والمصمم خصيصًا للضبط الدقيق دون عناء، مما يمكّن المستخدمين والمطورين من تصميم هذه النماذج بدقة لتناسب تطبيقاتهم واحتياجاتهم المحددة.
متوفر الآن بحجمين — 1 مليار و3 مليار معلمة — ويأتي كل حجم في كل من النماذج الأساسية والمضبوطة حسب التعليمات. اكتشف سلسلة Falcon-Edge على مجموعتنا المخصصة Hugging Face.
مقدمة
نماذج اللغات الكبيرة (LLMs)، حسب تصميمها، كبيرة بطبيعتها وتستهلك موارد كثيرة. ومع تزايد الطلب على نشر هذه النماذج بكفاءة على الأجهزة الطرفية، تسارعت وتيرة البحث في مجال ضغط النماذج. تستكشف الجهود الأخيرة، مثل تلك التي بذلتها DeepSeek وLlama 4، التدريب باستخدام تنسيقات منخفضة الدقة – وصولاً إلى FP8 – لتحسين قابلية التوسع في النشر. ومن ناحية أخرى، تؤكد العديد من الأساليب الحديثة على التكميم بعد التدريب. على النقيض من هذه الأساليب، تقدم BitNet نموذجًا مختلفًا جذريًا: على عكس التدريب منخفض الدقة الذي لا يزال يعتمد على تنسيقات الفاصلة العائمة، والتكميم بعد التدريب الذي يضبط الأوزان بعد تدريب كامل الدقة، تعمل BitNet بأقل دقة ممكنة – الأوزان الثلاثية ({-1، 0، 1}) – مباشرة أثناء التدريب، مما يتيح تصميم نموذج فائق الكفاءة من البداية إلى النهاية.
تمهد هذه الأوزان الثلاثية الطريق لتصميم LLM “خالي من matmul” والذي يكون أسرع بشكل ملحوظ وكفاءة في الذاكرة بشكل ملحوظ في الممارسة العملية. التحدي الرئيسي لهذا النهج المبتكر هو ضرورة التدريب المسبق لنماذج BitNet، والتي يمكن أن تكون متطلبة حسابيًا ومكلفة للمستخدمين العاديين.
Falcon-Edge، سلسلة من النماذج القوية
من خلال الاستفادة من الدروس المستفادة من استراتيجيات البيانات قبل التدريب من مركزنا، نقوم بتدريب نموذجنا مسبقًا على مزيج بيانات داخلي لما يقرب من 1.5 Tera Tokens. نحن نستخدم برنامج جدولة معدل التعلم الكلاسيكي WSD للتدريب المسبق.
نقوم بتقييم نماذجنا (الإصدارات الأساسية والإرشادية) وفقًا لمعيار Hugging Face Leaderboard v2 السابق ونبلغ عن النتائج المقيسة أدناه مقارنة بالنماذج الأخرى ذات الحجم المماثل:


نتائج إضافية (لوحة المتصدرين الإصدار 1) حول مقارنة نماذجنا الموجهة مع نموذج BitNet الجديد من Microsoft:

تعرض Falcon-Edge أداءً أفضل وأفضل من النماذج ذات الأحجام المشابهة في مهام الإصدار الثاني من لوحة المتصدرين، مما يوضح أنه من الممكن تدريب نماذج BitNet القوية على المجالات المطلوبة مع القدرة على المنافسة بدرجة كافية في المهام الأخرى.
Falcon-Edge، سلسلة من النماذج العالمية
إذا نظرنا عن كثب إلى صيغة طبقة BitNet الخطية للاستدلال (من حيث كود Python):
def activation_norm_quant(x):
scale = 127.0 / x.abs().max(dim=-1, keepdim=True).values.clamp_(min=1e-5)
y = (x * scale).round().clamp_(-128, 127)
return y, scale
class BitLinear(nn.Linear):
def post_quant_process(self, input, input_scale, weight_scale):
out = input / (input_scale * weight_scale)
return out
def forward(self, input):
w = self.weight
w_quant = unpack_weights(w, dtype=self.dtype)
input_quant, input_scale = self.activation_quant(input)
y = F.linear(input_quant.to(self.dtype), w_quant)
y = self.post_quant_process(y, self.weight_scale, input_scale)
if self.bias is not None:
y += self.bias.view(1, -1).expand_as(y)
return y
يقوم التنشيط Normalization_norm_quant بقياس عمليات التنشيط بتنسيق int8، ثم يتم حساب التنشيط مرة أخرى بنصف الدقة عن طريق غوصه بمقدار x_scale. نظرًا لأنه تم تدريب النموذج باستخدام تكميم التنشيط المزيف 8 بت، فإننا نرى أنه من الممكن تقريب ما يلي:
x_quant, x_scale = activation_norm_quant(x)
x ~= (x_quant / x_scale)
لذلك، بدلاً من تحديد حجم النموذج بعد التدريب، فإن إدخال مقياس الوزن بعد تحديد حجم الأوزان يجب أن يؤدي إلى “تقريب” جيد بما فيه الكفاية للإصدار غير الخاص بـ BitNet من النموذج:
def _weight_quant(w):
scale = 1.0 / w.abs().mean().clamp_(min=1e-05)
u = (w * scale).round().clamp_(-1, 1)
return u, scale
for param_name, param_value in state_dict.items():
if _is_param_to_not_quantize(param_name):
continue
param_value, param_scale = _weight_quant(param_value)
param_value = param_value / param_scale
state_dict_quant[param_name] = param_value
نؤكد ذلك من خلال إجراء تقييمات شاملة على متغير bfloat16 لنماذجنا الأساسية 1B و3B وفيما يلي النتائج:

ال bfloat16 يمكن تحميل نظيراتها من النماذج مباشرة عبر محولات Hugging Face عن طريق المرور revision="bfloat16" في from_pretrained وظيفة:
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from trl import SFTTrainer
model_id = "tiiuae/Falcon-E-1B-Base"
tokenizer = AutoTokenizer.from_pretrained(model_id, revision="prequantized")
model = AutoModelForCausalLM.from_pretrained(
model_id,
torch_dtype=torch.bfloat16,
revision="bfloat16"
)
Falcon-Edge، سلسلة من نماذج Bitnet القابلة للضبط الدقيق
على حد علمنا، باستثناء الإصدار الأحدث من Microsoft، تركز إصدارات BitNet السابقة فقط على إصدار النموذج الكمي النهائي، مما يجعله قابلاً للاستخدام فقط للاستدلال. على غرار الإصدار من Microsoft، نقترح توسيع إمكانية الوصول إلى البحث وتطبيق نماذج BitNet من خلال إطلاق أوزانها الكمية مسبقًا. وبهذه الطريقة، يمكن للمستخدمين إما إجراء الضبط الدقيق على المجال المستهدف، أو إجراء تدريب مسبق مستمر لنقطة تفتيش BitNet طالما nn.Linear يتم استبدال الطبقات ب BitnetLinear الطبقات، والتأكد من تحديد حجم التدريب بعد النموذج بتنسيق BitNet. نظرًا لأن الأوزان تتوافق مع الأوزان المُكممة مسبقًا، فإن إنشاء النص دون استبدال الأوزان nn.Linear طبقات مع BitnetLinear ستنتج الطبقات مخرجات رطانة.
يمكن تنزيل الأوزان المُكمَّمة مسبقًا عبر مكتبة محولات Hugging Face عن طريق تحديد revision حجة أن تكون prequantized:
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "tiiuae/Falcon-E-1B-Base"
tokenizer = AutoTokenizer.from_pretrained(model_id, revision="prequantized")
model = AutoModelForCausalLM.from_pretrained(
model_id,
torch_dtype=torch.bfloat16,
revision="prequantized"
)
بهذه الطريقة، سنساعد في تعزيز النظام البيئي حول أول تحسينات 1 بت قوية بواسطة المجتمع. نحن نوفر للمجتمع الأدوات اللازمة للبدء بسهولة وضبط نسختهم الخاصة من نماذج BitNet القوية من خلال تعبئة جميع الأساليب المساعدة اللازمة لإجراء الضبط الدقيق للأوزان المحددة مسبقًا في حزمة Python تسمى onebitllms التي سنغطيها في القسم التالي.
تقديم onebitllms – حزمة بايثون خفيفة الوزن لمجموعة أدوات تدريب LLMs ذات 1 بت

في هذا الإصدار، نقدم أيضًا onebitllms – حزمة Python خفيفة الوزن يمكن توصيلها بأدوات الضبط الدقيقة LLM المفضلة لديك من أجل ضبط أي نموذج BitNet مُكمَّم مسبقًا. في هذا الوقت من الكتابة onebitllms يعرض هذه الوظائف الرئيسية:
- طريقة مساعدة لتحويل نقاط التحقق النموذجية المُكمَّمة مسبقًا إلى تنسيق تدريب BitNet من أجل تمريرها إلى أي من أطر الضبط الدقيقة LLM المفضلة لديك. لقد قمنا حاليًا باختبار مكتبتنا باستخدام Hugging Face’s
trlمكتبة. - طريقة مساعدة لتحديد كمية نقطة التفتيش المدربة بتنسيق BitNet وكذلك في المعتاد
bfloat16شكل. - لمزيد من التحكم الدقيق: عارية
BitnetLinearوحبات تريتون التي يتم حقنها واستخدامها في إطار التدريب المسبق الخاص بك.
حاليًا، يتم دعم الضبط الكامل فقط من خلال هذا الإطار، بينما في هذا الإصدار تكون أحجام النماذج صغيرة نسبيًا، ويظل دعم أساليب الضبط الدقيق ذو كفاءة المعلمة (PEFT) لنماذج BitNet سؤالًا مفتوحًا مثيرًا ومؤثرًا لنماذج BitNet القادمة.
للبدء، ما عليك سوى تثبيت الحزمة مباشرة من خلال pip أو من المصدر، وإلقاء نظرة على examples/ المجلدات داخل التعليمات البرمجية المصدر.
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from trl import SFTTrainer
from onebitllms import replace_linear_with_bitnet_linear, quantize_to_1bit
model_id = "tiiuae/Falcon-E-1B-Base"
tokenizer = AutoTokenizer.from_pretrained(model_id, revision="prequantized")
model = AutoModelForCausalLM.from_pretrained(
model_id,
torch_dtype=torch.bfloat16,
revision="prequantized"
)
model = replace_linear_with_bitnet_linear(model)
trainer = SFTTrainer(
model,
...
)
trainer.train()
quantize_to_1bit(output_directory)
مع هذه الحزمة، نأمل في تسريع البحث والتطوير حول LLMs ذات التنسيق الثلاثي، ونأمل أن نرى العديد من الاشتقاقات فالكون إيدج ونماذج BitNet المستقبلية القوية الأخرى التي طورها المجتمع.
نذهب أبعد من ذلك
نعتقد أن هذا الإصدار يفتح العديد من الاتجاهات المثيرة للاهتمام – من بين جميع اتجاهات المتابعة المحتملة، نعتقد حاليًا أن الأسئلة المفتوحة التالية ستجعل نماذج BitNet أكثر تأثيرًا في المستقبل القريب:
- كتابة نواة استدلال GPU أكثر قوة لهندسة BitNet: الاستفادة من نفس الأفكار الأساسية وراء
bitnet.cpp، نأمل أن يقنع هذا الإصدار مجتمع البحث بالتركيز على تطوير نواة استدلال BitNet قوية لاستدلال أسرع على وحدات معالجة الرسومات – مما يجعلها أسرع من النماذج الأصلية على وحدات معالجة الرسومات. - دعم أساليب PEFT لضبط BitNet: يظل هذا سؤالًا بحثيًا غير مستكشف ويمكن أن يفتح إمكانيات جديدة متعددة لنماذج BitNet.
- إجراء تحقيق أكثر صرامة حول عالمية نقاط تفتيش Bitnet: بينما نلاحظ أن مجرد إدخال مقياس الوزن يؤدي إلى وجود نقطة تفتيش غير تابعة لـ Bitnet، فإننا نعتقد أنه يمكن إجراء المزيد من الأبحاث لتقليل تدهور الأداء بين نقطة تفتيش Bitnet ونقطة تفتيشها.
bfloat16نظيره، مما يجعله خاليًا من التدهور في الأداء تمامًا. - على نماذج Bitnet متعددة الوسائط: نأمل أن تكون هذه النماذج التأسيسية لـ Bitnet معًا
onebitllmsيمكن أن تكون الحزمة بمثابة عمل تأسيسي لإنشاء أول Bitnet VLM متعدد الوسائط (نموذج لغة الرؤية) وما إلى ذلك. - المزيد من حبات تدريب Bitnet المحسنة: لكتابة حباتنا، قررنا اتباع نهج مرحلتين لحساب الحد الأقصى العالمي أولاً لاستخدامه لاحقًا على مستوى الكتلة للتطبيع. يمكن مراجعة هذا النهج لكتابة حبات أكثر كفاءة. في اختباراتنا، نقدر أن الحمل يصل إلى حوالي 20% تقريبًا بين التدريب المسبق لغير Bitnet والتدريب المسبق لـ Bitnet. سنصدر قريبًا أرقامًا أكثر شمولاً حول النفقات العامة التي تقدمها Bitnet للتدريب.
الاقتباس
إذا وجدت هذا العمل مفيدًا لبحثك وعملك، فيرجى التفكير في الاستشهاد بعملنا، بالإضافة إلى الاستشهاد بجميع الأعمال الأساسية وراء نماذج BitNet:
@misc{tiionebitllms,
title = {Falcon-E, a series of powerful, universal and fine-tunable 1.58bit language models.},
author = {Falcon-LLM Team},
month = {May},
url = {https://falcon-lm.github.io/blog/falcon-edge},
year = {2025}
}
المزيد من المراجع
@misc{ma2025bitnetb1582b4ttechnical,
title={BitNet b1.58 2B4T Technical Report},
author={Shuming Ma and Hongyu Wang and Shaohan Huang and Xingxing Zhang and Ying Hu and Ting Song and Yan Xia and Furu Wei},
year={2025},
eprint={2504.12285},
archivePrefix={arXiv},
primaryClass={cs.CL},
url={https://arxiv.org/abs/2504.12285},
}
@misc{wang2025bitnetcppefficientedgeinference,
title={Bitnet.cpp: Efficient Edge Inference for Ternary LLMs},
author={Jinheng Wang and Hansong Zhou and Ting Song and Shijie Cao and Yan Xia and Ting Cao and Jianyu Wei and Shuming Ma and Hongyu Wang and Furu Wei},
year={2025},
eprint={2502.11880},
archivePrefix={arXiv},
primaryClass={cs.LG},
url={https://arxiv.org/abs/2502.11880},
}
@misc{,
title={1.58-Bit LLM: A New Era of Extreme Quantization},
author={Mohamed Mekkouri and Marc Sun and Leandro von Werra and Thomas Wolf},
year={2024},
}
@misc{ma2024era1bitllmslarge,
title={The Era of 1-bit LLMs: All Large Language Models are in 1.58 Bits},
author={Shuming Ma and Hongyu Wang and Lingxiao Ma and Lei Wang and Wenhui Wang and Shaohan Huang and Li Dong and Ruiping Wang and Jilong Xue and Furu Wei},
year={2024},
eprint={2402.17764},
archivePrefix={arXiv},
primaryClass={cs.CL},
url={https://arxiv.org/abs/2402.17764},
}
@misc{wang2023bitnetscaling1bittransformers,
title={BitNet: Scaling 1-bit Transformers for Large Language Models},
author={Hongyu Wang and Shuming Ma and Li Dong and Shaohan Huang and Huaijie Wang and Lingxiao Ma and Fan Yang and Ruiping Wang and Yi Wu and Furu Wei},
year={2023},
eprint={2310.11453},
archivePrefix={arXiv},
primaryClass={cs.CL},
url={https://arxiv.org/abs/2310.11453},
}