Efficient Inference2023متوسط10 دقيقة قراءة
GQA: تدريب نماذج الانتباه متعدد الاستعلامات المُعمَّم من نقاط تفتيش الانتباه متعدد الرؤوس
GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints
Ainslie, J. · Lee-Thorp, J. · de Jong, M. · Zemlyanskiy, Y. · Lebrón, F. · Sanghai, S. — EMNLP
المشكلة
عند توليد النص رمزاً بعد رمز في نماذج المحوِّلات، تظهر مشكلة حقيقية في سرعة نقل البيانات من الذاكرة: في كل خطوة يجب قراءة جميع المفاتيح والقيم المُخزّنة. الانتباه متعدد الاستعلامات (MQA) يختصر هذه التكلفة بمشاركة زوج واحد من المفاتيح والقيم بين جميع رؤوس الاستعلام، لكنّه في الغالب يؤدي إلى تراجع ملموس في جودة النموذج ويُسبّب عدم استقرار أثناء . والمشكلة الأكبر أنّ كثيراً من النماذج الممتازة — مثل T5 وLLaMA — دُرِّبت أصلاً بالانتباه متعدد الرؤوس (MHA)، وإعادة تدريبها من الصفر بأسلوب MQA مُكلفة جداً ولا تستحق.
الإسهام
فكرتان رئيسيتان. الأولى: وصفة تُحوِّل نقاط تفتيش الانتباه متعدد الرؤوس إلى انتباه متعدد الاستعلامات باستخدام 5% فقط من تكلفة التدريب الأصلي، عبر حساب المتوسط لمصفوفات إسقاط المفاتيح والقيم. الثانية: الانتباه المُجمَّع (GQA) الذي يُقسّم رؤوس الاستعلام إلى G مجموعة، كل مجموعة تتشارك زوجاً واحداً من المفاتيح والقيم — وبذلك يقع بين MHA (حيث G=H) وMQA (حيث G=1). النتائج على T5-XXL أظهرت جودة قريبة من MHA وسرعة قريبة من MQA.
الأثر
تحوّل GQA إلى المعتمدة في معظم النماذج اللغوية الكبيرة مفتوحة الأوزان بعد 2023 — فنماذج Llama 2/3 وMistral وMixtral وGemma وDeepSeek تستخدمه جميعها. الورقة أثبتت أنّ الاختيار بين الجودة والسرعة ليس ثنائياً حادّاً: يمكنك الاحتفاظ بالجزء الأكبر من جودة الانتباه متعدد الرؤوس مع سرعة قريبة من الانتباه متعدد الاستعلامات. وصفة إعادة التدريب الجزئي أثبتت أيضاً أنّ تغيير البنية لا يتطلّب إعادة تدريب من الصفر، وهذا فتح باباً عملياً لتحديث النماذج العاملة فعلاً دون التخلّي عنها.
تخيّل مكتبة فيها 64 أميناً، كل أمين يحتفظ بخزانة ملفات خاصة به يُسجّل فيها ملاحظات عن كل طلب استعارة تعامل معه. حين يأتي طلب جديد، لا بدّ من فتح الخزانات الأربع والستين كلّها والبحث فيها — هذا ما يحدث في . هذه الخزانات تُمثّل ، وعملية فتحها في كل خطوة هي ما يجعل الاستدلال بطيئاً.
في ، نستغني عن كل الخزانات ونُبقي على خزانة واحدة مشتركة. النتيجة: سرعة هائلة، لكنّ نظام تصنيف واحد لا يستطيع التقاط كل الفروق الدقيقة — وبعض الطلبات ستحصل على إجابات غير دقيقة.
GQA يتّخذ مساراً وسطاً: يُقسّم الأمناء الـ 64 إلى 8 فِرَق، كل فريق من 8. كل فريق يتشارك خزانة واحدة. النتيجة: 8 خزانات متخصّصة بدلاً من 64 أو واحدة، أي تقليص التخزين 8 مرات مع الاحتفاظ بمعظم المعرفة. هذه هي الفكرة ببساطة: خزانات أقل، وإجابات بالجودة نفسها تقريباً.
عنق الزجاجة: سرعة نقل البيانات من الذاكرة أثناء التوليد التسلسلي
حين يُولّد نصاً رمزاً بعد رمز، لا يُعيد حساب الانتباه من الصفر في كل مرة، بل يحتفظ بنسخة مُخزّنة من المفاتيح والقيم لكل الرموز السابقة فيما يُعرف بـذاكرة المفاتيح والقيم المؤقتة. في كل خطوة توليد جديدة، يقرأ النموذج جميع هذه المتجهات من الذاكرة ليحسب مع الاستعلام الجديد.
المشكلة هنا ليست في القدرة الحسابية — معالجات الرسوميات الحديثة لديها قدرة حسابية أكثر من كافية. المشكلة الحقيقية هي في : أي مدى سرعة نقل البيانات بين ونوى المعالجة. في الانتباه متعدد الرؤوس القياسي، تُخزّن الذاكرة المؤقتة متجه مفتاح ومتجه قيمة لكل رأس في كل طبقة لكل رمز. في نموذج بسبعين مليار معامل و64 رأساً وسياق بطول 8 آلاف رمز، قد تستهلك هذه الذاكرة وحدها عدة غيغابايتات — ويجب قراءتها بالكامل في كل خطوة توليد.
عام 2019 اقترح نوام شازير الانتباه متعدد الاستعلامات: بدلاً من H رأس مستقل للمفاتيح والقيم، نكتفي بزوج واحد يتشاركه جميع رؤوس الاستعلام الـ H. هذا يُقلّص الذاكرة المؤقتة بمعامل H (أي 64 مرة مثلاً). التسريع كبير فعلاً، لكنّ تراجع الجودة حقيقي أيضاً — وفوق ذلك يُسبّب MQA عدم استقرار في التدريب، خاصة مع المدخلات الطويلة.
الفكرة الأولى: إعادة التدريب الجزئي — حوِّل البنية ولا تبدأ من الصفر
تدريب من الصفر يُكلّف ملايين الدولارات. إذا كانت لديك عالية الجودة مُدرّبة بالانتباه متعدد الرؤوس، فالتخلّي عنها لإعادة التدريب بـ MQA إهدارٌ لا مبرّر له. ورقة GQA تقترح وصفة إعادة تدريب جزئي من خطوتين:
الخطوة الأولى — تحويل نقطة التفتيش. الفكرة بسيطة: نأخذ مصفوفات إسقاط المفاتيح والقيم الـ H المستقلة من النموذج الأصلي، ونحسب لها لدمجها في العدد المطلوب من الرؤوس. في حالة MQA ندمج كل مصفوفات المفاتيح في واحدة وكذلك القيم. في حالة GQA-G، ندمج كل مجموعة من H/G رؤوس معاً. لماذا المتوسط تحديداً؟ لأنه يحتفظ بأكبر قدر من المعلومات التي تعلّمها النموذج — وقد أظهرت الورقة أنه يتفوّق على اختيار رأس واحد أو البدء بأوزان عشوائية.
الخطوة الثانية — متابعة التدريب. نُكمل لنقطة التفتيش المُحوَّلة بنسبة صغيرة α من خطوات التدريب الأصلية (الورقة استخدمت α = 0.05 أي 5%). هذا يمنح النموذج فرصة للتكيّف مع بنية مشاركة الأوزان الجديدة. النتيجة: نموذج أسرع بكثير في الاستدلال مع تراجع طفيف في الجودة — والتكلفة الإجمالية لا تتجاوز 5% من ميزانية التدريب الأصلية.
الفكرة الثانية: الانتباه المُجمَّع — النقطة المثلى بين السرعة والجودة
الملاحظة الجوهرية هنا أنّ القفزة من الانتباه متعدد الرؤوس (H زوج من المفاتيح والقيم) إلى الانتباه متعدد الاستعلامات (زوج واحد فقط) قفزة عنيفة. (GQA) يطرح حلاً وسطاً قابلاً للضبط: نُقسّم رؤوس الاستعلام الـ H إلى G مجموعة، وكل مجموعة تتشارك زوجاً واحداً من المفاتيح والقيم. بهذا نحصل على G زوج إجمالاً.
الترميز GQA-G يعني انتباهاً مُجمَّعاً بعدد G مجموعة. لاحظ حالتين خاصتين: GQA-1 يُكافئ MQA (مجموعة واحدة وزوج مشترك واحد)، وGQA-H يُكافئ MHA (كل رأس استعلام يُشكّل مجموعة مستقلة). أي قيمة بينهما تُعطيك تكويناً مختلفاً من GQA.
حجم ذاكرة المفاتيح والقيم المؤقتة يتناسب طردياً مع عدد أزواج المفاتيح والقيم. لذا GQA-G يُقلّص هذه الذاكرة بمعامل H/G مقارنة بـ MHA. مثلاً: إذا كان H=64 وG=8، تحصل على تقليص بمقدار 8 مرات — أي 8 مرات أقل في حجم البيانات التي يجب نقلها من الذاكرة في كل خطوة توليد.
لماذا يزداد هذا أهميةً في النماذج الأكبر؟ لأنّ النماذج الأكبر تملك عدداً أكبر من الرؤوس، فعند تطبيق MQA (حيث G=1) تكون الخسارة أشد. نموذج بـ 64 رأساً يفقد 64 ضعفاً من السعة التمثيلية، بينما نموذج بـ 8 رؤوس يفقد 8 أضعاف فقط. GQA يُبقي نسبة التقليص ثابتة بغض النظر عن حجم النموذج.
وصفة إعادة التدريب الجزئي بالكود
مبسَّط لإظهار الفكرة — ليس التنفيذ الحقيقي.
import numpy as np
def convert_mha_to_gqa(key_heads, value_heads, num_groups):
"""حوّل H رأس مفاتيح/قيم إلى G رأس مُجمَّع بالمتوسط التجميعي.
key_heads: (H, d_model, d_k) — مصفوفة إسقاط واحدة لكل رأس
value_heads: (H, d_model, d_k)
num_groups: G — عدد مجموعات المفاتيح والقيم المطلوب
"""
H = key_heads.shape[0]
heads_per_group = H // num_groups
# نحسب المتوسط لكل مجموعة رؤوس وندمجها في رأس واحد
grouped_keys = np.stack([
key_heads[g * heads_per_group : (g+1) * heads_per_group].mean(axis=0)
for g in range(num_groups)
]) # (G, d_model, d_k)
grouped_values = np.stack([
value_heads[g * heads_per_group : (g+1) * heads_per_group].mean(axis=0)
for g in range(num_groups)
]) # (G, d_model, d_k)
return grouped_keys, grouped_values
# مثال: نموذج بـ 64 رأساً → GQA بـ 8 مجموعات
# كل مجموعة تدمج 8 رؤوس في رأس واحد → تقليص ذاكرة KV ثمان مرات
# بعدها نُكمل التدريب المسبق بنسبة 5% من الخطوات الأصليةالتجارب: جودة تُنافس MHA وسرعة تُقارب MQA
أجرى المؤلفون تجاربهم على نموذجَي T5 Large وT5 XXL بالانتباه متعدد الرؤوس، بالإضافة إلى نسخ من T5-XXL أُعيد تدريبها جزئياً بـ MQA وGQA-8 (بنسبة α = 0.05). شملت المهام (على CNN/DailyMail وarXiv وPubMed وMediaSum وMultiNews) و (WMT) و (TriviaQA).
النتيجة الأبرز: GQA-8-XXL حقّق متوسط 47.1 نقطة — يكاد يُطابق 47.2 لنموذج MHA-XXL — لكن بزمن استدلال 0.28 ثانية للعينة مقابل 1.51 ثانية. أي تسريع بمعامل 5.4 مقابل خسارة 0.1 نقطة فقط في الجودة. في المقابل، MQA-XXL سجّل 46.6 نقطة بزمن 0.24 ثانية — أسرع قليلاً لكن مع تراجع أكبر بمقدار 0.6 نقطة.
والنقطة اللافتة: نموذج MQA-XXL المُعاد تدريبه (46.6 نقطة، 0.24 ثانية) تفوّق في السرعة والجودة معاً على النموذج الأصغر MHA-Large (46.0 نقطة، 0.37 ثانية). هذا يعني أنّ إعادة التدريب الجزئي لنموذج كبير مع مشاركة المفاتيح والقيم قد تتفوّق على تدريب نموذج أصغر بانتباه متعدد الرؤوس كامل.
تجارب الاستئصال: ما العوامل الأكثر تأثيراً؟
طريقة تحويل نقطة التفتيش: المتوسط التجميعي يتفوّق على اختيار رأس واحد، واختيار رأس واحد يتفوّق على التهيئة العشوائية. السبب بديهي: حساب المتوسط يجمع المعلومات من كل الرؤوس بدلاً من إهمالها.
نسبة إعادة التدريب: الملفت أنّ GQA يُعطي أداءً مقبولاً فور تحويل نقطة التفتيش، حتى قبل أي إعادة تدريب — بينما MQA ينهار تماماً بدون إعادة تدريب. كلا الأسلوبين يستفيد من 5% إعادة تدريب، والعوائد تتناقص عند 10%. ما يعنيه هذا عملياً أنّ GQA أمتن بكثير تجاه عملية التحويل.
عدد المجموعات: الانتقال من مجموعة واحدة (MQA) إلى 8 مجموعات لا يُضيف تقريباً أي عبء على الاستدلال، لأنّ ذاكرة المفاتيح والقيم تكون صغيرة أصلاً مقارنة بحجم أوزان النموذج. لكنّ الانتقال من 8 إلى 64 (أي العودة إلى MHA الكامل) يرفع التكلفة بشكل متصاعد. الورقة اختارت 8 مجموعات كنقطة توازن مناسبة، وقد أصبح هذا الرقم هو المعيار السائد في النماذج التي تملك 64 رأس استعلام.
لماذا تبنّت الصناعة GQA
2019
الانتباه متعدد الاستعلامات (MQA) — شازير
اقترح مشاركة زوج واحد من المفاتيح والقيم بين كل رؤوس الاستعلام. تسريع هائل لكن مع خسارة ملحوظة في الجودة. اعتُمد في PaLM.
2023
GQA — أينسلي وآخرون
الانتباه المُجمَّع مع وصفة إعادة التدريب الجزئي. جودة تُقارب MHA وسرعة تُقارب MQA. أثبت أنّ هناك نقطة توازن مثلى بين الجودة والسرعة.
2023
Llama 2 يعتمد GQA
نموذج Llama 2 70B من Meta استخدم GQA بـ 8 أزواج مفاتيح وقيم مقابل 64 رأس استعلام. أرسى سابقة للنماذج مفتوحة الأوزان.
2023
Mistral 7B يعتمد GQA
Mistral 7B جمع بين GQA والانتباه بالنافذة المنزلقة، وأثبت أنّ GQA فعّال حتى في النماذج الأصغر حجماً.
2024
DeepSeek-V3 وLlama 3 يُكمِلان المسار
GQA أصبح المعيار. DeepSeek-V3 طوّر الفكرة أبعد عبر الانتباه الكامن متعدد الرؤوس (MLA) الذي يضغط المفاتيح والقيم بشكل أكثر حدّة.
الصورة الأشمل
GQA فكرة بسيطة بشكل لافت — مجرد مشاركة رؤوس المفاتيح والقيم في مجموعات بدلاً من المشاركة الكاملة أو الإبقاء على الاستقلالية التامة — لكنّ تأثيرها كبير تحديداً لأنها تُعالج عنق الزجاجة الفعلي في تشغيل النماذج: سرعة نقل البيانات من الذاكرة، وليس عدد العمليات الحسابية. خدمة النماذج اللغوية الكبيرة الحديثة مقيّدة بالذاكرة أثناء التوليد، وGQA يُقلّص مباشرةً حجم البيانات التي يجب قراءتها في كل خطوة.
وصفة إعادة التدريب الجزئي لا تقلّ أهمية. أثبتت للمجتمع البحثي أنّه بالإمكان تركيب تحسينات الكفاءة على نماذج قائمة دون الحاجة لإعادة تدريبها من الصفر. هذا فتح الباب أمام فئة كاملة من التحسينات اللاحقة — مثل الانتباه المُصفّح و و ذاكرة المفاتيح والقيم — وجميعها تتعامل مع أوزان النموذج الحالي كنقطة انطلاق لا كقيد.
GQA أيضاً يتكامل جيداً مع تقنيات الكفاءة الأخرى. الانتباه المُصفّح يُدير الذاكرة المؤقتة بكفاءة أعلى في أنظمة الخدمة. يُقلّل العبء الحسابي للانتباه. التكميم يضغط الذاكرة المؤقتة أكثر. والنقطة المهمة أنّ GQA متعامد مع كل هذه التقنيات — أي يمكن تطبيقها جميعاً معاً دون تعارض.
المرجعAinslie, Lee-Thorp, de Jong, Zemlyanskiy, Lebrón, Sanghai. GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints. EMNLP, 2023.
مصطلحات هذه الورقة
- انتباه الاستعلام المُجمَّعGrouped Query Attention
- انتباه الاستعلام المتعدّدMulti-Query Attention
- الانتباه المتعدد المساراتMulti-Head Attention
- ذاكرة المفاتيح والقيمKV Cache
- الاستدلالInference
- إعادة التدريب الجزئيUptraining
- نطاق الذاكرةMemory Bandwidth
- التجميع بالمتوسطMean Pooling
- نقطة التفتيشCheckpoint
- آلية الانتباهAttention
- مفكّ الترميزDecoder
- الانتباه الذاتيSelf-Attention
- الانتباه التبادليCross-Attention
- الضبط الدقيقFine-Tuning