
جهاز "سول بلير" (SoulPlayer) لجهاز كومودور 64: نموذج محول (Transformer) حقيقي يعمل بـ 25 ألف معامل على جهاز كومودور 64!
ملخص سريع
نجح المطورون في تشغيل نموذج تحويل (Transformer) حقيقي بآليات انتباه متعددة الرؤوس وsoftmax وRMSNorm على جهاز كومودور 64 القديم، وذلك باستخدام لغة التجميع لمعالجات 6502 مع 25 ألف معامل من النوع int8، حيث يستغرق النموذج 60 ثانية لكل رمز مُنتج.
محول حقيقي يعمل على جهاز كومودور 64 بسرعة 1 ميجاهرتز.
محول يعتمد على وحدة فك ترميز فقط، ويتكون من طبقتين - وهو نفس التصميم الذي يكمن وراء نماذج مثل ChatGPT و Claude و Gemini - وقد تم تنفيذه باستخدام لغة التجميع المخصصة لمعالجات 6502/6510، ويعمل على جهاز كومودور 64 دون أي تعديلات. يحتوي على حوالي 25,000 معلمة من النوع int8. يتضمن آليات انتباه ذاتية سببية متعددة الرؤوس حقيقية، ودالة softmax حقيقية، وRMSNorm حقيقية. يستغرق حوالي 60 ثانية لكل رمز (token). كل هذه المكونات تتسع على قرص مرن مع مساحة إضافية.
يتكون من طبقتين، و4 رؤوس انتباه × 8 أبعاد، و embeddings (تضمينات) بأبعاد 32، ووحدات مخفية (hidden units) لـ FFN (شبكة تغذية أمامية) بقيمة 64. يحتوي على حوالي 25,000 معلمة تم تكميمها (quantization) إلى النوع int8 باستخدام تقنية التحجيم (scaling) لكل موتر (tensor). كان الاختراق الرئيسي هو تصحيح عملية تطبيع (normalization) لقيم softmax - حيث يؤدي إزاحة قيم انتباه بمقدار 14 بت بدلاً من 17 إلى توفير نطاق ديناميكي كافٍ لجدول البحث (lookup table) المكون من 128 إدخال لإنتاج أوزان انتباه ذات معنى. بدون هذا التصحيح، كانت قيم الانتباه الصحيحة متساوية تقريبًا عبر جميع المواضع، مما يجعل النموذج "أعمى" بغض النظر عن التصميم أو التدريب.
قم بتنزيل ملف disk/soulplayer.d64 وقم بتحميله في أي محاكي C64 (يوصى باستخدام VICE):
اكتب رسالة قصيرة بأحرف صغيرة، واضغط على مفتاح RETURN، وانتظر. يومض الإطار (border) أثناء معالجة النموذج. يصدر كل رمز (token) نبضة صوتية قصيرة عبر قناة SID. يستغرق إكمال الاستجابة بضع دقائق. اكتب "q" للخروج.
نصيحة: يفهم النموذج الأحرف الصغيرة، والمسافات، وعلامات الترقيم (. , ! ? ' : ; -). يتم التعامل مع الأحرف الكبيرة على أنها رموز غير معروفة.
هذه هي الجزء الممتع. قم بإنشاء مجموعة بيانات (corpus)، وقم بتدريب النموذج، وقم بإنشاء قرص مرن.
قم بتثبيت المكتبات: `pip install numpy torch`
أنشئ ملفًا نصيًا يحتوي على تبادل واحد في كل سطر بالتنسيق التالي: `<SEP>input<SEP>response<SEP>`.
حافظ على التبادلات قصيرة - يحتوي النموذج على نافذة سياق (context window) تتسع لـ 20 رمزًا (token). راجع ملف data/example_corpus.txt للحصول على نموذج.
قم بتشغيل الأمر: `python train.py data/example_corpus.txt`
يقوم هذا الأمر بتدريب أداة تقسيم الكلمات (tokenizer) بتقنية BPE (128 رمزًا)، وتدريب نموذج Transformer باستخدام تقنية الكم (quantization)، ويقوم بتصدير النماذج إلى ملفات models/soul.bin و models/tokenizer.json. يستغرق بضع دقائق على وحدة معالجة الرسومات (GPU).
في كل 500 حقبة (epoch)، سترى مخرجات الاستدلال (inference) باستخدام الأرقام العشرية (float) والأرقام الصحيحة (int8) جنبًا إلى جنب - مما يوضح ما تعلمه النموذج مقارنة بما سيقوم بإنتاجه فعليًا على جهاز C64. يتم حفظ أفضل نقطة تحقق (checkpoint) بناءً على جودة المخرجات من النوع int8، وليس على فقدان الدالة (loss function) للأرقام العشرية. يتم حفظ جميع نقاط التحقق في المجلد models/checkpoints/ للاختيار من بينها.
الخيارات:
إذا كانت هناك نقاط تحقق (checkpoints) موجودة من تشغيل سابق، فسيتم استئناف التدريب تلقائيًا.
قم بتشغيل الأمر: `python build.py`
يقوم هذا الأمر بتجميع جميع روتينات (routines) لغة التجميع 6502/6510، ويدمج الأوزان المدربة، ويكتب الملفات disk/soulplayer.prg و disk/soulplayer.d64.
أو قم بنسخ ملف .d64 إلى قرص مرن حقيقي من طراز 1541 للأجهزة الفعلية.
يعمل باستخدام نفس العمليات الحسابية الصحيحة التي يستخدمها جهاز C64، ولكن بسرعة أكبر.
تتحقق الاختبارات من السلسلة بأكملها: مرجع الأرقام العشرية → مرجع الأرقام الصحيحة → نسخة طبق الأصل دقيقة من الذاكرة → روتينات لغة التجميع 6502/6510 → عملية بناء كاملة.
المفردات: 128 رمزًا (4 رموز خاصة + 34 حرفًا/علامة ترقيم + 90 عملية دمج بتقنية BPE).
Embedding: 32 بُعدًا.
الطبقات: 2.
الانتباه: 4 رؤوس × 8 أبعاد لكل رأس.
FFN: 64 وحدة مخفية.
نافذة السياق: 20 رمزًا.
عدد المعلمات: حوالي 25,000 (كلها من النوع int8).
حجم الوزن: 25 كيلوبايت.
الاستدلال: جشع (argmax).
في كل طبقة: RMSNorm → انتباه ذاتي سببي متعدد الرؤوس → بقايا (residual) → RMSNorm → MLP (شبكة تغذية أمامية) → بقايا.
RMSNorm نهائي → إسقاط الإخراج (output projection) → argmax.
جميع التنشيطات (activations) هي أرقام صحيحة (int16) من النوع Q8.8.
الأوزان هي من نوع int8 مع إزاحات بقوى العدد 2 لكل موتر. التحيزات هي من نوع int16 وتم قياسها مسبقًا لتتناسب مع المُراكم المستخدم في عملية الضرب المصفوفي. تستخدم دالة Softmax جدول بحث يتكون من 128 إدخالًا لعملية الأس (exp)، بالإضافة إلى عملية تطبيع للنتائج باستخدام الإزاحة >>14. لا تحتوي وحدة المعالجة 6502 على تعليمات ضرب، وبالتالي يتم تنفيذ جميع العمليات عن طريق عمليات الإزاحة والجمع.
يستخدم النموذج تقنية التدريب مع مراعاة تأثير التكميم (Quantization-Aware Training - QAT). خلال عملية التدريب، تمر الأوزان عبر وحدة FakeQuantI8، والتي تقوم بعملية تكميم وهمية باستخدام مقياس عشري مستمر وتقدير للتدرج. التباين المتعمد بين المقياس المستمر المستخدم في التدريب وشبكة الإزاحات بقوى العدد 2 المستخدمة في عملية الاستخراج يعمل بمثابة ضوضاء ضمنية، مما يجبر النموذج على تعلم أوزان ذات هوامش لوغاريتمية أوسع قادرة على التغلب على فجوة التكميم. يتم تكميم التحيزات باستخدام دالة fq() البسيطة. يتم تطبيق إزاحة بمقدار × 0.5 بعد كل عملية ضرب مصفوفي، وذلك لمحاكاة عملية الإزاحة >> 1 المستخدمة في وحدة المعالجة 6502.
تمنع تقنية "تنعيم التسميات" (Label smoothing) (بقيمة 0.15) النموذج من تحسين توزيعات اللوغاريتمات بشكل يتجاوز ما يمكن لعمليات حساب int8 التفريق بينه بشكل موثوق. تقوم حلقة التدريب بتقييم عملية التمرير الأمامي الفعلية باستخدام الأعداد الصحيحة (numerics.forward()) كل 500 حقبة تدريبية، ويتم حفظ أفضل نقطة حفظ (checkpoint) بناءً على دقة argmax باستخدام الأعداد الصحيحة int8، وليس بناءً على الخسارة (loss) المقاسة بالأعداد العشرية.
يعرض خرج التدريب نتائج الاستدلال باستخدام الأعداد العشرية ونتائج الاستدلال باستخدام الأعداد الصحيحة int8 جنبًا إلى جنب، مما يوضح ما تعلمه النموذج مقابل ما سيقوم بإنتاجه وحدة C64.
هذا ليس نظامًا ذكيًا. عدد المعلمات (25 ألف) هو أصغر بحوالي 70 مليون مرة من GPT-4. سينتج عنه جمل غير متماسكة. هذا هو الهدف - أن البنية تعمل بهذا الحجم.
إنه بطيء ومتأمل. يستغرق حوالي 60 ثانية لكل رمز (token) على الأجهزة الحقيقية. يستغرق الرد الكامل عدة دقائق.
تُحوَّل الأحرف الكبيرة إلى <UNK>. التزم بالأحرف الصغيرة.
مفردات صغيرة. 128 رمزًا (token) وسياق يتكون من 20 رمزًا - حافظ على تفاعلات التدريب قصيرة.
الكود والتدريب: gizmo64k
تصحيح الأخطاء، اختبارات الوحدة، والأسلوب "بطة المطاط": Claude (Opus 4.6) من Anthropic.
"الروح المحظوظة": جهاز Commodore 64 من شركة Commodore Business Machines، عام 1982.
رخصة GNU العامة الإصدار 3. راجع ملف LICENSE.
المستقبل عاد إلى الماضي. والآن، لديه روح.
لماذا يهمّك هذا؟
يُمثل هذا المشروع إنجازاً تقنياً استثنائياً يُثبت إمكانية تشغيل نماذج الذكاء الاصطناعي الحديثة على أجهزة عتيقة، مما يفتح آفاقاً جديدة لفهم عمل هذه النماذج على مستوى عميق ويُتيح للهواة والمطورين العرب تجربة هذه التقنية بأنفسهم عبر أدوات التدريب والتجميع المتاحة.
الوسوم
هل أعجبك هذا المقال؟
اشترك في النشرة الأسبوعية واستقبل أهم أخبار الذكاء الاصطناعي مباشرةً في بريدك
اشترك مجاناً

