النظام البيئي يملك llama.cpp. Ember موجود عشان النموذج اللي يشتغل مو هو النموذج اللي تقدر تفحصه وتعديله واستنساخه. تتابع السلسلة هذي هذا التمييز إصدارًا بإصدار، ومن ضمنها الإخفاقات.
إذا كان هدفك هو عدد tokens في الثانية، فالإجابة الصادقة عن "ليش نبني محرك استدلال آخر" هي أنك المفروض لا. llama.cpp موجود، وهو سريع، وهو المرجع لسبب وجيه. السلسلة هذي عن هدف مختلف.
بدأ Ember كوسيلة لغاية بحثية. كان السؤال عن الصرف العربي: كيف وأين تمثّل نماذج اللغة العصبية الصرف غير الالتصاقي، الجذور والأوزان، وليش يفشل توافر التمثيل أحيانًا في إنتاج سلوك توليدي؟ الإجابة تتطلب hidden states في طبقات ومواضع مختارة، وقدرة على تغيير تلك الحالات وملاحظة النتيجة، وإجراءً قابلاً للتكرار بحيث يقدر باحث ثانٍ تشغيله والثقة بالنتيجة.
الأدوات اللي تحرّك tokens عبر النموذج ممتازة في تحريك tokens. وهي غير مبنية للإجابة عن: "ما هذا الـ tensor، في هذي الطبقة، في هذا الموضع، في هذي اللحظة، وكيف أُغيّره، وأثبت أن التغيير كان مؤثرًا؟"
llama.cpp هو المرجع الخارجي لـ Ember، للصحة وللأداء. سلم الـ golden logits يتحقق من مخرجات
Ember مقابل مراجعة محدّدة من llama.cpp (scripts/validate_golden_ladder.sh؛ أداة
المرجع tools/logits_dump.c)، وتسجّل artifacts القياس أرقام llama.cpp على الملفات
نفسها (artifacts/benchmark-v03/llama-3.2-1b-q4_k_m.llama-bench.json).
بس المرجع الخارجي له وظيفة مختلفة. llama.cpp مُهندَس للاتساع والإنتاجية؛ Ember مُهندَس للخاصية المعاكسة: مسار تنفيذ مقروء عمدًا، يكون فيه كل عامل وكل tensor وكل موقع hook صريحًا، إضافة إلى أدوات للالتقاط والتعديل والمقارنة والاستعادة مع تتبّع المصدر. هذا مو نقدًا لـ llama.cpp؛ إنه تقسيم عمل: llama.cpp هو المرجع، وEmber يتحقق من مساره الخاص مقابله.
لا يدّعي Ember اتساعًا أو إنتاجية مماثلة، وما راح تجادل السلسلة هذي بغير داك. سبب القراءة مو السرعة؛ بل أن المحركين يجيبان عن سؤالين مختلفين.
ثلاثة قيود، ثابتة منذ البداية:
القيود هذي تكلف أداءً، وستعرض السلسلة كم بالضبط، وفي أي مواضع، وإيش اللي فُعل لتقليل الكلفة من غير التخلي عنها.
| الإصدار | القدرة الأساسية | السؤال اللي أجاب عنه |
|---|---|---|
| v0.1 | استدلال قابل للفحص على GGUF: prefill، decode، KV cache، تتبّع، استخراج hidden states، قياس حتمي | هل ممكن جعل الاستدلال مقروءًا بما يكفي للبحث في دواخل النماذج؟ |
| v0.2 | التقاط تنشيطات، hooks تدخّل، patch بين الجلسات، استعادة مطابقة للبت، artifacts منظمة مع مصدر | هل يدعم Ember تجارب سببية بدل الملاحظة الوصفية بس؟ |
| v0.3 | تنفيذ Q4_K/Q6_K أصلي: أوزان مضغوطة عبر mmap، kernels عددية وAVX2، توزيع لكل tensor، توازٍ خارجي | ما فائدة نموذج Q4 إذا كان المحرك يفكّه إلى f32؟ |
| v0.4 | فك ترميز مُخطط: خطط تنفيذ غير قابلة للتغيير، scratch arenas، مجموعة fusion مجمّدة مع defusion بالـ hooks، matvec متوازي الأعمدة، تنميط | هل ممكن تخطيط التنفيذ وتحسينه من غير إخفاء الـ tensors اللي يحتاج الباحثون فحصها؟ |
| v0.5.1 | حزم تجارب قابلة للاستنساخ: مواصفات صارمة، اختيار tokens بدقة البايت، hooks دلالية، تدخلات، تحقق من غير اتصال، مقارنة، استنساخ | هل ممكن لباحث لم يكتب Ember تشغيل تجربة على دواخل النموذج والتحقق منها من غير لمس Rust؟ |
رقم واحد لكل إصدار، ليكون شكل السلسلة مرئيًا من البداية. v0.3 خفّض الذاكرة المقيمة لنموذج كمّي
من غيغابايتات f32 الموسّعة إلى حجم الملف تقريبًا: 6,989,724 KB → 844,216 KB ذروة RSS على
Llama-3.2-1B Q4_K_M (artifacts/benchmark-v03/part3-binary-memory.md). v0.4 ضاعف
إنتاجية فك الترميز على المسار المرجعي في المجموعات الأربع الأساسية، نحو 2.0–2.7×، مع بقاء
ذروة RSS ثابتة تقريبًا (artifacts/benchmark-v04/2026-08-04/SUMMARY.md). v0.5 جعل
خط التجارب كله حتميًا وقابلاً للتحقق من غير اتصال. التحفظات الملحقة بكل رقم جزء من القصة، لا
حواشٍ.
"مدعوم" في جداول نماذج Ember يعني وجود مسار تنفيذ. مو معناه أن الصف مُتحقق منه رقميًا. التمييز هو السلم: smoke (الأمر عمل)، golden logits (المخرجات قورنت بمرجع موثوق)، فحوص المرجعية للتنشيطات (قورنت الحالات الداخلية)، الـ probes (قابلية الفك)، التدخلات (الاستخدام السببي). كل درجة ادعاء مختلف، وما راح تنزلق السلسلة بينها.
الحالة الراهنة في جملة: صفوف عائلتي llama وqwen2.5 لديها توافق golden logits مع مرجع llama.cpp المثبّت (توافق 100% في top-1 عبر درجات السلم الست، توافق على الـ argmax لا مساواة logits، مع اختلافات مغلف تصل إلى 1.74 كحد أقصى على درجة qwen q4)؛ صفوف qwen3 واعدة بس التحقق golden معلّق؛ gemma 4 يُحمَّل بسه غير موثوق رقميًا (cosine أحادية token نحو 0.87 مقابل المرجع وتتآكل عبر الطبقات)؛ فحوص المرجعية للتنشيطات معلّقة لعدة صفوف. المخرجات الدلالية الحتمية مو قابلية استنساخ زمنية: tokens متطابقة وhidden states متطابقة مو معناها أزمنة حائط متطابقة.
أسرع طريقة لرؤية القيود في الشغل هي قصة الذاكرة. ملف Q4 يصل إلى الذاكرة كـ f32، بمعنى دقيق، تم فك ضغطه بواسطة المحرك اللي كان مفترضًا أن يشغّله. المقال التالي هو v0.3: كمّي على القرص، كمّي في الذاكرة، وسلم التحقق اللي أبقى المسار المضغوط صادقًا.