
شنو كيدير APEX
APEX هو بلاطة مفتوحة بالكامل للاستدلال ديال نماذج اللغة الكبيرة (LLM)، وكتعطي الأولوية للتحقق. كتنفّذ طبقة وحدة من مفكّك التحويلات (transformer decoder layer) باستعمال RTL حقيقي، بما فيه الانتباه، وضغط ذاكرة KV، وsoftmax على الإنترنت، وRMSNorm، وتضمينات الموضع الدوّارة، وSwiGLU، والوصلات المتبقية، والعمليات المصفوفية.
المشروع كيهذف لواحد عنق زجاجة مهم فاستدلال الحافة: منين كتكبر المحادثة، كل رمز جديد خاصو يقرا ذاكرة key-value cache اللي كتكبر باستمرار. APEX كيدمج ترميز KV مباشرة فمسار البيانات ديال العتاد. المفاتيح والقيم كيتضغطو ملي كيتنتجو، كيتخزنو مضغوطين، وكيتفك الضغط عليهم فاش الانتباه كيستهلكهم.
APEX غير بلاطة وحدة للاستدلال، وماشي شريحة تسريع كاملة. متحكمات DRAM وPCIe وشبكة على الشريحة ما داخلينش فالنطاق المعلن ديال المستودع.
تم عرض البلاطة باستعمال Qwen2.5-0.5B على عتاد FPGA. رموز Qwen2.5-7B دازو من المسار الذهبي المتحقق منو برمجياً، ولكن README ما كتقولش بلي نموذج 7B خدم على السيليكون.
الميزات الرئيسية
- مسار بيانات كامل لطبقة المفكّك: RTL كيغطي الإسقاطات، والانتباه، والتطبيع، وRoPE، والحسابات الأمامية، والعمليات المتبقية، والتعامل مع ذاكرة KV.
- ضغط KV داخل مسار البيانات: المفاتيح كتستعمل تكميم INT4 لكل قناة، والقيم كتستعمل تكميم INT4 لكل رمز، والقنوات الصعيبة تقدر تستعمل مسار fp16 للقيم الشاذة.
- دقة متكيفة: وحدة TIP كتتبع أهمية الرموز وكتختار KVQ8 أو KVQ4 أو KVQ4 مع القيم الشاذة حسب المنطقة.
- محرك مصفوفات مشترك: MXE التماثلي INT8 كيتقاسم زمنياً بين خدامات المصفوفات داخل طبقة المفكّك.
- Softmax على الإنترنت: النتائج كتمر من تنفيذ مستقر عددياً لـ softmax بلا حاجة لذاكرة مؤقتة للنتائج بحجم طول السياق.
- تحقق مطابق للبتات: نتائج RTL كتتقارن مع نماذج NumPy مرجعية قابلة للتنفيذ، وما كيتسمح حتى باختلاف واحد.
- أطقم اختبار خضعات لاختبار الطفرات: التحقق كيتعتبر مفيد غير ملي العيوب المتعمدة فـ RTL كتخلي الاختبارات تفشل.
- إعادة التشغيل من المحاكاة حتى السيليكون: برامج عمليات السجلات ديال FPGA كتخدم حتى فنسخة Verilator مطابقة للمقارنة التفاضلية بتة ببتة.
- وسوم واضحة للأدلة: النتائج كتتصنف كمقاسة أو متوقعة، وما كتخلطش فادعاء واحد على الأداء.
فهم المعمارية
خطوة فك الترميز ككتبدا بمتجه تنشيط. RMSNorm كيوجد الإدخال، وMXE كيحسب إسقاطات الاستعلام والمفتاح والقيمة. RoPE كيحوّل الاستعلامات والمفاتيح قبل ما محرك KVQ يضغط المفاتيح والقيم للتخزين.
أثناء الانتباه، القيم المخزنة كتتفك فمسار القراءة. MXE كيحسب جداءات الاستعلام مع المفتاح، وASU كيطبق softmax على الإنترنت، ومن بعد خدمة أخرى ديال MXE كتلصق الاحتمالات مع القيم المخزنة. إسقاط الخرج، والجمع المتبقي، ومرحلة تطبيع أخرى، ومسار التغذية الأمامية SwiGLU كيكملو الطبقة.
الكتل الرئيسية ديال RTL
- MXE: محرك GEMM التماثلي INT8 المستعمل فعمليات المصفوفات ديال الطبقة.
- KVQ: محرك ضغط وفك ضغط ذاكرة KV.
- ASU: softmax على الإنترنت، وRMSNorm، وSiLU، وSwiGLU.
- RoPE: تضمين الموضع الدوّار للاستعلامات والمفاتيح.
- TIP: تتبع أهمية الرموز واتخاذ قرارات مستويات الدقة.
- SEQ: ملف سجلات التحكم والحالة، وفك ترميز الخدامات، ومتتبع الطبقة.
- SEAM: تأطير التنشيط، والتكميم عند الحدود، ونقل المقاييس.
- XBR: التوجيه بين المحركات بلا جولات رجوع غير ضرورية للمضيف.
- TOP: طبقة تركيب
apex_topومنطق الدمج.
قرا ARCHITECTURE.md باش تلقى التصميم المفصل، وسجل القرارات، ومصدر الوحدات.
نمط المضيف والنمط المتتبَّع
APEX كيدعم جوج طرق للتنفيذ. فالنمط ديال المضيف، المضيف كينشئ وكيبعث كل خدمة عتادية بوحدها. هاد النمط مثبت على سيليكون FPGA، ولكن كل خدمة كتحتاج جولة رجوع للمضيف.
فالنمط المتتبَّع، المضيف كيبدا الطبقة مرة وحدة. متتبّع الطبقة داخل البلاطة كيجلب الواصفات، وكينظم المحركات، وكيوجّه الموترات الوسيطة عبر نسيج XBR، وكينقل مقاييس التكميم. الطبقة المتتبَّعة مطابقة للبتات فالمحاكاة. README كتقول إن الانتباه المتتبَّع على FPGA مازال فمرحلة الإقلاع النشط.
ما تعتبرش نمط المضيف والنمط المتتبَّع إعدادين متساويين من ناحية الأداء. نمط المضيف مفيد للصحة والإقلاع، بينما المتتبّع الهدف ديالو هو يحيد الكلفة الكبيرة ديال جولة المضيف لكل خدمة.
التثبيت والإعداد المحلي
المتطلبات
باش تدير مسار التحقق المحلي الموثق، ثبّت ما يلي:
- Python 3.11
- NumPy
- Verilator 5.x
- GNU Make
- Icarus Verilog، اختيارياً، للمقارنة الإضافية
شغّل الأوامر من جذر مستودع APEX اللي درتي ليه checkout. تأكد من الأدوات الرئيسية قبل ما تبدا:
python3 --version
verilator --version
make --version
python3 -c "import numpy; print(numpy.__version__)"README ما كتعطيش أمر لتثبيت الحزم ولا أمر مضبوط لبيئة Python. استعمل الملفات ديال المستودع والوثائق الموجودة فالمجلدات الفرعية ديالو ملي كتحتاج تحل تبعيات إضافية للتقييم ولا لخدمات FPGA.
تفقد الأدلة أولاً
قبل ما تشغّل مسار طويل، راجع الأدلة والقيود ديال المشروع:
- STATUS.md فيه أعداد التحقّق والنتائج المقيسة اللي تولّدات آلياً.
- TRACEABILITY.md كيسجّل الثغرات المعروفة وكيربط الادعاءات بالأدلة الداعمة.
- الجدول الرئيسي كيتبّع حالة التنفيذ والإقلاع.
- فهرس النتائج كينظّم الأدلة الملتازمة حسب كل حملة.
شغّل اختبارات النموذج الذهبي
بدا بالنماذج المرجعية القابلة للتنفيذ ديال NumPy والمتجهات المجمّدة:
make -C golden testهاد الأمر كيجرّب النماذج الذهبية وكيشمل بوابة محاسبة الضغط المثبّتة. محاسبة الضغط مهمة حيث APEX كيشمل الوسوم والمقاييس والحشو وتخزين القيم الشاذة، وماشي غير حمولة INT4 الاسمية.
تحقّق من خط أنابيب RTL
شغّل اختبار الدخان الكامل لبلاطة الانتباه
make -C verif/top/smoke smokeهاد هو الهدف الموثّق ديال اختبار الدخان من البداية للنهاية لبلاطة الانتباه. استعملو كفحص أولي للتكامل من بعد ما يدوزو اختبارات النموذج الذهبي.
شغّل التحقّق ديال الطبقة 3
make -C verif/top l3هدف الطبقة 3 كيقارن البلاطة المركّبة الحقيقية بالنموذج الذهبي عبر الحالات الموفّرة. APEX كيتطلّب نتائج مطابقة للبتّات، ماشي غير تسامح عددي تقريبي.
تحقّق من متجوّل الطبقات
make -C verif/seq_walkerهاد الشي كيشغّل حزمة اختبارات المتجوّل وبوابات الطفرات ديالو. اختبار الطفرات كيكسّر السلوك عمداً وكيشوف واش بيئة التحقّق غادي تكتاشف العيب. إلا بقات طفرة بلا ما تكتاشف، فهذا كيشير لضعف فالتحقّق، ماشي لنتيجة ناجحة فالتصميم.
فحص نموذج الأداء
شغّل فحوصات معايرة النموذج التحليلي بهاد الأمر:
python3 perf/apex_perf_model.py --checkنموذج الأداء كيعطي إسقاطات صريحة، وماشي قياسات لأداء السيليكون. الافتراضات ومراسي المعايرة ديالو موثّقة فـ PERF_MODEL.md.
الأرقام المتوقّعة لسرعة القراءة واستهلاك الطاقة من فئة 7B كتعتمد على مكوّنات مازال ما تبناتش أو ناقصة، ومنها مسار الأوزان الأصلي W4، والمشي العتادي بين الطبقات، ودمج LPDDR الواسع. ما خاصّهاش تتقدّم على أساس أنها نتائج عتاد محقّقة.
قيّم ضغط KV على النماذج
المستودع فيه مصفوفات دقّة النماذج للكوديك الموثّق ديال KV. شغّل مصفوفة 0.5B و1.5B بهاد الأمر:
bash eval/kv_eval/run_matrix.shشغّل مصفوفة 7B بهاد الأمر:
bash eval/kv_eval/run_matrix_7b.shراجع ملفات README ديال التقييم اللي حدّ ملفات النتائج الملتازمة قبل ما تشغّل هاد الأوامر. التقييم المنشور كيستعمل مجموعة التحقّق الكاملة ديال HellaSwag، اللي فيها 10,042 وثيقة. README كيسجّل سلوك قريب من دون خسارة فالنماذج الأصغر، وما كاين حتى تأثير قابل للاكتشاف على المجموعة الكاملة مع KVQ8 فـ7B، وكلفة مقيسة صغيرة مع KVQ4 فـ7B.
الأدلة المرتابطة متوفّرة فـ نتائج المقارنة المباشرة ونتائج تقييم 7B.
شغّل نموذج عبر خط الأنابيب الذهبي
المشروع كيوثّق تنفيذ المطالبات باستعمال run_tinynpu.py --prompt. هاد الشي كيبثّ رموز Qwen الجشعة عبر خط الأنابيب الذهبي بنقطة ثابتة، ويقدر ينتج مهام على شكل العتاد لإعادة التشغيل.
run_tinynpu.py --promptREADME ما كيعطيش إعداد النموذج كامل ولا جميع الوسائط ديال سطر الأوامر فالتعليمات الرئيسية ديالو، لذلك تبع توثيق أداة رموز 7B باش تعرف النطاق الدقيق والملفات وتفاصيل إعادة الإنتاج. تذكّر أن مسار 7B هادا متحقَّق منّو برمجياً؛ وماشي ادعاء بأن تنفيذ 7B كيدوز على بلاطة FPGA.
شغّل عرض AWS F2
المتطلبات والتكلفة
عرض FPGA كيحتاج بيانات اعتماد AWS CLI عندها الولوج لمثيل f2.6xlarge فـus-west-2. README كيقدّر المدة بحوالي 30 دقيقة والتكلفة بحوالي جوج دولار أمريكيين للتشغيل الكامل.
صورة FPGA المرجعية الموثّقة هي agfi-030a812cd224b409d. كتستعمل وصفة A2 بتردّد ساعة البلاطة 15.625 MHz.
شغّل حزمة التحقّق
bash scripts/fpga/f2/run_walked_demo.sh agfi-030a812cd224b409dالسكريبت كيشغّل مثيل FPGA، كيحمّل الصورة، كينفّذ حزمة التحقّق الموثّقة والسلاسل المتجوّلة، كيطبّع الحكم، ومن بعد كينهي المثيل.
بدا العرض التفاعلي ديال المطالبة
bash scripts/fpga/f2/run_chat_demo.shالعرض التفاعلي كيستعمل خط الأنابيب المتجوّل. README كيعطي The capital of France is كمثال على المطالبة، وكيذكر أن الجواب المصنّف هو Paris..
صور DDR مشتقّة من mlx-community/Qwen2.5-0.5B-Instruct-4bit. ملفات التحضير ديال الفريق مكوّنة فالسكريبتات. المستخدمون الخارجيون خاصّهم يولّدو صورة أوزان باستعمال:
python3 scripts/fpga/f2/make_weight_image.pyكوّن الصورة الناتجة لبَاكيت كتتحكّم فيه، وما تفترضش الولوج لباكيت التحضير ديال الفريق.
فسّر نتائج العتاد بالشكل الصحيح
المستودع كيسجّل سرعة نقل مقيسة قدرها 0.56 رمز فالثانية على صورة A0 بتردّد 62.5 MHz، و0.25 رمز فالثانية على صورة A2 المرجعية بتردّد 15.625 MHz. وكيسجّل حتى انتقالاً مقيساً من خط أساس موجّه من المضيف قدره 0.004 رمز فالثانية.
هاد الأرقام كتوصف صور FPGA وساعات ومسارات تنفيذ محدّدة. راجع FIRST_WALKED_TOKENS.md قبل ما تنقلها، وخلي الإعداد والوسم المقيسين المرتابطين بها.
نصائح متقدّمة
استعمل النموذج الذهبي كحَكَم
ملي كتبدّل بلوك RTL، حدّث ولا صادِق على المواصفة التنفيذية اللّولة، وعاود ولّد الـ vectors ولا تأكّد منهم كيفما مطلوب فالمستودع، وقارن خرج RTL bit ب bit. ما تدخلش اختبارات مبنية على التحمّل إلا إلا كان العقد الحسابي الموثّق ديال المشروع كيتطلّبها بوضوح.
حافظ على تغطية الطفرات
Regression داز ما كافيش فـمنهجية APEX. شغّل بوابات الطفرات المناسبة من بعد ما تبدّل testbench ولا scoreboard ولا sequencer ولا بلوك حسابي. إلا داز تنفيذ مكسور عمداً، قوّي التحقّق قبل ما تثق فالنتيجة الخضرا اللّولة.
عاود نفس الخدمة فمحيطات مختلفة
عمليات APEX كتستعمل أوصاف ديال المهام كتشرح راسها، وكتضمّ الأشكال، والتوجيه، وعقود quantization. حافظ على الأوصاف، والـscales، وعمليات السجلات ملي كتقلب على سبب عدم التطابق. إعادة تشغيل نفس الرحلة فـتوأم Verilator F2 وعلى العتاد هي الطريقة المفضّلة باش تفرّق بين عيوب RTL وعيوب synthesis ولا toolchain.
تبّع الـscales مع بيانات الـtensor
Scales ديال quantization جزء من عقد العتاد، وماشي metadata عرضية. ملي كتوجد ولا كتفحص المهام، خَلّي معلومات الـscale اللي كتدوز عبر هاد الواجهات. Tensor بلا الـscale الموافقة ما يقدرش يعاود العملية fixed-point المقصودة.
فرّق بين حمولة الـcodec والتخزين الإجمالي
ما تحسبش الضغط غير انطلاقاً من حمولات INT4. دخّل بنوك الـscale، والـtags، والـpadding، وmetadata ديال الدقّة، ومسارات outlier. استعمل بوابة المحاسبة الذهبية ديال المستودع وSTATUS.md كأساس موثوق للنسب المنشورة.
فرّق بين أحجام النماذج وادعاءات التنفيذ
- Qwen2.5-0.5B: تبرهن عليه عبر الـpipeline المدعوم بـFPGA والموصوف فالمشروع.
- Qwen2.5-7B: تجرّب عبر الـpipeline الذهبي المتحقَّق منو بالبرمجيات.
- إسقاطات معمارية من فئة 7B: إسقاطات تحليلية لنظام أكبر داير بالـtile، وماشي أداء مقاس من تطبيق FPGA الحالي.
درس بثّ الأوزان قبل ما توسّع الـwalker
أوزان النموذج ما كيدخلوش كاملين فالـtile. تصميم IB-FUEL كيبث سجلات الأوزان ديال كل مهمة من DDR نحو FIFO فوق الـtile، بينما مسار W4 كينقل مجموعات من أربعة bits وكيفكّها باش يخدم محرّك المصفوفة INT8. راجع IB_FUEL.md وW4_DATAPATH.md قبل ما تبدّل سلوك الجدولة ولا الـfeeder.
استعمل بنية المستودع بفعالية
rtl/فيه تطبيق العتاد.golden/فيه النماذج المرجعية ديال NumPy المطابقة bit ب bit.verif/فيه testbenches، وassertions، وscoreboards، وبوابات الطفرات، وتوأم المحاكاة F2.eval/فيه أدوات تقييم دقّة النموذج ديال الـcodec.perf/فيه نموذج الأداء التحليلي المتوقَّع.scripts/fpga/فيه سكريبتات البناء، والصورة، وتحميل DDR، والرحلة، وحلقة الـtokens.docs/results/فيه الأدلة ديال الحملات الملتزم بها فالمستودع.
القيود الحالية وخارطة الطريق
خارطة الطريق الحالية كتعطي الأولوية للتحقّق من walked attention على FPGA، وتسريع إغلاق التوقيت، وبثّ الأوزان بشكل مستمر، ودعم W4 من البداية للنهاية، وزيادة الأعمال المقاسة على معدل الـtokens، والتحضير للمصادقة النهائية ديال Sky130. الحالة الحالية محفوظة فـالجدول الرئيسي.
ما تفترضش باللي عناصر خارطة الطريق سالاو. بالخصوص، الـREADME كيوضّح باللي الإقلاع الكامل ديال walked-attention على العتاد وعدّة تبعيات مرتبطة بعرض النطاق مازال خدام عليهم.
الخلاصة
APEX هو فآن واحد تطبيق RTL ديال tile لفكّ تشفير transformer ودراسة حالة فـالتحقّق من العتاد المبني على الأدلة. أكثر حاجة مميّزة فيه هي codec مدمج ديال KV-cache كيخزّن المفاتيح والقيم فصيغة مضغوطة، وباقي جزء من مسار attention المتحقَّق منو.
بدا بالاختبارات الذهبية، ومن بعد شغّل التحقّق ديال الـtile والـwalker، وفحص الأدلة المقاسة، وما تمشيش لعمليات النموذج ولا FPGA حتى تكون artifacts الإضافية ديالها متوفرة. خَلّي نتائج FPGA المقاسة منفصلة على الإسقاطات التحليلية، واستعمل وثائق قابلية التتبّع ديال المشروع كل مرة كتقدّم فيها شي ادعاء.
APEX منشور بموجب رخصة Apache 2.0. شوف LICENSE للاطلاع على الشروط والإشعارات المعمول بها.
