خطوات الاستخدام
أدخل عدد الطبقات (layers): يمثل هذا العدد عدد طبقات التشفير (Transformer blocks) في النموذج. كل طبقة تحتوي على انتباه ذاتي وشبكة عصبية تغذية أمامية. يزيد عدد الطبقات من قدرة النموذج على التعلم ولكنه يزيد أيضًا من العمليات الحسابية.
أدخل أبعاد النموذج (modelDim): هو حجم المتجهات المخفية (d_model) في كل طبقة. تحدد هذه القيمة سعة النموذج وقدرته على تمثيل المعلومات. تتراوح القيم النموذجية من 512 إلى 12288 للنماذج الكبيرة.
أدخل طول التسلسل (seqLen): هو عدد الرموز (tokens) في تسلسل الإدخال. يؤثر طول التسلسل بشكل كبير على العمليات الحسابية بسبب تعقيد O(n^2) في طبقة الانتباه. كلما زاد الطول، زادت حسابات الانتباه بشكل تربيعي.
أدخل حجم المفردات (vocabSize): هو عدد الرموز الفريدة في قاموس النموذج. يستخدم هذا لحساب عمليات طبقة الإخراج (output projection) حيث يتم تحويل المتجه المخفي إلى توزيع احتمالي على المفردات. تأثيرها خطي وليس تربيعي.
يتم حساب إجمالي العمليات الحسابية (FLOPs) باستخدام الصيغة التالية: لكل طبقة، حسابات الانتباه تساوي 8 * seqLen * modelDim^2 + 4 * seqLen^2 * modelDim (للمسقطات والانتباه)، وحسابات الشبكة الأمامية تساوي 16 * seqLen * modelDim^2. ثم نضيف عمليات الإخراج: 2 * seqLen * modelDim * vocabSize. أخيرًا، نضرب عدد الطبقات في مجموع حسابات الطبقة الواحدة.
أمثلة محلولة
تطبيقات عملية على تقدير عمليات المحول الحسابية بخطوات الحل كاملة.
الحل
لحساب FLOPs، نتبع الخطوات:
1. حساب مساهمة طبقة واحدة:
- حسابات الانتباه: 8 * 1024 * (768)^2 + 4 * (1024)^2 * 768
= 8 * 1024 * 589824 + 4 * 1048576 * 768
= 8 * 603,979,776 + 4 * 805,306,368
= 4,831,838,208 + 3,221,225,472 = 8,053,063,680 FLOPs.
- حسابات الشبكة الأمامية: 16 * 1024 * (768)^2 = 16 * 1024 * 589,824 = 16 * 603,979,776 = 9,663,676,416 FLOPs.
- الإجمالي لكل طبقة: 8,053,063,680 + 9,663,676,416 = 17,716,740,096 FLOPs.
2. لعدد 12 طبقة: 12 * 17,716,740,096 = 212,600,881,152 FLOPs.
3. عمليات الإخراج: 2 * 1024 * 768 * 50257 = 2 * 1024 * 38,597,376 = 2 * 39,523,713,024 = 79,047,426,048 FLOPs.
4. الإجمالي: 212,600,881,152 + 79,047,426,048 = 291,648,307,200 FLOPs ≈ 2.91648e11 FLOPs (تدقيق: كان النص 291,622,709,120 بسبب خطأين في الضرب).
لاحظ أن هذا للمرور الأمامي فقط. للتدريب، سيكون حوالي 3 أضعاف هذا الرقم (بما في ذلك الانتشار العكسي وتحديث الأوزان).
الحل
حساب GPT-3:
1. لكل طبقة:
- الانتباه: 8 * 2048 * (12288)^2 + 4 * (2048)^2 * 12288
= 8 * 2048 * 150,994,944 + 4 * 4,194,304 * 12,288
= 8 * 309,237,645,312 + 4 * 51,539,607,552
= 2,473,901,162,496 + 206,158,430,208 = 2,680,059,592,704 FLOPs.
- الشبكة الأمامية: 16 * 2048 * (12288)^2 = 16 * 2048 * 150,994,944 = 16 * 309,237,645,312 = 4,947,802,324,992 FLOPs.
- إجمالي الطبقة: 2,680,059,592,704 + 4,947,802,324,992 = 7,627,861,917,696 FLOPs.
2. لـ 96 طبقة: 96 * 7,627,861,917,696 = 732,274,744,098,816 FLOPs.
3. الإخراج: 2 * 2048 * 12288 * 100,000 = 2 * 2048 * 1,228,800,000 = 2 * 2,516,582,400,000 = 5,033,164,800,000 FLOPs.
4. الإجمالي: 732,274,744,098,816 + 5,033,164,800,000 = 737,307,908,898,816 FLOPs ≈ 7.373e14 FLOPs.
المقارنة: نموذج GPT-3 يحتاج إلى حوالي 2528 ضعف FLOPs لنموذج GPT-2 الصغير (7.373e14 / 2.916e11 ≈ 2528). هذا يفسر التكلفة الحسابية الهائلة للنماذج الكبيرة. يُظهر هذا المثال كيف أن زيادة الأبعاد وطول التسلسل يؤديان إلى نمو هائل في العمليات الحسابية.
أمثلة محسوبة
قيم مُدخَلة ونتيجة محسوبة فعليًا بواسطة تقدير عمليات المحول الحسابية.
مثال 1: GPT-2 الصغير = 291,648,307,200 عملية
- عدد الطبقات
- 12
- بُعد النموذج
- 768
- طول التسلسل
- 1,024
- حجم المفردات
- 50,257
مثال 2: GPT-3 = 737.31 تيرافلوب لكل مرور أمامي
- عدد الطبقات
- 96
- بُعد النموذج
- 12,288
- طول التسلسل
- 2,048
- حجم المفردات
- 100,000
حالة الوحدة: 12+16+2 = 30 عملية
- عدد الطبقات
- 1
- بُعد النموذج
- 1
- طول التسلسل
- 1
- حجم المفردات
- 1
نموذج بحجم BERT: 6 طبقات و512 بُعد = 8.97 جيغافلوب
- عدد الطبقات
- 6
- بُعد النموذج
- 512
- طول التسلسل
- 128
- حجم المفردات
- 30,000
مضاعفة التسلسل: الحد التربيعي يجعل الزيادة 2.27x
- عدد الطبقات
- 12
- بُعد النموذج
- 768
- طول التسلسل
- 2,048
- حجم المفردات
- 50,257