بث مباشر 18.11 · الدفعة 318 نوفمبر، 19:00 بتوقيت موسكو — ورشة عملية مجانية لوكلاء الذكاء الاصطناعي · الدفعة 3 تبدأ 23.11ورشة 18 نوفمبر ←الدفعة 3 (23.11)
إصدارتحليل · على الرادارMachine Learning Mastery→ المصدر

كم من الذاكرة سيستهلك النموذج: كيف تغيّر GQA والنوافذ وMLA حجم KV-cache

قد يشغل نموذجان بعدد المعاملات نفسه ذاكرة مختلفة تمامًا عند الاستدلال. والحاسم هنا بنية الانتباه: عدد رؤوس key-value في كل طبقة، وما يُخزَّن لكل توكن، وعدد التوكنات السابقة التي تتذكرها الطبقة. هذه المعلمات مدمجة في الـcheckpoint، لذلك ينبغي حسابها من ملف الإعدادات قبل النشر، لا الاعتماد على بيئة التشغيل.

معالج بواسطة الذكاء الاصطناعي من Machine Learning Mastery؛ بتحرير Hamidun News
كم من الذاكرة سيستهلك النموذج: كيف تغيّر GQA والنوافذ وMLA حجم KV-cache
المصدر: Machine Learning Mastery. كولاج: Hamidun News.
استمع للمقال
بطاقة الحقائق والأرقام
المعيارالتفاصيل
المصدر الأصليMachine Learning Mastery ↗
رئيس التحرير
حقيقة رئيسية #1يقلّص GQA بثمانية رؤوس KV بدلًا من 32 حجم الكاش 4 مرات، بينما يقلّصه MQA 32 مرة
حقيقة رئيسية #2تحدّ النافذة المنزلقة من كاش الطبقة، لكن الطبقات ذات الانتباه الكامل تواصل النمو
حقيقة رئيسية #3لا يقلّل FlashAttention وpaged attention الحجم المنطقي للكاش

موقف مألوف: شغّلت نموذجًا جاهزًا، واتسعت أوزانه بسهولة في ذاكرة GPU، لكن الخادم ينهار بخطأ out-of-memory عند الطلب المتوازي العاشر. المشكلة ليست في حجم النموذج، بل في KV-cache. يتحدد حجمه بتصميم طبقة الانتباه، ولم يعد بإمكانك اختيار ذلك، فالقرار اتُّخذ في مرحلة التدريب.

الـcheckpoint يثبّت البنية

يحدد ملف الإعدادات والأوزان عدد رؤوس الاستعلام ورؤوس key-value، وحجم الرأس، ونمط الانتباه المحلي، وأبعاد التمثيل الكامن. إن استبدال MHA بـGQA بعد التدريب يعني تغيير النموذج، ومن المرجح أن تحتاج إلى استعادة الجودة بمزيد من التدريب. أما استبدال الانتباه الكامل بنافذة منزلقة فيعني التخلص من سياق اعتاد النموذج على رؤيته.

لذلك تكون الممارسة كالتالي: افتح ملف الإعدادات (في Hugging Face هو AutoConfig)، وانظر إلى عدد الطبقات، وnum_attention_heads، وnum_key_value_heads، وhead_dim، والحقول المتعلقة بـsliding window. ثمة تحفظ واحد: قد يكون حقل النافذة موجودًا في الإعدادات لكنه معطّل بعلم مجاور، فتحقق من القيمة ومن العلم معًا. وتتناوب بعض النماذج بين طبقات محلية وعامة، والمرجع الحاسم دائمًا هو كود التنفيذ.

كيف تحسب الكاش على سبيل التقدير السريع

الذاكرة الدائمة تعيش بين خطوات فك الترميز، وهي التي تحدد عدد الطلبات التي تخدمها في وقت واحد. أما المخازن المؤقتة، مثل بلاطات attention-scores، فيمكن تحريرها بعد الطبقة. وصيغة الكاش القياسي هي: 2 × عدد البايتات لكل عنصر × الطبقات × التوكنات × عدد رؤوس KV × حجم الرأس. يعني العدد 2 المفاتيح زائد القيم. وللدفعة نضرب في حجمها.

لنأخذ نموذجًا افتراضيًا: 32 طبقة، 32 رأسًا، head_dim يساوي 128، fp16، وسياق 8192 توكن. مع MHA التقليدي يشغل الطلب الواحد 4 ГиБ. وإذا كان النموذج يعتمد GQA بثمانية رؤوس KV فالحجم 1 ГиБ. أما مع MQA برأس KV واحد فيبلغ 128 МиБ فقط. والفرق بين «يتسع 4 طلبات» و«يتسع 16» ينشأ دون تغيير عدد المعاملات.

نحسب المخططات المختلطة طبقةً بطبقة. لنفترض أن في نموذج GQA نفسه ذي 32 طبقة، 24 طبقة محلية بنافذة 4096 و8 طبقات كاملة، والسياق 32 768 توكن. الانتباه الكامل في كل الطبقات يعطي 4 ГиБ، أما المختلط فنحو 1,4 ГиБ. لكن الكاش الإجمالي هنا غير محدود: فكل توكن جديد يضيف ذاكرة في الطبقات الكاملة. إنه ينمو بوتيرة أبطأ، لكنه لا يتوقف عن النمو.

أي نوع من الانتباه؟

  • MHA: لكل رأس استعلام زوج مفتاح-قيمة خاص به. هذا أغلى كاش، وعند فك الترميز هو أيضًا الأثقل في قراءة الذاكرة.
  • MQA وGQA: تتشارك رؤوس الاستعلام رؤوس KV مشتركة. وينخفض الكاش ومعاملات إسقاطات K/V بالنسبة نفسها التي انخفض بها عدد رؤوس KV.
  • النافذة المنزلقة: تتذكر الطبقة آخر W توكن فقط، ويمكن حفظ الكاش في مخزن حلقي ثابت الحجم. وتُحسب المواضع هنا بحسب الرقم المنطقي للتوكن، لا بحسب خانة المخزن.
  • MLA: بدلًا من المفاتيح والقيم الكاملة يُخزَّن متجه كامن مضغوط. الكاش أصغر، لكن حسابات فك الترميز أكثر. وهذا مفيد عادةً لأن فك الترميز يصطدم بعرض نطاق الذاكرة، لا بالحسابات.

لا يجوز إدخال MLA في صيغة MHA عبر num_key_value_heads، لأن الموترات المخزَّنة مختلفة. احسب بحسب ما يخزّنه التنفيذ فعليًا، واعتمد أنوية (kernels) متخصصة.

ما الذي يمكن أن يغيّره وقت التشغيل

من المفيد التمييز بين أربعة أسئلة: من ينظر إلى من (انتباه كامل أم نافذي)، وكم تمثيل KV جرى تعلّمه (MHA/GQA/MQA)، وما الذي يُخزَّن مؤقتًا (موترات KV أم التمثيل الكامن)، وكيف يُنفَّذ ذلك. الثلاثة الأولى يحسمها الـcheckpoint، والرابع يحسمه المحرّك. يحسب FlashAttention الانتباه الدقيق على شكل بلاطات ولا يكتب مصفوفات الدرجات الضخمة في الذاكرة: فتنخفض المخازن المؤقتة وحركة البيانات، بينما يبقى الكاش المنطقي وعدد رؤوس KV على حالهما. ويخزّن paged attention الكاش في كتل لا يلزم أن تكون متجاورة، ويحسّن التخصيص والمشاركة، لكنه بحد ذاته لا يقلّل حجم الكاش. ويجب على المخصِّص هنا أن يلتزم بقاعدة الإخلاء الخاصة بالنموذج: لا يجوز التخلص من السجلات القديمة في طبقة كاملة لمجرد أن الطبقات المجاورة نافذية.

الخلاصة العملية

قبل اختيار الـcheckpoint اقرأ ملف الإعدادات وقدّر الكاش للسياق المستهدف وحجم الدفعة. وإذا تقارب مرشحان في الجودة، فاختر الأرخص في رؤوس KV أو النوافذ: فهذا يتحول مباشرة إلى عدد الطلبات المتزامنة على البطاقة الواحدة. ولا تنسَ الـpadding: ففي الدفعات الكثيفة قد تدفع ثمن مواضع فارغة، بينما يتفادى تنفيذ ragged ذلك.

وقيد هذه الطريقة بسيط: الحساب يعطي تقديرًا للذاكرة الدائمة (persistent)، لكنه لا يشمل الأوزان والتنشيطات وتكاليف المخصِّص الإضافية. الأرقام أعلاه توضيحية، ومع نموذج حقيقي ضع القيم من ملف إعداداته.

القصة

أسئلة وأجوبة حول الخبر

أي نوع من الانتباه؟

MHA: لكل رأس استعلام زوج مفتاح-قيمة خاص به. هذا أغلى كاش، وعند فك الترميز هو أيضًا الأثقل في قراءة الذاكرة. MQA وGQA: تتشارك رؤوس الاستعلام رؤوس KV مشتركة. وينخفض الكاش ومعاملات إسقاطات K/V بالنسبة نفسها التي انخفض بها عدد رؤوس KV. النافذة المنزلقة: تتذكر الطبقة آخر W توكن فقط، ويمكن حفظ الكاش في مخزن حلقي ثابت الحجم. وتُحسب المواضع هنا بحسب الرقم المنطقي للتوكن، لا بحسب خانة المخزن. MLA: بدلًا من المفاتيح والقيم الكاملة يُخزَّن متجه كامن مضغوط. الكاش أصغر، لكن حسابات فك الترميز أكثر.

ما أبرز التفاصيل حول الـcheckpoint يثبّت البنية؟

يحدد ملف الإعدادات والأوزان عدد رؤوس الاستعلام ورؤوس key-value، وحجم الرأس، ونمط الانتباه المحلي، وأبعاد التمثيل الكامن. إن استبدال MHA بـGQA بعد التدريب يعني تغيير النموذج، ومن المرجح أن تحتاج إلى استعادة الجودة بمزيد من التدريب. أما استبدال الانتباه الكامل بنافذة منزلقة فيعني التخلص من سياق اعتاد النموذج على رؤيته. لذلك تكون الممارسة كالتالي: افتح ملف الإعدادات (في Hugging Face هو AutoConfig)، وانظر إلى عدد الطبقات، وnum_attention_heads، وnum_key_value_heads، وhead_dim، والحقول المتعلقة بـsliding window.

ما أبرز التفاصيل حول كيف تحسب الكاش على سبيل التقدير السريع؟

الذاكرة الدائمة تعيش بين خطوات فك الترميز، وهي التي تحدد عدد الطلبات التي تخدمها في وقت واحد. أما المخازن المؤقتة، مثل بلاطات attention-scores، فيمكن تحريرها بعد الطبقة. وصيغة الكاش القياسي هي: 2 × عدد البايتات لكل عنصر × الطبقات × التوكنات × عدد رؤوس KV × حجم الرأس. يعني العدد 2 المفاتيح زائد القيم. وللدفعة نضرب في حجمها. لنأخذ نموذجًا افتراضيًا: 32 طبقة، 32 رأسًا، head_dim يساوي 128، fp16، وسياق 8192 توكن. مع MHA التقليدي يشغل الطلب الواحد 4 ГиБ. وإذا كان النموذج يعتمد GQA بثمانية رؤوس KV فالحجم 1 ГиБ.

ZK
جمال حميدون — مدير المنتجات في Alpina Digital ومدير منتج AlpinaGPT. يبني منتجات الذكاء الاصطناعي منذ 2019. بدأ Hamidun News كمشروع شخصي ثم أصبح مُجمِّعًا إنتاجيًا بأكثر من 6000 قارئ.
✦ Unified AI Workspace · Nomad

Test Frontier LLMs & Autonomous Agents in One Workspace

Run Claude Opus 5.5, GPT-6, Gemini 3.1, and DeepSeek side-by-side in Nomad AI (nomadnet.ai) — unified model routing, deep research, and multimodal workflows under one subscription.

Try Nomad AI →Launch Nomad Agent
ما رأيك؟
جارٍ تحميل التعليقات…