تحسين الاستدلال على الأجهزة لشرائح Apple Silicon

محرك محلي مخصص يحسن إنتاجية التعبئة وفك التشفير.

المؤلفونPerplexity Engineering

ينسق الحوسبة الهجينة على Apple silicon مهمة بين الذكاء الرائد في السحابة ونموذج محلي على جهاز Mac. تتعامل نماذج السحابة مع الأبحاث والسببية، بينما يعمل نموذج محلي مع الملفات والتطبيقات الخاصة على جهاز Mac.

لكي يبدو تقسيم العمل هذا سلسًا، يجب أن يواكب الاستدلال المحلي بقية المهمة. يتطلب ذلك محركًا يمكنه معالجة الأوامر بسرعة والحفاظ على معدل توليد رموز مرتفع.

تم بناء Lily، محرك الاستدلال المحلي خفيف الوزن الخاص بنا، خصيصًا لـ Apple silicon وQwen3.6-35B-A3B، مع تحسينات منفصلة للتعبئة وفك التشفير. سيتم توفير المحرك كمصدر مفتوح قريباً.

المقدمة

تعتبر الطريقة الشائعة لتشغيل النماذج اللغوية الكبيرة (LLMs) على أجهزة Mac هي باستخدام MLX، وهو إطار عمل تعلّم آلي مفتوح المصدر من Apple لشرائح Apple silicon. تضيف مكتبة الملازمة له، MLX-LM, المكونات اللازمة لتحميل وتوليد النصوص باستخدام مجموعة واسعة من النماذج اللغوية. معًا، توفر MLX وMLX-LM حزمة جاهزة للأغراض العامة لاستدلال النماذج اللغوية الكبيرة المحلية.

نموذج Qwen3.6-35B-A3B هو نموذج هجين متفرق: فهو يستخدم توجيه مزيج الخبراء (MoE) ويجمع بين حالات متكررة ذات حجم ثابت وانتباه كامل. تقلل هذه الخيارات المعمارية من حجم الحسابات المطلوبة، لكنها تخلق أيضًا أحمال عمل غير منتظمة. توجّه الرموز إلى أوزان خبراء مختلفة، وتكون الحالات المتكررة متسبطة بطبيعتها.

يختار MLX-LM بالفعل نواة محسنة لمراحل الاستدلال وأشكال أحمال العمل الشائعة، ولكن يجب أن تدعم عملياته القابلة لإعادة الاستخدام العديد من بنيات النماذج. يمكن لمحرك مخصص لـ Qwen التخصص على مستوى النموذج ووقت التشغيل، وتنسيق النواة، وحركة البيانات، والجدولة حول البنية الثابتة للنموذج.

تنفذ Lily هذا التخصص من البداية إلى النهاية في عملية واحدة. يحمل وقت تشغيل Rust نقطة تحقق النموذج ويدير حالة الجلسة وحلقة التوليد، وتتقبل واجهة برمجة تطبيقات دردشة متوافقة مع OpenAI الطلبات وتبث الرموز، وتنفذ نواة Metal المخصصة عمليات خاصة بـ Qwen. لا يوجد PyTorch أو MLX في مسار التنفيذ.

مكان تواجد العمومية والتخصص في مكوّني الاستدلال. يصف MLX-LM النموذج كعمليات مصفوفة MLX قابلة للتركيب، والتي يجدولها MLX من خلال نواة قابلة لإعادة الاستخدام. بينما تضع ليلي هيكل النموذج، وخطط التنفيذ الخاصة بالمرحلة، واختيار النواة في بيئة تشغيل Rust واحدة مبنية حول Qwen وشريحة Apple.
أين تكمن العمومية والتخصص في حزمتي الاستدلال. يصف MLX-LM النموذج كعمليات مصفوفة MLX قابلة للتركيب، والتي يجدولها MLX عبر نواة قابلة لإعادة الاستخدام. وبدلاً من ذلك، تضع Lily بنية النموذج، وخطط التنفيذ الخاصة بالمرحلة، واختيار النواة في وقت تشغيل Rust واحد مبني حول Qwen وApple silicon.

نقيس أداء التعبئة وفك التشفير بشكل منفصل. تلتقط إنتاجية التعبئة مدى سرعة معالجة المحرك للأمر؛ بينما تلتقط إنتاجية فك التشفير مدى سرعة توليده لرموز الإخراج.

قمنا بقياس أداء نموذج Qwen3.6-35B-A3B على جهاز MacBook Pro واحد مزود بشريحة M5 Max مع وحدة معالجة رسومات (GPU) ذات 40 نواة وذاكرة موحدة بسعة 128 جيجابايت. عبر عشرة أطوال للأوامر (prompts) لمرحلة التعبئة (prefill) وعشرة أطوال للسياق لمرحلة فك التشفير (decode)، تتراوح من 256 إلى 128 ألف رمز (حيث K = 1,024)، يبلغ متوسط إنتاجية التعبئة للمحرك 1.23 ضعف إنتاجية MLX-LM، وإنتاجية فك التشفير 1.35 ضعفها. عند استخدام أمر بطول 4 آلاف رمز وسياق فك تشفير بطول 4 آلاف رمز، يصل المحرك المخصص إلى 5,749.9 رمز تعبئة في الثانية و186.6 رمز فك تشفير في الثانية، مقارنة بـ 4,737.5 و140.9 لـ MLX-LM. خلال جلسة متعددة الأدوار، تتراكم توفيرات الوقت هذه مع كل استدعاء إضافي للنموذج.

متوسط الإنتاجية الحسابي عبر عشرة أطوال متساوية الوزن من 256 إلى 128 ألف رمز. يبلغ متوسط ليلي 4,156 رمز إدخال مسبق في الثانية مقابل 3,388 لـ MLX-LM (1.23 ضعف)، و170.0 رمز فك رموز في الثانية مقابل 126.4 (1.35 ضعف). يختلف الإدخال المسبق باختلاف طول الموجه؛ بينما يختلف فك الرموز باختلاف طول السياق.
متوسط الإنتاجية الحسابية عبر عشرة أطوال متساوية الوزن من 256 إلى 128 ألف رمز. يبلغ متوسط Lily 4,156 رمز تعبئة/ثانية مقابل 3,388 لـ MLX-LM (1.23 ضعف)، و170.0 رمز فك تشفير/ثانية مقابل 126.4 (1.35 ضعف). تغير التعبئة طول الأمر؛ ويغير فك التشفير طول السياق.

بعد ذلك، نشرح كيف تخلق بنية Qwen فرص تحسين خاصة بالنموذج على Apple silicon. ثم نستعرض تغييرات التعبئة وفك التشفير الناتجة. نغطي أيضًا الأماكن التي يتوقف فيها التحسين الإضافي عن تحقيق فائدة قبل أن نختتم بمقارنة شاملة مع MLX-LM.

فرص التحسين الخاصة بنموذج Qwen على شرائح Apple silicon

يخلق Qwen ثلاثة أشكال مميزة لأحمال العمل

يحتوي Qwen3.6-35B-A3B على 35 مليار معلمة ولكنه ينشط حوالي 3 مليارات فقط لكل رمز. يقوم موجه بتقييم 256 شبكة فرعية للخبراء ويحدد ثمانية، إلى جانب خبير مشترك واحد يعالج كل رمز. يقلل تصميم MoE المتفرق هذا من الحسابات ولكنه ينتج عملاً غير متساوٍ: يتلقى الخبراء أعدادًا مختلفة من الرموز، ويتطلب كل رمز أوزانًا من مجموعة مختلفة من الخبراء.

يجمع نموذج Qwen أيضًا بين 10 طبقات انتباه كامل و30 طبقة Gated DeltaNet. تحتفظ هاتان الطبقتان بالمعلومات السابقة بطرق مختلفة.

تستخدم طبقات الانتباه انتباه الاستعلام المجمع (GQA). يحتوي Qwen على 16 رأس استعلام ورأسي مفتاح-قيمة (KV)، مع مشاركة ثمانية رؤوس استعلام لكل رأس KV. تجعل المشاركة ذاكرة التخزين المؤقت KV أصغر وتسمح بإعادة استخدام البيانات المخزنة مؤقتًا عبر رؤوس الاستعلام. لا تزال ذاكرة التخزين المؤقت تخزن مفاتيح وقيم جديدة لكل رمز، لذا تقرأ كل خطوة فك تشفير المزيد من البيانات كلما نما السياق.

بدلاً من ذلك، يضغط Gated DeltaNet المعلومات السابقة في حالة متكررة بحجم ثابت. تتحكم بوابة متعلمة في مقدار الحالة الحالية المراد الاحتفاظ بها، بينما يدمج تحديث دلتا المعلومات من الرمز الحالي. يحدد النموذج هذه التحديثات بشكل متكرر، لذا يعتمد كل رمز على الحالة الناتجة عن الرمز السابق. ومع ذلك، أثناء التعبئة، يمكن للمحرك تقييم نفس الحساب بطريقتين. يمكنه مسح الرموز مباشرة أثناء حمل الحالة للأمام، أو إعادة تنظيم التحديثات في كتل تظهر المزيد من عمليات المصفوفات والتوازي على مستوى الرموز. يعتمد النهج الأسرع على أبعاد النموذج، وحمل العمل، والأجهزة.

تخلق هذه الهياكل مجتمعة ثلاثة أنماط حسابية: مجموعات خبراء غير متساوية، وانتباه على ذاكرة تخزين مؤقت متنامية، وتكرار بحجم ثابت يمكن تقييمه مباشرة أو في كتل.

يوفر Apple silicon مسارات مختلفة لأحمال عمل مختلفة

تعالج التعبئة العديد من صفوف تنشيط الرموز للأمر دفعة واحدة. يقوم حمل العمل المحلي قيد النظر هنا عادةً بتشغيل طلب واحد في كل مرة (دفعة 1) ومعالجة صف جديد واحد لكل خطوة. هذا الاختلاف يغير كيفية استخدام أوزان النموذج نفسها. يمكن للتعبئة إعادة استخدام كل كتلة من الأوزان عبر مئات أو آلاف الصفوف. بينما لا تستطيع عملية فك التشفير ذلك إلى حد كبير، نظرًا لأن كل رمز جديد يتطلب تمريرًا آخر عبر الأوزان.

يضع Apple silicon وحدة المعالجة المركزية ومعالج الرسومات خلف الذاكرة الموحدة، وهي مجموعة ذاكرة مادية واحدة يمكن الوصول إليها لكليهما. يتيح ذلك للنموذج البقاء مقيمًا دون الحفاظ على نسخة منفصلة لمعالج الرسومات، ولكنه لا يجعل حركة البيانات مجانية. لا تزال قراءة الأوزان والقيم الوسيطة تستهلك عرض النطاق الترددي للذاكرة، بينما تكون المسجلات والتخزين الآخر على الشريحة أسرع ولكنها أصغر بكثير.

توفر وحدة معالجة الرسومات M5 أيضًا مسارات حوسبة مختلفة. تستخدم طبقات التعبئة الخطية ضرب المصفوفات العامة (GEMM)، وتطبيق مصفوفة أوزان على العديد من صفوف دفعة واحدة. يمكن لعمليات GEMM المتوافقة استخدام مسرع الشبكات العصبية (Neural Accelerator) في كل نواة معالج رسومات من خلال عمليات موتر Metal 4. وبدلاً من ذلك، تستخدم خطوة فك تشفير دفعة-1 ضرب المصفوفات والمتجهات العام (GEMV)، وتطبيق نفس الأوزان على صف واحد. مع القليل من إعادة استخدام الأوزان، يقتصر GEMV بشكل أساسي على عرض النطاق الترددي للذاكرة وهو مناسب بشكل أفضل لوحدات المنطق الحسابي المتجهة (ALUs) لمعالج الرسومات مقارنة بمسرعات الشبكات العصبية المصممة لعمليات المصفوفات ذات إعادة استخدام البيانات الأعلى.

مسارات التنفيذ هذه ليست حصرية لـ Lily. يعمل MLX عبر نفس الذاكرة الموحدة ويختار نواة مصفوفة ومتجهة محسنة وفقًا لشكل حمل العمل. تقوم تطبيق Qwen في MLX-LM بالفعل بتجميع عمل الخبراء، وتقييم Gated DeltaNet باستخدام نواة Metal متكررة مدمجة، واستخدام الانتباه الواعي بـ GQA. هذه الإمكانيات هي نقطة البداية المشتركة للاستدلال الفعال لـ Qwen على Apple silicon.

استراتيجية التحسين

يسمح نطاق Lily الأضيق بتنسيق مسارات التنفيذ المشتركة هذه حول بنية وأبعاد Qwen الدقيقة. وهو يستخدم مسارات GPU خاصة بالمرحلة، ويربط أحمال عمل الخبراء والتكرار والانتباه الخاصة بـ Qwen تقليل حركة البيانات، ويختار النواة والتخطيطات من شكل حمل العمل المقاس. تتكون الاستراتيجية من ثلاثة أجزاء:

  1. مطابقة مسار معالج الرسومات مع مرحلة الاستدلال. استخدم التنفيذ الموجه للمصفوفات عندما تستطيع التعبئة إعادة استخدام الأوزان عبر صفوف عديدة، والتنفيذ الموجه للمتجهات عندما تعالج دفعة-1 لفك التشفير صفًا واحدًا في كل مرة.
  2. إسقاط بنية Qwen على معالج الرسومات مع تقليل حركة البيانات. الاحتفاظ بالأوزان مضغوطة حتى يتم استخدامها، وتوزيع عمل الخبراء الموجه دون العودة إلى وحدة المعالجة المركزية، والاحتفاظ بحالة Gated DeltaNet على الشريحة طوال مسحها المتكرر، وإعادة استخدام بيانات KV المشتركة بواسطة انتباه الاستعلام المجمع.
  3. تكييف النواة مع شكل حمل العمل. ضمن كل مرحلة، حدد أحجام البلاطات، وتخطيطات التنفيذ، ومسارات الانتباه من عدد الصفوف المتاحة، وتوزيع الصفوف عبر الخبراء، وأبعاد العملية، وطول السياق الحالي.

تشرح الأقسام التالية هذه الخيارات. بالنسبة للتحسينات التي تم تقييمها في اختبارات تجريدية متطابقة على شريحة M5 Max، نقدر تأثيراتها من خلال مقارنة تكوينات المحرك المتطابقة لولا اختلافها في التحسين قيد الدراسة. نظرًا لأن هذه التجربة تقارن إصدارات محركنا بنفسه، فإنها تشرح الآليات بدلاً من تفكيك النتائج النهائية مقارنة بـ MLX-LM.

التعبئة: إعادة استخدام الأوزان وإبقاء التوجيه على معالج الرسومات

تكشف التعبئة عن العديد من صفوف الرموز دفعة واحدة، لكن Qwen يوجه هذه الصفوف بشكل غير متساوٍ عبر الخبراء ويحدث الحالة المتكررة عبر التسلسل. تنقسم تحسيناتها إلى ثلاث مجموعات: تنظيم عمل الخبراء المتفرقين حول الصفوف الموجهة، وإبقاء مسح Gated DeltaNet على الشريحة، وتقسيم الأوامر الطويلة إلى أجزاء محددة.

تنفيذ وإقامة البيانات لقطعة إدخال مسبق محدودة عبر طبقة Qwen. يوسع الانتباه ذاكرة التخزين المؤقت لـ KV، بينما يحمل Gated DeltaNet حالته المتكررة العاملة في السجلات. تبقى بيانات تعريف توجيه الخبراء على وحدة معالجة الرسوميات، وتظل أوزان Q4 معبأة حتى يتم إلغاء كميتها داخل GEMM المجمع، وتقتصر التنشيطات المؤقتة على القطعة الحالية.
إقامة التنفيذ والبيانات لجزء تعبئة محدد واحد عبر طبقة Qwen. يوسع الانتباه ذاكرة التخزين المؤقت KV، بينما يحمل Gated DeltaNet حالته المتكررة العاملة في المسجلات. تظل بيانات تعريف توجيه الخبراء على معالج الرسومات، وتبقى أوزان Q4 معبأة حتى يتم إلغاء تكميمها داخل GEMM المجمع، وتقتصر التنشيطات المؤقتة على الجزء الحالي.

تحسين حوسبة الخبراء المتفرقين

إلغاء تكميم الأوزان أثناء عملية ضرب المصفوفات

تستخدم نقطة التحقق Qwen3.6-35B-A3B تكميمًا تآلفيًا مجمعًا بـ 4 بتات. يتم تخزين كل وزن كرمز عدد صحيح بـ 4 بتات، بينما تشترك كل مجموعة من 64 وزنًا في مقياس وانحياز bfloat16 المستخدمين لإعادة بناء قيمهما. هذا يقلل النموذج ذي الـ 35 مليار معلمة من حوالي 70 جيجابايت من أوزان bfloat16 إلى نقطة تحقق بقوة 19.4 جيجابايت، مما يجعل الاحتفاظ بالنموذج مقيمًا على جهاز Mac أمرًا عمليًا.

تستهلك عملية موتر Metal 4 المستخدمة لضرب المصفوفات متعاملين (operands) بتنسيق bfloat16 بدلاً من التمثيل المعقب بـ 4 بتات. قبل عملية الضرب، يجب على معالج الرسومات إعادة بناء الأوزان بتنسيق bfloat16. يقوم GEMM المجمع المحسن في Lily بهذه العملية على بلاطة وزن صغيرة واحدة في تلو الأخرى ويحتفظ بالنتيجة في ذاكرة مجموعة خيوط على الشريحة لفترة طويلة بما يكفي لضربها في صفوف التنشيط الموجهة. يستخدم التراكم الفاصلة العائمة بـ 32 بت، وتتم كتابة المخرجات بتنسيق bfloat16. لا يتم أبدًا إنشاء مصفوفة الأوزان الموسعة الكاملة في الذاكرة الموحدة.

في الاختبار التجريدي، يعمل إلغاء التكميم كعملية منفصلة: فهي توسع الأوزان ذات الـ 4 بتات إلى مصفوفة bfloat16 في الذاكرة الموحدة، وبعد ذلك تقرأ نواة المصفوفة تلك المصفوفة مرة أخرى. عند استخدام أمر بطول 512 رمزًا، أدى نقل إلغاء التكميم إلى GEMM المجمع إلى زيادة إنتاجية التعبئة الشاملة بنسبة 77.4% من خلال القضاء على الكتابة والقراءة الوسيطة.

إبقاء توجيه الخبراء على معالج الرسومات

يحتاج GEMM المجمع إلى تخزين صفوف التنشيط المعينة لكل خبير معًا. بعد اختيار ثمانية خبراء لكل رمز، يعد مخطط بياني (histogram) عدد التعيينات التي ذهبت إلى كل خبير. يحول المسح البادئ تلك العدات إلى إزاحات بداية، وتضع خطوة التشتت الصفوف في مجموعات خبرائها، ويسرد خريطة الكتل كتل المصفوفات ذات الحجم الثابت التي يجب على GEMM المجمع معالجتها.

يحافظ المسار المحسن على هذا التسلسل بأكمله في مخزن مؤقت للأوامر واحد، وهو دفعة مرتبة من عمليات معالجة الرسومات، لكل مقطع أمر. وبدلاً من ذلك، يتوقف الاختبار التجريدي مؤقتًا لكي تتمكن وحدة المعالجة المركزية من فحص الوسيطات التوجيهية وإرسال العملية التالية. يضيف الاحتفاظ بالمخطط البياني والمسح البادئ على وحدة معالجة الرسومات نواتين ولكنه يزيل مزامنة وحدة المعالجة المركزية ومعالج الرسومات داخل كل طبقة MoE.

عند استخدام أمر بطول 512 رمزًا، أدى تمكين التوجيه المقيم في معالج الرسومات إلى زيادة التعبئة الشاملة بنسبة 89%. يوضح هذا أيضًا سبب كون عدد النواة وحدها مضللاً: يطلق المسار الأسرع المزيد من النواة ولكنه لا ينتظر وحدة المعالجة المركزية أبدًا داخل الطبقة.

مطابقة حجم البلاطة مع حمل الخبير

عند استخدام أمر بطول ألفي رمز (2K)، فإن توجيه كل رمز إلى ثمانية من أصل 256 خبيرًا ينتج عنه 16,384 تعيينًا للرموز والخبراء، أو بمتوسط 64 صف تنشيط لكل خبير. التوزيع الفعلي غير متساوٍ: يتلقى بعض الخبراء العديد من الصفوف، بينما يتلقى آخرون القليل.

يقسم GEMM المجمع مخرجات كل خبير إلى بلاطات، وهي كتل مستطيلة صغيرة من مخرجات ضرب المصفوفات. يتم تعيين كل بلاطة لمجموعة خيوط معالج رسومات واحدة. على وحدات معالجة الرسومات في Apple silicon، تحتوي مجموعة الخيوط على مجموعة شرائح واحدة أو أكثر، تتكون كل منها من 32 خيطًا تنفذ التعليمات بتزامن تام.

توزع البلاطات الأكبر تكلفة الإعداد عبر صفوف أكثر وتكشف عن عمل موازي أكبر، لكن جزءًا من بلاطة كبيرة يظل خاملاً عندما يتلقى الخبير بضع صفوف فقط. لذلك ترتبط أحجام البلاطات وعدد مجموعات الشرائح ببعضها.

يحدد الاختبار التجريدي البلاطة عند 16 صفًا. مقابل هذا التحكم، أدى تمكين بلاطة الـ 32 صفًا مع أربع مجموعات شرائح إلى تحسين التعبئة الشاملة بنسبة 13.2% عند ألفي رمز.

إبقاء الحالة المتكررة على الشريحة

أثناء التعبئة، تفحص كل طبقة من طبقات Gated DeltaNet الأمر بالترتيب بينما تحمل حالتها المتكررة للأمام. مع تعطيل إقامة المسجلات، يستخدم الاختبار التجريدي مسحًا قائمًا على الكتل. عند استخدام أمر بطول ألفي رمز (2K)، ينقل هذا المسار 256 ميبيبايت (MiB) من الحالة لكل طبقة ويوقف مرارًا وتكرارًا خيوط التعاون عند الحواجز، وهي نقاط مزامنة يجب أن تنتظر فيها جميع الخيوط المشاركة بعضها البعض.

الحالة المتكررة هي مصفوفة. تعين النواة المحسنة كل عمود لسلسلة شرائح (simdgroup) واحدة. تقسم سلسلة الشرائح العمود بين سلاسلها، وتحمل العمود في مسجلاتها مرة واحدة، وتمرر الحالة عبر عملية المسح بأكملها. تتبادل السلاسل النتائج الوسيطة من خلال عمليات سلسلة الشرائح بدلاً من ذاكرة مجموعة السلاسل (threadgroup memory)، وهي تخزين على الرأس مشارك عبر مجموعة السلاسل. تُكتب الحالة المكتملة مرة أخرى فقط بعد المسح.

تستخدم الحالة ובوابتها تنسيق الفاصلة العائمة بـ 32 بت لأن أخطاء التقريب الصغيرة تتراكم عبر التحديثات المتسلسلة. تبقى تنشيطات الاستعلام والمفاتيح بتنسيق bfloat16.

عند استخدام أمر بطول ألفي رمز (2K)، أدى تمكين المسح المقيم في المسجلات إلى تحسين التعبئة الشاملة بنسبة 5.6%. شكلت عمليات GEMM للخبراء حوالي 90% من وقت التعبئة. لا يكشف المسح التسلسلي عن عمل مصفوفة قابل لإعادة الاستخدام بما يكفي للاستفادة من مسرعات الشبكات العصبية (Neural Accelerators).

تقييد الذاكرة المؤقتة بتقسيم الأوامر

يعالج وقت التشغيل أمرًا طويلاً كتسلسل من الأجزاء المحددة بدلاً من الاحتفاظ بالبيانات المؤقتة لكل رمز أمر في الذاكرة في نفس الوقت. تظل أوزان النموذج مقيمة في الذاكرة الموحدة، بينما تحمل الحالة المتكررة وذاكرة التخزين المؤقت KV السياق من جزء إلى آخر. لا يتم التخلص من أي سياق سابق.

بدون التقسيم إلى أجزاء، تنمو مصفوفات التنشيط المؤقتة مع الأمر الكامل وتتنافس مع أوزان النموذج، والحالة المتكررة، وذاكرة التخزين المؤقت KV على الذاكرة الموحدة. يحافظ التقسيم على القيم المؤقتة لشريحة واحدة فقط حية في نفس الوقت، ثم يفرج عن التخزين أو يعيد استخدامه قبل معالجة الشريحة التالية. هذا يحد من ذروة ذاكرة العمل ويسمح للمحرك بمعالجة الأوامر الأطول دون تغيير مخرجات النموذج.

تعتبر التعبئة المجزأة شائعة في العديد من المحركات وهي بالغة الأهمية لخدمة مسارات متعددة الأدوار طويلة في هذه البيئات المقيدة بالذاكرة. يظل إجمالي وقت التعبئة لطبقات الانتباه تربيعيًا على طول الأمر، مع بعض النفقات العامة الإضافية من التحميلات المتكررة لـ KV للأجزاء السابقة.

فك التشفير: تقليل البايتات المنقولة لكل رمز

تعالج خطوة فك تشفير دفعة-1 صفًا جديدًا واحدًا في كل مرة. مع القليل من إعادة استخدام الأوزان، يعتمد أداؤها بشكل أساسي على عدد البايتات التي ينقلها المحرك لكل رمز. تنقسم تغييرات فك التشفير إلى أربع مجموعات: تحسين مسار الوزن ذي الصف الواحد، وإبقاء كل خطوة على معالج الرسومات، وتقليل حركة مرور الحالات والوسيطات، وقراءة ذاكرة التخزين المؤقت للانتباه بكفاءة.

تدفق البيانات لخطوة فك رموز واحدة بحجم دفعة 1 وآليتين تقلانل وقت الخمول وحركة المرور في ذاكرة التخزين المؤقت. (A) يقوم وحدة معالجة الرسوميات بدفق أوزان Q4 وحالة النموذج من خلال الانتباه، وGated DeltaNet، والتوجيه، ونواة الخبراء المدمجة، ثم يكتب الرمز المحدد مباشرة في فتحة إدخال الخطوة التالية بينما يرسل نسخة إلى وحدة المعالجة المركزية. (B) تسمح جدولة مراعية للاعتمادية بتداخل النواة المستقلة. (C) يتيح تجميع GQA لأربعة رؤوس استعلام مشاركة كل تحميل صف KV، مما يقلل ثمانية طلبات مستقلة إلى تحميلين مشتركين.
تدفق البيانات لخطوة فك تشفير دفعة-1 (batch-1) وآليتين تقلان وقت الخمول وحركة مرور الذاكرة المؤقتة. (أ) يقوم معالج الرسومات ببث أوزان Q4 وحالة النموذج عبر الانتباه، وGated DeltaNet، والتوجيه، ونواة الخبراء المدمجة، ثم يكتب الرمز المحدد مباشرة في فتحة إدخال الخطوة التالية مع إرسال نسخة إلى وحدة المعالجة المركزية (CPU). (ب) تتيح الجدولة الواعية بالتبعيات تداخل النواة المستقلة. (ج) تتيح حزمة GQA لأربعة رؤوس استعلام مشاركة كل عملية تحميل لصف KV، مما يقلل ثمانية طلبات مستقلة إلى عمليتي تحميل مشتركتين.

تحسين مسار الوزن ذي الصف الواحد

يرسل MLX بالفعل أعمال الصف الواحد إلى نواة مصفوفة-متجه متخصصة. ونظرًا لأن Lily لا يستخدم MLX، يجب أن يوفر وقت التشغيل المخصص نفس الاستراتيجية الأساسية. تم تصميم GEMV الموازي للصف الخاص بنا لصف تنشيط واحد. تتعاون سلسلة شرائح (simdgroup) في المخرجات أثناء قراءة أجزاء مختلفة من مصفوفة الأوزان بالتوازي.

الحفاظ على كل خطوة فك تشفير على معالج الرسومات

الإبقاء على تسليم الرموز على معالج الرسومات

تنتهي كل خطوة فك تشفير بتحديد الرمز التالي؛ وتبدأ الخطوة التالية بهذا الرمز كمدخل. يضيف إرسال التحديد إلى وحدة المعالجة المركزية ثم إرجاعه إلى معالج الرسومات نقطة مزامنة لكل رمز. وبدلاً من ذلك، يتناوب وقت التشغيل لدينا بين مخزنين مؤقتين للأوامر وفتحتين للرموز مقيمتين في معالج الرسومات. يحدد معالج الرسومات الرمز الأعلى نتيجة ويكتب معرف رمزه مباشرة في فتحة الإدخال لخطوة فك التشفير التالية، بينما تجهز وحدة المعالجة المركزية العمل اللاحق.

تداخل عمل معالج الرسومات المستقل

في خطوة فك تشفير دفعة-1 واحدة مسجلة، أدى توليد رمز إلى إطلاق 795 نواة معالجة رسومات (GPU). شكلت تبعياتها 555 مرحلة متسلسلة، مما ترك بعض النواة حرة للتشغيل بالتزامن. ومع ذلك، قام وضع التنفيذ التسلسلي في Metal بتشغيل كل نواة بالترتيب.

يسجل مسار فك التشفير المحسن تبعيات البيانات الفعلية في تمرير Metal متزامن. يمكن إطلاق النواة المستقلة في نفس الوقت عندما تسمح موارد معالج الرسومات بذلك. يتم إدراج حاجز فقط عندما يتطلب العمل اللاحق نتيجة سابقة.

تقليل حركة مرور الحالات والوسيطات

غالبًا ما تجسد النواة المنفصلة وسيطًا: تكتب إحدى النواة نتيجة مؤقتة في الذاكرة، وتقرأ التالية النتيجة مرة أخرى. يدمج مسار فك التشفير المحسن أربع سلاسل: عمليات إسقاط إدخال الخبير مع تنشيطها البوابي؛ وإسقاط إخراج الخبير مع درجة توجيهه ونتيجة الخبير المشترك؛ وإعداد الاستعلام والمفتاح قبل الانتباه؛ والتحديث المتكرر مع تطبيعه. تحتفظ كل نواة مدمجة بالقيم المؤقتة في المسجلات بدلاً من إرسالها عبر الذاكرة.

يؤدي الدمج أيضًا إلى تقصير رسم التبعيات البياني: عندما تختفي كتابة وسيطة، تختفي معها الحاجز الذي يحمي المستهلك الخاص بها.

قراءة ذاكرة التخزين المؤقت للانتباه بكفاءة

دمج قراءات ذاكرة التخزين المؤقت للانتباه

تقرأ الانتباه المفاتيح والقيم من ذاكرة التخزين المؤقت KV أثناء كل خطوة فك تشفير. في الاختبار التجريدي، لا تطلب خيوط معالج الرسومات المجاورة دائماً بايتات مجاورة، مما يجبر نظام الذاكرة على خدمة المزيد من المعاملات المنفصلة. يؤدي تمكين التحميلات المدمجة إلى جعل الخيوط المتجاورة تطلب بايتات متجاورة لكي يتمكن الأجهزة من دمج قراءاتهم.

في تكوين bfloat16، أدى الدمج إلى زيادة عرض النطاق الترددي للمفاتيح من 33.8 إلى 47.9 جيجابايت/ثانية، وزيادة عرض النطاق الترددي للقيم من 42.0 إلى 61.8 جيجابايت/ثانية، وتحسين فك التشفير الشامل بنسبة 2.1% عند سياق بقيمة 3,840 رمزًا.

حزم رؤوس الاستعلام لإعادة استخدام صفوف KV

يتيح انتباه الاستعلام المجمع (Grouped-query attention) لثمانية رؤوس استعلام مشاركة رأس KV واحد. في الاختبار التجريدي، يعمل كل رأس استعلام في مجموعة شرائح (simdgroup) منفصلة، لذا تطلب جميع الرؤوس الثمانية بشكل مستقل نفس صف KV المخزن مؤقتًا. يقوم النواة المحسنة بحزم أربعة رؤوس استعلام في مجموعة خيوط (threadgroup) واحدة، والتي تحمل كل صف KV مرة واحدة وتُعيد استخدامه عبر أربعة حسابات انتباه. تتعامل مجموعة خيوط ثانية مع الرؤوس الأربعة الباقية.

تؤدي هذه التقنية، التي تسمى عادة حزمة GQA، نفس العمليات الحسابية وتنتج بايتات مخرجات متطابقة مع تقليل ثمانية طلبات KV مستقلة إلى عمليتي تحميل مشتركتين. مقابل الاختبار التجريدي غير المعقب، فقد حسنت إنتاجية فك التشفير الشاملة بنسبة 23.8% عند سياق بقيمة 32 ألف رمز.

تبديل تخطيطات الانتباه عند السياقات الطويلة

تفحص كل خطوة فك تشفير في طبقة الانتباه الكامل ذاكرة التخزين المؤقت KV الحالية. يقسم تخطيط الكتلة الثابتة تلك الذاكرة المؤقتة إلى أجزاء متساوية يمكن لمعالج الرسومات معالجتها بشكل متوازٍ. لا تكون جدولتها الإضافية مفيدة عندما تكون ذاكرة التخزين المؤقت صغرى، لكن تخطيط الكتلة الثابتة يوازن العمل بشكل أكثر تساويًا كلما نما السياق.

لهذا النموذج، يحافظ وقت التشغيل على مسار الانتباه العام أقل من 32 ألف رمز ويستخدم مسار الكتلة الثابتة عند 32 ألف رمز أو أكثر. ينطبق التبديل عندما يكون لكل رأس 256 قيمة وثمانية رؤوس استعلام تشترك في رأس KV؛ وتبقى الأشكال الأخرى على المسار العام. يوقف الاختبار التجريدي هذا التبديل ويستخدم المسار العام دائماً. أدى تمكين مسار الكتلة الثابتة إلى تحسين فك التشفير الشامل بنسبة 7.7% عند 32 ألف رمز، و27.4% عند 64 ألف رمز، و40.2% عند 128 ألف رمز.

حدود المزيد من التحسين

حسنت بعض التغييرات عملية معزولة لكنها لم تحسن الاستدلال الشامل.

أدى الاستدلال التنبئي (Speculative decoding)، الذي يستخدم نموذجًا أصغر لاقتراح رموز ليتحقق منها النموذج الكامل، إلى جعل فك التشفير دفعة-1 أبطأ بنسبة 18%. قامت عملية التحقق بمعالجة مجموعات من صفين إلى خمسة صفوف، وهو شكل غير فعال لهذه الأجهزة، وغالبًا ما اختارت الصفوف خبراء مختلفين، مما زاد من كمية بيانات أوزان الخبراء المقروءة. أدى تقليل مفردات مخرجات الصياغة إلى تحسين إنتاجية المصيغ بنسبة 4.7-5.1%، لكنه لم يجعل حلقة الاستدلال الكاملة أسرع. هذه النتيجة خاصة بحمل العمل: استخدامنا لنشر Qwen المجمع على Blackwell يستخدم الاستدلال التنبئي تحت شروط مختلفة.

شملت التجارب الأخرى تقليل إطلاق معالج الرسومات، وتداخل المراحل بأكملها، واستخدام بلاطات تعبئة أكبر، وتطبيق دمج أوسع، وتسريع الموجه، ودمج إسقاط المخرجات مع اختيار الرموز. لم تحسن أي منها حلقة الاستدلال الكاملة.

أظهرت قياسات حدود الأجهزة أيضًا هامشًا ضئيلاً متبقيًا في عمليات التعبئة وفك التشفير الرئيسية. وصلت عمليات MoE GEMM وGEMV إلى 97.9% و90.3% من أسرع معدلات قراءة للأوزان المستدامة لأنماط وصولها. أدى إزالة العمليات الحسابية من GEMV المتفرق إلى تغيير الإنتاجية بنسبة 0.2% فقط، مما يؤكد أن قراءة الأوزان وليست الحسابات هي المورد المحدد. وبالمثل، وصلت عمليات ضرب المصفوفات للتعبئة إلى 93% من حد المصفوفة النظري بشكل مستقل و80-86% داخل النماذج المختبرة.

الأداء الشامل

تحمل المقارنة الشاملة بايتات نقطة تحقق متطابقة بـ 4 بتات في كلا المحركين وتشغل طلبًا واحدًا في كل مرة على شريحة M5 Max واحدة بـ 40 نواة و128 جيجابايت. خلال كل جولة، يعمل المحركان بترتيب تناوبي لتقليل التحيز من الحمل في الخلفية والتغيرات في درجة حرارة الشريحة. نحن نقارن مقابل أسرع مسار لتوليد مباشر في لـ MLX-LM، وليس الخادم الخاص به، بحيث يركز القياس على تنفيذ النموذج بدلاً من النفقات العامة للخدمة.

يغطي المسح عشرة أطوال للأوامر للتعبئة وعشرة أطوال سياق لفك التشفير، من 256 إلى 128 ألف رمز. ترتفع إنتاجية التعبئة أولاً مع توزيع المحرك لتكاليف الإعداد الثابتة عبر رموز أكثر. تبلغ إنتاجية التعبئة ذروتها حول أمر بطول 4 آلاف رمز، ثم تنخفض لأن طبقات الانتباه الكامل العشر تؤدي عملًا أكثر كلما نما الأمر. يظل فك التشفير مسطحًا تقريبًا في السياقات القصيرة وينخفض بمجرد أن تصبح قراءة ذاكرة التخزين المؤقت KV المتنامية مهمة. المحرك المخصص أسرع في كل طول مسجل.

نظرًا لأن التنفيذ المتخصص يمكن أن يغير ترتيب عمليات الفاصلة العائمة، فقد تحققنا أيضًا من الاتساق العددي مقارنة بـ MLX-LM. في مقارنة فرض المعلم، تنبأ كلا المحركين بالرمز التالي من نفس البادئة المرجعية في كل من 192 موضعًا، مما منع الاختلافات السابقة من التأثير على المدخلات اللاحقة. كانت نسبة الحيرة (perplexity) لـ Lily أعلى بنسبة 0.04% فقط، واختارت نفس الرمز الأعلى ترتيبًا في 96.35% من المواضع المختبرة.

إنتاجية الإدخال المسبق حسب طول الموجه وإنتاجية فك الرموز حسب طول السياق لـ Qwen3.6-35B-A3B Q4، الدفعة 1، على جهاز M5 Max واحد بـ 40 نواة و128 جيجابايت. عبر عشرة أطوال من 256 إلى 128 ألف رمز، تكون ليلي أسرع في كل نقطة مسجلة: 1.12–1.42 ضعف إنتاجية الإدخال المسبق لـ MLX-LM و1.31–1.37 ضعف إنتاجية فك الرموز الخاصة به. تستخدم المقارنة أسرع مسار لتوليد مباشر في MLX-LM. يستخدم كلا المحورين الأفقيين مقاييس لوغاريتمية؛ ولا يبدأ أي من المحورين الرأسيين من الصفر.
إنتاجية التعبئة حسب طول الأمر وإنتاجية فك التشفير حسب طول السياق لنموذج Qwen3.6-35B-A3B Q4، دفعة 1، على شريحة M5 Max واحدة بـ 40 نواة و128 جيجابايت. عبر عشرة أطوال من 256 إلى 128 ألف رمز، يكون محرك Lily أسرع في كل نقطة مسجلة: 1.12-1.42 ضعف إنتاجية تعبئة MLX-LM و1.31-1.37 ضعف إنتاجية فك التشفير الخاصة به. تستخدم المقارنة أسرع مسار لتوليد مباشر في MLX-LM. يستخدم كلا المحورين الأفقيين مقاييس لوغاريتمية؛ ولا يبدأ أي من المحورين الرأسيين من الصفر.

مصمم خصيصًا لمنصة الأجهزة المحلية

إن شريحة Apple silicon ليست مجرد وحدة معالجة رسومات مركز بيانات أصغر. بل هي منصة استدلال محلية متكاملة لها خصائص الأجهزة والبرامج الخاصة بها. تمنح الذاكرة المحدة عقدة واحدة سقفًا مرتفعًا للغاية لمدى حجم النموذج والحالة التي يمكنها استيعابها. تمتص مسرعات الشبكات العصبية في M5 عمل المصفوفات الكثيفة في مرحلة التعبئة. وتتولى وحدات ALU المتجهة التعامل مع الجزء المتبقي المقيد بعرض النطاق الترددي ومنخفض إعادة الاستخدام أثناء فك التشفير.

يضيف Qwen المزيد من الفرص للتخصص: إبقاء توجيه الخبراء والحالة المتكررة على معالج الرسومات، والقضاء على الوسيطات غير الضرورية، وتداخل العمل المستقل، وإعادة استخدام بيانات KV المشتركة، وتكييف النواة مع شكل حمل العمل.

مع التحسين الخاص بالنموذج والمنصة، يمكن لجهاز Mac واحد تشغيل نموذج متفرق كبير بكفاءة. سيعمل العمل المستقبلي على توسيع التغطية عبر النماذج والشرائح وأحمال العمل الخاصة بالخدمة، وتحويل الآليات التي تم التحقق من صحتها هنا على تكوين واحد إلى سياسة وقت تشغيل أكثر عمومية.

المبدأ الأوسع هو مطابقة المحرك مع كل من بنية النموذج ومسارات الحوسبة والذاكرة المحددة للأجهزة. مع تطور نماذج الأوزان المفتوحة الرائدة والأجهزة، سيعتمد الاستدلال المحلي عالي الأداء بشكل متزايد على محركات مصممة خصيصًا لكليهما بدلاً من تلك التي تجريد اختلافاتهم.