FP8
تعرّف على FP8، وكيفية عمل E4M3 وE5M2، وكيف يحسّن التحجيم ودعم العتاد والدقة المختلطة تدريب الذكاء الاصطناعي واستدلاله.
FP8، أو الفاصلة العائمة ذات 8 بتات، هو تنسيق عددي منخفض الدقة يخزّن كل قيمة في ثمانية بتات. تستخدم أنظمة الذكاء الاصطناعي FP8 لتقليل حركة البيانات في الذاكرة وتسريع عمليات ضرب المصفوفات والالتفافات وغيرها من العمليات المكلفة على الأجهزة المتوافقة. وبالمقارنة مع FP16 أو FP32، يمثّل FP8 عددًا أقل من القيم المميزة، لذلك تجمع مسارات عمل FP8 الناجحة بين الحساب السريع منخفض الدقة والتحجيم وعمليات انتقائية بدقة أعلى للحفاظ على جودة النموذج.
كيفية تمثيل FP8 للأرقام#
تحتوي قيمة الفاصلة العائمة على إشارة وأُسّ يتحكم في النطاق، وقِسم عشري يتحكم في التفاصيل. يظهر FP8 عادةً في تنسيقين موثقين ضمن أنواع بيانات الفاصلة العائمة في PyTorch:
- E4M3: بت إشارة واحد، وأربعة بتات للأسّ، وثلاثة بتات للقِسم العشري. يوفر تفاصيل عددية أكبر، لكنه يتمتع بنطاق أضيق.
- E5M2: بت إشارة واحد، وخمسة بتات للأسّ، وبتّان للقِسم العشري. يغطي نطاقًا أوسع، لكنه يقرّب القيم بدرجة أكبر.
غالبًا ما يكون E4M3 مناسبًا للأوزان وعمليات التنشيط، بينما يستطيع E5M2 استيعاب التدرجات ذات نطاقات القيم الكبيرة على نحو أفضل. وتختلف المتغيرات الدقيقة بين المنصات، كما هو موضح في وثائق AMD للفاصلة العائمة منخفضة الدقة، ولذلك لا يكون نموذج FP8 قابلًا للنقل تلقائيًا بين كل مسرّع وبيئة تشغيل.
نظرًا إلى أن ثمانية بتات لا تستطيع تمثيل النطاق والتفاصيل الأصليين الكاملين لموتر، تضرب أطر العمل عادةً القيم في عامل تحجيم قبل التحويل. يصف الدليل التمهيدي لتحجيم FP8 من NVIDIA استراتيجيات مثل التحجيم المؤجل، الذي يستمد عوامل التحجيم المستقبلية من أكبر القيم المرصودة سابقًا. يحدّ التحجيم من التجاوز الفائض والتدفق الناقص والتشبّع، من دون الحاجة إلى تنفيذ كل عملية بدقة أعلى.
FP8 مقارنةً بالتنسيقات ذات الصلة#
يشغل FP8 موقعًا متوسطًا بين أنواع بيانات الذكاء الاصطناعي الشائعة:
- FP16 أو الدقة النصفية: يستخدم ضعف عدد البتات، ما يوفر تفاصيل عددية أكبر وتدريبًا أبسط عمومًا. ويمكن لـ FP8 تقليل التخزين وعرض النطاق الترددي بدرجة أكبر، لكنه يتطلب تحجيمًا أكثر دقة.
- BF16: يحافظ على نطاق أُسّي واسع، مع توفير تفاصيل كسرية أقل من FP16. ويُستخدم غالبًا بوصفه النظير الأعلى دقة في تدريب FP8.
- INT8: يمثّل أعدادًا صحيحة بدلًا من قيم الفاصلة العائمة. يعتمد تكميم النموذج باستخدام INT8 عادةً على عوامل تحجيم لربط القيم الحقيقية بمستويات صحيحة ثابتة، بينما يحتفظ FP8 بأُسّ يتيح تباعدًا غير منتظم طبيعيًا.
- FP4: يستخدم أربعة بتات فقط ويمكن أن يوفر ضغطًا أكبر، لكن نطاقه وتدرّجه المحدودين للغاية يجعلان الحفاظ على الدقة أكثر صعوبة عادةً.
غالبًا ما يكون FP8 جزءًا من سير عمل الدقة المختلطة، وليس نوع البيانات المستخدم لكل موتر. وقد تظل عمليات التجميع والتطبيع وحالة المحسّن أو الطبقات الحساسة باستخدام BF16 أو FP16 أو FP32. كذلك، تختلف الدقة العددية عن مقياس تقييم الدقة، الذي يقيس عدد تنبؤات النموذج الإيجابية الصحيحة.
التطبيقات الواقعية#
يوضح تطبيقان عمليان سبب أهمية FP8:
-
تدريب النماذج الكبيرة: ينفذ تدريب Transformer عمليات ضرب مصفوفات كبيرة بصورة متكررة. ويمكن لإطار عمل يدعم FP8 تحويل الأوزان وعمليات التنشيط المؤهلة إلى FP8، مع الاحتفاظ بدقة أعلى حيثما يتطلب الاستقرار ذلك. ويقلل هذا من الطلب على عرض النطاق الترددي، وقد يزيد معدل إنتاجية التدريب. ويتضمن سير عمل التدريب المكمّم في TorchAO خيارات للتحجيم على مستوى الموتر وعلى مستوى الصف، توازن بين السرعة القصوى وتحسين التعامل مع القيم الشاذة.
-
استدلال الرؤية عالي الإنتاجية: قد يشغّل مركز بيانات اكتشاف الأجسام عبر مئات من تدفقات الفيديو الخاصة بالمتاجر أو المرور أو التصنيع. ويمكن للنوى التي تدعم FP8 تقليل الوقت والذاكرة المستخدمين في طبقات النموذج المؤهلة، ما قد يخفض زمن استجابة الاستدلال ويزيد سعة التدفقات المتزامنة. يوضح دليل الأنواع المكمّمة في TensorRT كيفية استخدام عمليات التكميم وإزالة التكميم الصريحة لوصف تنفيذ FP8.
المخاطر العددية ودعم الأجهزة#
قد يتسبب التحجيم السيئ في تشبّع القيم الكبيرة وتقريب القيم الصغيرة إلى الصفر. وتكون القيم الشاذة مشكلة خاصة عندما يغطي عامل تحجيم واحد موترًا بأكمله. وقد تؤدي هذه التأثيرات إلى تغيير درجات الثقة أو زعزعة استقرار التدريب أو خفض دقة الاكتشاف، لذلك ينبغي للمطورين التحقق من النموذج المحوّل بمقارنته بخط الأساس الأعلى دقة.
ويحظى الدعم الأصلي للأجهزة بأهمية مماثلة. قدمت بنية NVIDIA Hopper تسريع FP8 باستخدام Tensor Core، في حين تدعم وحدة معالجة الرسومات NVIDIA A100 FP16 وBF16 وINT8، لكنها لا تدعم الحساب الأصلي باستخدام FP8. لذلك ينبغي التحقق من مصفوفة دعم الأجهزة في TensorRT قبل اختيار دقة النشر.
العمل باستخدام FP8 عمليًا#
يوضح مثال PyTorch الصغير هذا التحويل إلى E4M3 وخطأ التقريب الناتج عند استعادة قيم FP8 إلى FP32:
import torch
values = torch.tensor([0.1, 1.0, 3.14, 100.0], dtype=torch.float32)
# Convert to E4M3 FP8, then restore the values for comparison.
fp8_values = values.to(torch.float8_e4m3fn)
restored = fp8_values.to(torch.float32)
absolute_error = (restored - values).abs()
print(torch.stack((values, restored, absolute_error), dim=1))يوفر سير عمل تصدير Ultralytics إلى TensorRT الموثق خيارات FP16 وINT8 المعاير لـ Ultralytics YOLO، بدلًا من تصدير FP8 باستخدام وسيطة واحدة. لذلك يتطلب نشر FP8 سلسلة أدوات تحويل لاحقة متوافقة. وبغض النظر عن الدقة المختارة، استخدم وضع قياس الأداء في Ultralytics على وحدة معالجة الرسومات المستهدفة لمقارنة زمن الاستجابة والإنتاجية واستخدام الذاكرة ودقة المهمة قبل النشر في بيئة الإنتاج.






