كم من الذاكرة سيستهلك النموذج: كيف تغيّر GQA والنوافذ وMLA حجم KV-cache
قد يشغل نموذجان بعدد المعاملات نفسه ذاكرة مختلفة تمامًا عند الاستدلال. والحاسم هنا بنية الانتباه: عدد رؤوس key-value في كل طبقة، وما يُخزَّن لكل توكن، وعدد التوكنات السابقة التي تتذكرها الطبقة. هذه المعلمات مدمجة في الـcheckpoint، لذلك ينبغي حسابها من ملف الإعدادات قبل النشر، لا الاعتماد على بيئة التشغيل.
معالج بواسطة الذكاء الاصطناعي من Machine Learning Mastery؛ بتحرير Hamidun News
موقف مألوف: شغّلت نموذجًا جاهزًا، واتسعت أوزانه بسهولة في ذاكرة 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)، لكنه لا يشمل الأوزان والتنشيطات وتكاليف المخصِّص الإضافية. الأرقام أعلاه توضيحية، ومع نموذج حقيقي ضع القيم من ملف إعداداته.
- 12 نوفمبر 2026وكلاء الذكاء الاصطناعي يعيدون فحص أكثر من 2000 ورقة بحثية في ICML 2026 ويكشفون أخطاء فاتت المراجعين
- 12 نوفمبر 2026ثماني دول وOpenAI وAnthropic تعد بـ«زر إيقاف طارئ» لنماذج الذكاء الاصطناعي، لكن بلا مواعيد ولا غرامات
- 12 نوفمبر 2026Hugging Face تحذّر: موجة الاختراقات قد تجعل الذكاء الاصطناعي مفتوح المصدر أقل انفتاحًا
- 12 نوفمبر 2026OpenAI تبني «غرفة التحكم»: مفتاح إيقاف طارئ للنماذج التي خرجت من البيئة المعزولة
أسئلة وأجوبة حول الخبر
أي نوع من الانتباه؟
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 ГиБ.
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.
أهم ما في عالم الذكاء الاصطناعي — مرة كل أسبوع
سبع قصص مهمة فعلاً هذا الأسبوع، مختارة بعناية. بلا ضجيج ولا بيانات صحفية.
تم! تحقق من بريدك للتأكيد.