الفصل 7 — استراتيجيات التجميع المتقدمة
المقالة السابعة من الجولة الفصلية لـ LLM Primer VI: توسيع أنظمة الذكاء الاصطناعي. الفصل الذي يُبيِّن أن التجميع ليس تحسيناً بل هو الحركة الحاملة التي تجعل فك التشفير المُقيَّد بعرض النطاق قابلاً للتناول — وأن الدُّفعة فعلٌ لا اسمٌ.
لماذا يوجد هذا الفصل
خطوةُ فك تشفير واحدة تقرأ عشرات الغيغابايتات من الأوزان من HBM لتُنتج رمزاً واحداً. إذا كانت GPU تُدفِّق تلك الأوزان على أية حال، فإنها تستطيع إنتاج رمز لطلبات كثيرة في نفس الخطوة بكلفة هامشية شبه صفرية. التجميع إذاً ليس تحسيناً بالمعنى العادي — إنه الطريقة الوحيدة لجعل فك التشفير مقبولاً اقتصادياً على عتاد مُقيَّد بعرض نطاق الذاكرة. لكن الطريقة البديهية للتجميع تنهار عند التماس مع العالم الحقيقي، لأن الطلبات ذات أطوال مختلفة وتنتهي في أوقات مختلفة. يمشي الفصل 7 من المخطط الساذج الذي يعمل تقريباً إلى مُجَدوِل مستوى التكرار الذي تُشغِّله محركات الإنتاج فعلاً، ويُسمِّي الدَّين الذي يُنشئه ذلك المُجَدوِل ليدفعه الفصل 8.
7.1 التجميع الساكن يهزمه مشكلةُ الأسرع انتهاءً
التجميع الساكن هو ما يكتبه الجميع أولاً: اجمع الطلبات حتى حجم الدُّفعة B أو مهلة، شغِّل التعبئة الأمامية على الدُّفعة كاملةً بطول S_max، شغِّل حلقة فك تشفير حتى يُصدر كل تسلسل في الدُّفعة EOS. الكلفتان فادحتان مُدمَجتَين. الحشو — مُوجِّه بطول 50 رمزاً في نفس دُّفعة مُوجِّه بطول 4,000 رمز يدفع 80× من عمل التعبئة الأمامية الذي يحتاجه. الأسرع انتهاءً — تعمل حلقة فك التشفير حتى ينتهي كل تسلسل، فتقضي دُّفعةٌ فيها طلب 20 رمزاً وطلب 2,000 رمز 99 بالمئة من وقتها بـ 31 مكاناً تُنتج رموزاً ستُرمى. الإنتاجية المتوسطة تبدو مقبولة وزمن استجابة الذيل يُهيمن عليه أي طلب طويل صادف أن تحمله الدُّفعة. التجميع الديناميكي (مهلة متغيِّرة، السماح للوافدين المتأخرين إلى الدُّفعة المُعلَّقة) يُخفِّف الانتظار لكنه لا يُغيِّر المخطط الأساسي؛ يرث نفس مشكلة الأسرع انتهاءً بمجرد بدء فك التشفير.
7.2 التجميع المستمر يُجَدوِل لكل تكرار لا لكل طلب
التجميع المستمر — الجدولة على مستوى التكرار من Orca، والتجميع أثناء الطيران من NVIDIA، «الحيلة المركزية» لـ vLLM وTGI — هو تغيير المُتغيِّر. بدل الالتزام بدُفعة لمُدَّة التوليد، يُعيد المُجَدوِل النظر في تركيبة الدُّفعة في كل خطوة فك تشفير. بعد كل خطوة: تُغادر التسلسلات المنتهية أماكنها وتُحرِّر KV الخاصة بها؛ تدخل تسلسلات جديدة من الطابور إلى الأماكن المُحرَّرة؛ تعمل خطوة فك التشفير المشتركة على المجموعة النشطة الجديدة. خاصيّتان لفك تشفير LLM تجعلان هذا ممكناً. كل خطوة فك تشفير هي بنيويّاً نفس العملية — النواة لا تعبأ بأي تسلسل في المكان 7 مقابل المكان 11. وكل تسلسل يحمل ذاكرة KV الخاصة به باستقلال، فتصبح ذاكرته متاحة ببساطة عندما يغادر. تصير وحدةُ العدل هي التكرار لا الطلب: ينتهي طلب من 20 رمزاً بعد نحو 20 تكراراً بغض النظر عمَّن معه في الدُّفعة، ويشغل طلب من 2,000 رمز مكاناً واحداً بقدر ما يحتاج دون احتجاز الآخرين. على حركة مرور طويلة الذيل حقيقية — مزائج من دورات دردشة قصيرة وإكمالات RAG طويلة — يرتفع استخدام GPU على نموذج 70B من نطاق 10–20 بالمئة النموذجي للتجميع الساكن إلى 60–80 بالمئة، وينضغط زمن استجابة p99 بشدة.
7.3 التعبئة الأمامية المُجزَّأة تُوحِّد التعبئة مع فك التشفير على الرقاقة نفسها
لا يزال التجميع المستمر يترك توتُّراً. الوافدون الجدد يحتاجون التعبئة الأمامية، وهي مُقيَّدة بالحوسبة وتُفضِّل تسلسلات طويلة لكل تمرير. التسلسلات أثناء الطيران تحتاج فك التشفير، وهو مُقيَّد بعرض نطاق الذاكرة ويُفضِّل دُفعات عريضة. تشغيل تعبئة أمامية كاملة على مُوجِّه جديد بطول 4,000 رمز في نفس التمرير الأمامي مع خطوة فك التشفير لثلاثين تسلسلاً جارياً إما يُؤخِّر فك التشفير الجاري (TTFT سيّئ للمستخدمين الحاليين) أو يُؤخِّر التعبئة الأمامية للوافد الجديد (TTFT سيّئ للمستخدم الجديد). التعبئة الأمامية المُجزَّأة تُقسِّم التعبئة إلى قطع — قل 512 رمزاً في المرة — وتُداخل تلك القطع مع خطوات فك التشفير للتسلسلات النشطة. يحمل التمرير الأمامي الواحد الآن بعض عمل التعبئة الجديدة وبعض عمل فك التشفير الجاري في آن، ويتشارك الطوران نفس تدفُّقات الأوزان. تمتصُّ سِمَةُ التعبئة الأمامية المُقيَّدة بالحوسبة الحساباتِ؛ ويُطفَّى طلبُ فك التشفير على عرض النطاق على مزيدٍ من العمل المفيد لكل بايت. يتوقَّف الطوران عن التنافُر على رقاقة واحدة. الحالة المتبقية — ما يكفي من حركة المرور حيث لا يزالان يتصارعان — هي الإعداد للتخديم المُفصَّل في الفصل 12.
ما يُمهِّد له الفصل 7
يُنجز التجميع المستمر عمله، ويُكشِف في ذلك عن ذاكرة KV باعتبارها القيد المُلزِم على التزامن. كل تسلسل نشط يحمل KV الخاصة به، مُقاسة بنسبة إلى طوله الحالي؛ تدخل التسلسلات وتخرج في كل خطوة؛ لا يستطيع المحرك أن يعرف مسبقاً كم ستطول أي منها. تخطيطٌ ساذج بشريحة لكل مكان يُعيد أغلب ربح التجميع. يُعبر الفصل 8 بحل نظام التشغيل: قسِّم الذاكرة إلى كتل فيزيائية صغيرة، افصلها عن مواقع الرموز المنطقية بجدول صفحات، ودع سياسة إخلاء تسترد الكتل أو تُشاركها عبر التسلسلات. PagedAttention هو الحركة التي تجعل مشكلة KV للتجميع المستمر قابلة للتناول.
التالي — الفصل 8: الجيل التالي من إدارة ذاكرة KV. PagedAttention وإخلاء H2O وInfiniGen واقتصاد التخزين المؤقت للبادئات.