FP8
تعرف على ماهية FP8، وكيف تعمل E4M3 وE5M2، وكيف يعمل القياس، ودعم الأجهزة، الدقة المختلطة على تحسين التدريب والاستدلال في الذكاء الاصطناعي.
FP8، أو النقطة العائمة ذات 8 بتات، هي تنسيق عددي منخفض الدقة يخزن كل قيمة في ثمانية بتات. تستخدم أنظمة الذكاء الاصطناعي FP8 لتقليل حركة مرور الذاكرة وتسريع عمليات ضرب المصفوفات، والالتفاف، وغيرها من العمليات المكلفة على الأجهزة المتوافقة. مقارنةً بـ FP16 أو FP32، فإنه يمثل قيماً متميزة أقل، لذا تجمع سير العمل الناجحة لـ FP8 بين الحساب السريع منخفض الدقة والتحجيم والعمليات الانتقائية الأعلى دقة للحفاظ على جودة النموذج.
Link to this sectionكيف يمثل FP8 الأرقام#
تحتوي قيمة النقطة العائمة على إشارة، وأس يتحكم في النطاق، ومِعشار (mantissa) يتحكم في التفاصيل. يظهر FP8 بشكل شاع في تنسيقين موثقين بواسطة أنواع بيانات النقطة العائمة في PyTorch:
- E4M3: بت إشارة واحد، وأربعة بتات للأس، وثلاثة بتات للمعشار. يوفر مزيداً من التفاصيل العددية ولكن بنطاق أضيق.
- E5M2: بت إشارة واحد، وخمسة بتات للأس، وبتان للمعشار. يغطي نطاقاً أوسع ولكنه يقوم بتقريب القيم بشكل أكثر عدوانية.
غالباً ما يكون E4M3 مناسباً للأوزان والتنشيطات، بينما يمكن لـ E5M2 استيعاب التدرجات ذات نطاقات القيم الكبيرة بشكل أفضل. تختلف المتغيرات الدقيقة عبر الأنظمة الأساسية، كما هو موضح في وثائق النقطة العائمة منخفضة الدقة من AMD، لذا فإن نموذج FP8 ليس قابلاً للنقل تلقائياً بين كل وحدة تسريع وبيئة تشغيل.
نظراً لأن ثمانية بتات لا يمكنها تمثيل النطاق الأصلي الكامل للموثّق والتفاصيل الخاصة به، فإن الأطر عادةً ما تضرب القيم في عامل تحجيم قبل التحويل. يصف دليل تحجيم FP8 من NVIDIA استراتيجيات مثل التحجيم المؤجل، والذي يستمد المقاييس المستقبلية من القيم القصوى المرصودة سابقاً. يحد التحجيم من تجاوز السعة، ونقصان السعة، والتشبع دون الحاجة إلى تشغيل كل عملية بدقة أعلى.
Link to this sectionFP8 مقابل التنسيقات ذات الصلة#
يشغل FP8 موقعاً وسطاً بين أنواع بيانات الذكاء الاصطناعي الشائعة:
- FP16 أو الدقة النصفية: يستخدم ضعف عدد البتات، مما يوفر تفاصيل عددية أكبر وتدريباً أبسط بشكل عام. يمكن لـ FP8 تقليل التخزين والنطاق الترددي بشكل أكبر ولكنه يتطلب تحجيماً أكثر دقة.
- BF16: يحافظ على نطاق أس واسع مع توفير تفاصيل كسرية أقل من FP16. غالباً ما يُستخدم كعنصر مساعد أعلى دقة في تدريب FP8.
- INT8: يمثل أعداداً صحيحة بدلاً من قيم النقطة العائمة. يعتمد تكميم النماذج في INT8 عادةً على المقاييس لتعيين القيم الحقيقية على مستويات عددية صحيحة ثابتة، بينما يحتفظ FP8 بأس للمسافات غير المنتظمة بشكل طبيعي.
- FP4: يستخدم أربعة بتات فقط ويمكن أن يوفر ضغطاً أكبر، ولكن نطاقه وحبيباته المحدودين للغاية تجعل الحفاظ على الدقة أكثر صعوبة عادةً.
يعد FP8 غالباً جزءاً من سير عمل الدقة المختلطة بدلاً من أن يكون نوع البيانات لكل موثّق. قد يظل التجميع، أو التطبيع، أو حالة المُحسِّن، أو الطبقات الحساسة في BF16 أو FP16 أو FP32. علاوة على ذلك، تختلف الدقة العددية عن مقاييس تقييم الدقة، والتي تقيس عدد تنبؤات النموذج الإيجابية الصحيحة.
Link to this sectionتطبيقات العالم الحقيقي#
توضح تطبيقتان عمليتان سبب أهمية FP8:
-
تدريب النماذج الكبيرة: يقوم تدريب Transformer بعمليات ضرب مصفوفات كبيرة بشكل متكرر. يمكن للإطار الواعي بـ FP8 تحويل الأوزان والتنشيطات المؤهلة إلى FP8 مع الاحتفاظ بدقة أعلى حيثما تتطلب الاستقرار ذلك. يؤدي هذا إلى خفض طلب النطاق الترددي ويمكن أن يزيد من إنتاجية التدريب. يتضمن سير عمل التدريب المُكمَّم TorchAO خيارات تحجيم على مستوى الموثّق وعلى مستوى الصفوف التي توازن بين السرعة القصوى والتعامل الأفضل مع القيم المتطرفة.
-
استدلال الرؤية عالية الإنتاجية: قد يقوم مركز البيانات بتشغيل اكتشاف الكائنات عبر مئات تدفقات الفيديو الخاصة بالتجزئة، أو المرور، أو التصنيع. يمكن للأنوية القادرة على التعامل مع FP8 تقليل الوقت والذاكرة المستخدمة بواسطة طبقات النموذج المؤهلة، مما قد يقلل زمن انتقال الاستدلال ويزيد من سعة التدفقات المتزامنة. يوضح دليل الأنواع المُكمَّمة في TensorRT كيف تصف عمليات التكميم وإلغاء التكميم الصريحة تنفيذ FP8.
Link to this sectionالمخاطر العددية ودعم الأجهزة#
يمكن أن يتسبب التحجيم الضعيف في تشبع القيم الكبيرة وتقريب القيم الصغيرة إلى الصفر. تُعتبر القيم المتطرفة إشكالية بشكل خاص عندما يغطي مقياس واحد موثّقًا كاملاً. يمكن أن تؤدي هذه التأثيرات إلى تغيير درجات الثقة، أو زعزعة استقرار التدريب، أو تقليل دقة الاكتشاف، لذا يجب على المطورين التحقق من صحة النموذج المحول مقارنةً بخطه الأساسي الأعلى دقة.
دعم الأجهزة الأصلية لا يقل أهمية. قدمت هندسة NVIDIA Hopper تسريع النواة الموترية (Tensor Core) لـ FP8، بينما تدعم وحدة معالجة الرسومات NVIDIA A100 الأقدم FP16 و BF16 و INT8 ولكن ليس حساب FP8 الأصلي. لذلك يجب التحقق من مصفوفة دعم الأجهزة في TensorRT قبل اختيار دقة النشر.
Link to this sectionالعمل مع 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 على وحدة معالجة الرسومات المستهدفة للمقارنة بين زمن الانتقال، والإنتاجية، واستخدام الذاكرة، ودقة المهام قبل النشر في بيئة الإنتاج.






