ember ← engineering github
ملاحظة الإصدار 001 · 31 يوليو 2026

ember v0.1

ember محرك inference صغير للـ CPU، يخدم التجارب التي تتطلب معرفة ما نُفّذ بدقة، وموضع تنفيذه وترتيبه، وما تغيّر فيه أثناء التشغيل.

لماذا يوجد ember

ينصبّ اهتمام ember على فحص التنفيذ والتدقيق فيه، ولا يسعى ember إلى أن يحل محل llama.cpp؛ إذ يبقى llama.cpp مرجع الأداء الخارجي.

على CPU، يحمّل المحرك نماذج GGUF وينفّذ prefill وdecode باستخدام KV cache. وتظل أوزان Q8 مضغوطة في الذاكرة أثناء تنفيذ المسارات التي يدعمها هذا الإصدار. كذلك يتيح structured tracing واستخراج hidden states.

إلى جانب الـ kernels المحسّنة، يوفّر ember مسار reference يسهل تدقيقه. وبذلك يمكن عزل أي تغيير بحثي والتحقق من صحة الـ dispatch من دون أن يتوارى داخل runtime أكبر.

واجهة التجارب في v0.1

لا يشغّل الإصدار في كل generation run سوى تجربة Rust واحدة، على أن تكون statically compiled. ويضم تجربتين مدمجتين: إحداهما لمسار observation والأخرى لمسار intervention. وتبيّن التجربتان أن واجهة الـ hooks تكفي لإجراء تجارب فعلية من دون تحويل ember إلى منصة plugins عامة.

مدمج 01 · observation فقط

activation-stats

عند كل semantic hook معتمد، يقرأ activations الحالية من نوع f32، ثم يسجل L2 norm وأعلى قيمة مطلقة وfingerprint خفيفة. ويخرج النتائج في JSON مرتب يمكن مقارنته ورسمه وفحصه بـ jq. لا يحتاج إلى mutable access، ولا يمسّ الناتج العددي، على خلاف التوقيت.

ember --arch qwen3 \ --model Qwen3-0.6B-Q8_0.gguf \ --tokenizer tokenizer-qwen3.json \ --prompt "The capital of France is" \ --max-tokens 4 --temperature 0 \ --activation-stats stats.json
مدمج 02 · يغيّر التنفيذ

zero-layer-output

يختار طبقة، ثم يصفّر أثناء prefill إما مساهمة attention وإما MLP وإما الـ hidden state المكتملة للطبقة. ويتكرر التصفير كلما بلغ تقييم decode الطبقة المحددة. ويحصي ember التدخلات، وينبّه بوضوح على stderr إلى تعديل التشغيل.

ember --arch gemma4 \ --model gemma-4-E2B-it.Q8_0.gguf \ --tokenizer tokenizer-gemma4.json \ --prompt "The capital of France is" \ --max-tokens 4 --temperature 0 \ --zero-layer-output 4:attention

شكل الـ artifact

يبيّن كل سجل observation الـ phase والمرحلة الدلالية والطبقة ونطاق التوكنات، ويورد أيضاً shape وdtype والـ norm والقيمة القصوى والـ fingerprint. وتستعير الـ hooks هذه البيانات مباشرة، فلا تنسخ عند كل hook أي token buffers أو metadata خاصة بالنموذج.

يبيّن الـ run manifest ما إذا كانت التجربة قد غيّرت التنفيذ. ولا يتغير تنسيق النص المولّد ولا وجهته؛ إذ يخرج على stdout، وتخرج تنبيهات التجربة على stderr.

activation-stats.json · مثال مختصر
{
  "experiment": "activation-stats",
  "observation_only": true,
  "records": [{
    "phase": "prefill",
    "stage": "after_attention",
    "layer_index": 4,
    "sequence_length": 5,
    "shape": [5, 1024],
    "dtype": "f32",
    "l2_norm": 6.117406,
    "abs_max": 0.782913,
    "fingerprint": "<uint64>"
  }]
}

يراعي هذا المثال قواعد الـ JSON، ويظهر فيه placeholder بدلاً من قيمة fingerprint. ويكتب ملف artifact الفعلي قيمة u64 كاملة.

سجل التحقق

لا يدّعي هذا السجل parity شاملاً مع كل engine أو model؛ بل يوثّق فحوص regression لمسارات الإصدار مقابل frozen artifacts. وشملت الفحوص logits لنماذج Qwen وGemma، وgeneration عبر ثلاث عائلات، إلى جانب inspection وallocation والكود الناتج وA/B.

الفحص النطاق النتيجة
parity على نماذج فعلية logits لـ Qwen وGemma؛ وgeneration لثلاث عائلات تطابقت النتائج مع frozen artifacts المثبتة للإصدار
parity لمسار الفحص Gemma layer dumps وnormalized trace fingerprints byte-identical
سلوك الـ allocations تنفيذ طبقة بعد warm-up، من دون تجربة لم يظهر نمو per-layer بعد warm-up
الكود المحسّن disabled path في block نموذجي من LLaMA لم يبق experiment-related dispatch في الكود الناتج
مقارنة A/B مضبوطة تشغيل prefill وsingle-token decode بإعدادات مثبتة بقي الفارق ضمن ضجيج القياس

قياسات الإصدار

توثّق الأرقام التالية حالة الإصدار استناداً إلى تحقق محلي على Intel i5-1135G7 من غير أن تفاضل بين المحركات.

حمل الاختبار decode prefill القراءة
Qwen3 0.6B Q8_0 40.88 tok/s 52 tokens · 489 ms · ≈106.3 tok/s جهاز التحقق المحلي i5-1135G7
LLaMA 3.2 1B Q8_0 33.10 tok/s 53 tokens · 943 ms · ≈56.2 tok/s جهاز التحقق المحلي i5-1135G7
Gemma 4 E2B Q8_0 10.05 tok/s 52 tokens · 2,006 ms · ≈25.9 tok/s جهاز التحقق المحلي i5-1135G7

هذه قياسات تحقق محلية، ولا تمثل cross-engine leaderboard. فالنتائج تختلف باختلاف الجهاز والإعداد، ويظل llama.cpp مرجع الأداء الخارجي.

حدود الدعم

النطاق المشمول الحد
normal inference GPT-2 وLLaMA وQwen3 وGemma 4 dense للنص فقط لا يزال دعم Qwen2.5 في المرحلة experimental؛ إذ لم تكتمل validation الخاصة بالمعمارية والـ tokenizer، ولذلك لا يشمله validated parity record
experiment hooks LLaMA وQwen3 وGemma 4 لا يدعمها GPT-2 في v0.1
tensors من GGUF F32, F16, BF16, Q8_0 لا يشمل الدعم K-quants
قابلية الفحص structured tracing وvalue fingerprints واستخراج hidden states يرفض المحرك تشغيل التجارب النشطة مع hidden-state extraction أو الـ probes أو layer/logits dumps، كما يرفضها مع أوامر demo وinteractive وbenchmark الفرعية؛ فالواجهة لا تعرّف معنى الحالة قبل intervention وبعده
تنفيذ Q8 أوزان mmap ومسارات scalar وAVX2 وAVX-512 ومسارات tiled وpacked للتحقق من صحة التنفيذ، يظل generic kernel وreference path متاحين

ما لا يستهدفه v0.1

بيانات الإصدار

tag
v0.1.0
commit
663a979
الرخصة
MIT
toolchain
Rust 1.92
الدليل
التجارب
المرجع
عقد الـ hooks
التغييرات
changelog
المصدر
repository
experiment API: unstable in v0.1 · Linux CPU validation