الإشارة، الأس، المانتيسا
تنسيق IEEE 754 للأعداد الصحيحة العائمة
يخزن كل عدد صحيح عائم ثلاث حقول:
- بت الإشارة (1 بت): موجب أو سالب
- الأس (E بتات): مقياس السعة، قوة عددية صحيحة لـ 2
- المانتيسا (M بتات): الدقة الكسرية، عدد بين 1.0 و ~2.0
إجمالي البتات = 1 + E + M. القيمة تساوي تقريباً (-1)^sign (1 + mantissa) 2^(exponent - bias).
خاصيتان مهمتان للتدريب:
المدى الديناميكي = 2^(2^E) (تقريباً). المزيد من بتات الأس يعني تمثيل أرقام أصغر وأكبر دون تجاوز.
الدقة = 2^M قيمة مميزة لكل قوة من قوى 2. المزيد من بتات المنتيسا تعني تمثيلًا أدق بين القوى المتتالية لـ 2.
الثلاث صيغ
| الصيغة | إجمالي البِتات | الإشارة | الأس | المنتيسا | النطاق الديناميكي | الدقة |
|---|---|---|---|---|---|---|
| FP32 | 32 | 1 | 8 | 23 | ~10^-38 إلى ~10^38 | ~7 أرقام |
| FP16 | 16 | 1 | 5 | 10 | ~10^-5 إلى ~10^5 | ~3 أرقام |
| FP8 E4M3 | 8 | 1 | 4 | 3 | ~2^-9 إلى ~448 | ~2 أرقام |
FP8 E4M3 يُقرأ "4 بتات للأس، 3 بتات للمنتسة". بديل FP8 E5M2 يتبادل الدقة مقابل النطاق؛ تجارب ANDREA تستخدم E4M3 لأن تنشيطات المحول تبقى في نطاقات ضيقة من القيم المطلقة حيث تفوز الدقة الإضافية على النطاق الإضافي.
بايتات لكل معلمة
لماذا الدقة المنخفضة تعمل بشكل أسرع
عرض النطاق الترددي للذاكرة يسيطر على سرعة التدريب
تقضي وحدات معالجة الرسوميات الحديثة وقتًا أكثر في انتظار الذاكرة من الحوسبة. الـ RTX 4090 لديه عرض نطاق ذاكرة 1008 جيجابايت/ثانية & 165 تيرافلوبس من حساب FP16. طبقة نموذجية تقرأ الأوزان من VRAM، تضرب التنشيطات، تكتب النتائج مرة أخرى. العرض النطاقي، وليس الحوسبة، يحدد الإنتاجية.
تقليل الدقة إلى النصف يقلل البايتات لكل معامل إلى النصف، لذا قراءة نفس الأوزان تستخدم نصف عرض النطاق الترددي للذاكرة. الإنتاجية تتضاعف تقريبًا.
Tensor Cores: ضرب مصفوفي مدعوم بالأجهزة
يأتي RTX 4090 بوحدات tensor core مخصصة تحسب ضرب المصفوفات عند FP16 أو FP8 مباشرة. عملية tensor core واحدة تضرب كتلة صغيرة (مثل 16x16) في دورة واحدة، أسرع بكثير من ضرب FP32 السكالاري.
أرقام تجريبية من ANDREA-120M:
| الدقة | الخطوات/دقيقة | الملاحظات |
|---|---|---|
| FP32 | ~3 | الأساسي؛ لا تسريع tensor core |
| FP16 | ~6 | نوى التنسور cuBLAS؛ تسريع 2x |
| FP8 E4M3 | ~6 | نوى التنسور؛ مشابه لـ FP16 |
لم يتفوق FP8 على FP16 في الإنتاجية لهذا العمل لأن إنتاجية الحوسبة لم تعد العائق؛ أصبح عرض النطاق الترددي للذاكرة وتكلفة الإطلاق العائق. ANDREA-120M v3 يُشحن بـ FP16 cuBLAS عند 6 خطوات/دقيقة لتهميش أمان مريح دون فقدان الإنتاجية.
مخاطر NaN في FP8
FP8 E4M3 يمثل الأرقام من ~2^-9 إلى ~448. التنشيطات أو التدرجات خارج هذا النطاق تتجاوز إلى NaN (ليس رقماً) أو تقل إلى صفر. NaN واحد يسمم كل حساب لاحق: ضرب المصفوفات مع NaN يعيد كل-NaN؛ تدرجات كل-NaN تفسد حالة AdamW؛ AdamW مع NaN m & v يخرج تحديثات NaN؛ الأوزان تصبح NaN؛ يموت التشغيل التدريبي بأكمله.
أظهرت تجارب FP8 لـ ANDREA منحدرات NaN عرضية تتطلب تدريج الخسارة، أو تبديل الدقة المجدول، أو مسارات الاحتياطي. نطاق FP16 الديناميكي (~10^-5 إلى ~10^5) واسع بما يكفي ليبقى حدث NaN نادرًا دون حيل تدريج معقدة.
اختيار الدقة لتشغيل جديد
تكييف 120M على 4090 واحدة
المضاعف 6-8x من درس المقدمة
تذكر من grow_a_language_model_intro أن ذاكرة التدريب تساوي تقريباً 6-8x عدد الأوزان الخام، مع مراعاة:
- الوزن (1x)
- لحظة آدم الأولى m (1x)
- لحظة آدم الثانية v (1x)
- مخزن التدرج (1x)
- التنشيطات والمتغيرات المؤقتة (~2-4x، يعتمد على الحجم الدفعي والسياق)
ANDREA-120M عند FP16 مع batch_size=8، context=1024:
| المكون | حجم FP16 |
|---|---|
| الأوزان | 240 ميجابايت |
| m (اللحظة الأولى) | 240 ميغابايت |
| v (اللحظة الثانية) | 240 ميغابايت |
| التدرجات | 240 ميغابايت |
| التنشيطات | ~2-4 جيجابايت (دفعة، سياق) |
| الإجمالي | ~3.5 جيجابايت |
RTX 4090 لديها 24 جيجابايت VRAM. ANDREA-120M تستخدم ~14% عند FP16. مساحة كافية لأحجام دفعات أكبر أو نوافذ سياق أطول. ANDREA-12M استخدمت 1.4 جيجابايت إجمالي فقط.
أين يعيش الدقة المختلطة
ANDREA لا يحتفظ بكل شيء بدقة واحدة. التدريب بدقة مختلطة يخزن:
- الأوزان الرئيسية: FP32 (تحافظ على استقرار التدريب)
- الحوسبة الأمامية والخلفية: FP16 (تستخدم نوى التنسور)
- حالة مُحسِّن AdamW: FP32 (m و v تحتاجان دقة لتحديثات الذيل الطويل)
- مخزن التدرج: FP16 (جانب الحوسبة)
ميزانية الذاكرة النهائية تمزج بين الاثنين. بصمة ANDREA الفعلية تقع بين FP16 النقي (720 MB حالة المحسن) و FP32 النقي (1.44 GB حالة المحسن)، أقرب إلى FP32 لأن m و v يبقيان في FP32.
تحديد حجم ميزانية لـ ANDREA-480M
الدقة في الممارسة
أنشطة مجاورة
ثلاثة إخوة يرتبطون بالدقة:
- النشاط 1: مقدمة / ميزانية VRAM. الدقة تضاعف كل بند في حساب ميزانية الذاكرة. قاعدة الإبهام 6-8x غير مدرجة لوحدات؛ بايت-لكل-معامل يعطيها وحدات.
- النشاط 10: AdamW. حالة المحسن (m & v) تبقى عادةً في FP32 حتى عندما يتم تشغيل الحوسبة الأمامية/الخلفية في FP16. السبب: دقة المجمع الطويلة الأنياب أهم من سرعة التشغيل للمحسن.
- النشاط 12: قص التدرجات. القص يحد من أحجام التدرجات قبل تحديثات حالة المحسن. مع FP16 أمامي/خلفي & FP32 محسن، يحدث القص عند الحدود حيث يتغير الدقة & حيث تتركز مخاطر التجاوز.
الدقة مقبض مجاني: غيّرها، النموذج يتدرب أسرع & يستخدم ذاكرة أقل. التكلفة هي الرعاية العددية: معالجة NaN، توسيع الخسارة، الانضباط في الدقة المختلطة. ANDREA-120M v3 يُظهر العائد: 120M معلمة مدربة على أجهزة المستهلك في 23 يومًا لأن FP16 قصّ كل شيء إلى النصف.