English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

ضيف
1 / ?

الإشارة، الأس، المانتيسا

تنسيق 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.


الثلاث صيغ


الصيغةإجمالي البِتاتالإشارةالأسالمنتيساالنطاق الديناميكيالدقة
FP32321823~10^-38 إلى ~10^38~7 أرقام
FP16161510~10^-5 إلى ~10^5~3 أرقام
FP8 E4M38143~2^-9 إلى ~448~2 أرقام

FP8 E4M3 يُقرأ "4 بتات للأس، 3 بتات للمنتسة". بديل FP8 E5M2 يتبادل الدقة مقابل النطاق؛ تجارب ANDREA تستخدم E4M3 لأن تنشيطات المحول تبقى في نطاقات ضيقة من القيم المطلقة حيث تفوز الدقة الإضافية على النطاق الإضافي.

بايتات لكل معلمة

ANDREA-120M يحتوي على حوالي 120,000,000 معلمة. احسب بصمة التخزين لمصفوفات الأوزان فقط في (أ) FP32، (ب) FP16، (ج) FP8. أظهر حساباتك بالميغابايت. ثم احسب (د) بصمة التخزين مع الأوزان + أول لحظة آدم + ثاني لحظة آدم (3 أضعاف عدد الأوزان) عند FP16.

لماذا الدقة المنخفضة تعمل بشكل أسرع

عرض النطاق الترددي للذاكرة يسيطر على سرعة التدريب

تقضي وحدات معالجة الرسوميات الحديثة وقتًا أكثر في انتظار الذاكرة من الحوسبة. الـ 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 نادرًا دون حيل تدريج معقدة.


مقارنة الدقة: FP32 مقابل FP16 مقابل FP8

اختيار الدقة لتشغيل جديد

أنت تبدأ تشغيل تدريب على طراز ANDREA جديد على RTX 4090. لديك أولويتان متعارضتان: (1) تعظيم خطوات/دقيقة، (2) تجنب تصحيح أخطاء انهيار NaN أثناء التدريب. اختار ANDREA-120M v3 FP16 cuBLAS بدلاً من FP8 E4M3 على الرغم من أن كلاهما يعملان بـ ~6 خطوات/دقيقة. فكر في سبب فوز FP16 بهذا القرار. أشر إلى النطاق الديناميكي ودعم tensor core في إجابتك.

تكييف 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

ANDREA-480M (العضو الثالث المخطط للعائلة) يحتوي على ~480 مليون معلمة. قُدِّر (a) أوزان FP16 فقط بالميغابايت، (b) أوزان FP16 + m + v بالميغابايت (افترض أن m و v أيضًا FP16 للتبسيط)، و (c) بالنظر إلى قاعدة الإبهام 6-8x، إجمالي بصمة وقت التدريب عند FP16. هل يتناسب ANDREA-480M على RTX 4090 واحدة (24 GB)؟

الدقة في الممارسة

افترض أنك اكتشفت أثناء التدريب أن ANDREA-120M كانت تنتج خسائر NaN عرضية كل ~5000 خطوة عند FP16، وكل NaN يتطلب إعادة التشغيل من نقطة حفظ. ما **التغيير الواحد** الذي ستجربُه أولاً لتقليل تكرار NaN دون مغادرة FP16؟ برر بجملة واحدة عن الآلية.

أنشطة مجاورة

ثلاثة إخوة يرتبطون بالدقة:


- النشاط 1: مقدمة / ميزانية VRAM. الدقة تضاعف كل بند في حساب ميزانية الذاكرة. قاعدة الإبهام 6-8x غير مدرجة لوحدات؛ بايت-لكل-معامل يعطيها وحدات.

- النشاط 10: AdamW. حالة المحسن (m & v) تبقى عادةً في FP32 حتى عندما يتم تشغيل الحوسبة الأمامية/الخلفية في FP16. السبب: دقة المجمع الطويلة الأنياب أهم من سرعة التشغيل للمحسن.

- النشاط 12: قص التدرجات. القص يحد من أحجام التدرجات قبل تحديثات حالة المحسن. مع FP16 أمامي/خلفي & FP32 محسن، يحدث القص عند الحدود حيث يتغير الدقة & حيث تتركز مخاطر التجاوز.


الدقة مقبض مجاني: غيّرها، النموذج يتدرب أسرع & يستخدم ذاكرة أقل. التكلفة هي الرعاية العددية: معالجة NaN، توسيع الخسارة، الانضباط في الدقة المختلطة. ANDREA-120M v3 يُظهر العائد: 120M معلمة مدربة على أجهزة المستهلك في 23 يومًا لأن FP16 قصّ كل شيء إلى النصف.