التدريب بالدقة المختلطة باستخدام AMP
torch.cuda.amp.autocast() وGradScaler، وFP16 مقابل BF16، وتوفير الذاكرة، وزيادة السرعة
التدريب بالدقة المختلطة باستخدام AMP درس مجاني في Learn AI with Python على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Learn AI with Python، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Learn AI with Python 4 دروس في المجموع.
ما هو التدريب بدقة مختلطة
يشغّل التدريب باستخدام الدقة المختلطة معظم العمليات باستخدام أعداد فاصلة عائمة من 16 بت (FP16) بدلًا من 32 بت (FP32). تستخدم FP16 نصف الذاكرة وتعمل بشكل أسرع على نوى الموتر في وحدات GPU الحديثة، بينما تبقى بعض العمليات الحساسة في FP32 للحفاظ على الاستقرار.
الفوائد
تمنحكم الدقة المختلطة ما يلي:
- توفير نحو ضعفي الذاكرة، مما يتيح استخدام دفعات أو نماذج أكبر
- ضرب مصفوفات أسرع على نوى الموتر
- فقدان ضئيل جدًا أو معدوم في دقة النموذج النهائية عند تطبيقها بشكل صحيح
مشكلة التدفق السفلي في FP16
لدى FP16 نطاق ضيق. فقد تتدفق قيم التدرجات الصغيرة إلى الصفر، مما يوقف التعلم بصمت. وهذا هو التحدي الأساسي الذي يجب أن تحله الدقة المختلطة، والسبب في عدم إمكانية تحويل كل شيء إلى FP16 ببساطة.
torch.cuda.amp
يتولى PyTorch الخلط التلقائي للدقة (AMP) التفاصيل باستخدام أداتين: يختار autocast الدقة لكل عملية، بينما يمنع GradScaler التدفق السفلي للتدرجات.
import torch
from torch.cuda.amp import autocast, GradScalerسياق autocast
غلّفوا المرور الأمامي داخل autocast(). وداخله، يشغّل PyTorch كل عملية تلقائيًا بالدقة الأكثر أمانًا: عمليات ضرب المصفوفات باستخدام FP16، وعمليات الاختزال مثل softmax والخسارة باستخدام FP32.
with autocast():
output = model(x)
loss = criterion(output, y)تقديم GradScaler
يقاوم GradScaler التدفق السفلي بضرب الخسارة في عامل تحجيم كبير قبل الانتشار العكسي. وينقل ذلك التدرجات الصغيرة إلى نطاق يمكن تمثيله باستخدام FP16؛ ثم يُزال عامل التحجيم قبل خطوة المحسّن.
scaler = GradScaler()تحجيم الخسارة
يقوم scaler.scale(loss).backward() بزيادة مقياس الخسارة، ثم يشغّل الانتشار العكسي. وتكون التدرجات الناتجة مُحجَّمة أيضًا، مما يمنع القيم الصغيرة من التلاشي.
scaler.scale(loss).backward()scaler.step
يفك scaler.step(optimizer) أولًا تحجيم التدرجات ويعيدها إلى مقدارها الحقيقي، ثم يستدعي optimizer.step()، ولكن فقط إذا لم تظهر قيم inf أو NaN. وإذا فاضت التدرجات، تُتخطى الخطوة.
scaler.step(optimizer)scaler.update
يضبط scaler.update() عامل التحجيم للتكرار التالي: فيزيد المقياس عند نجاح الخطوات، ويخفضه بعد حدوث فيضان. ويحافظ هذا التحجيم التكيفي على استقرار التدريب تلقائيًا.
scaler.update()حلقة AMP الكاملة
يؤدي جمع هذه الأجزاء إلى خطوة تدريب كاملة باستخدام الدقة المختلطة.
scaler = GradScaler()
for x, y in loader:
x, y = x.cuda(), y.cuda()
optimizer.zero_grad()
with autocast():
out = model(x)
loss = criterion(out, y)
scaler.scale(loss).backward()
scaler.step(optimizer)
scaler.update()نصائح عملية
ضعوا النقاط التالية في اعتباركم:
- استدعوا
backward()على الخسارة المُحجَّمة فقط - يغلّف autocast المرور الأمامي فقط، وليس المرور العكسي أو خطوة المحسّن
- تتألق AMP على وحدات GPU ذات نوى الموتر؛ وتكون المكاسب أقل على العتاد الأقدم
تحقق سريع
اختبروا معرفتكم بـ AMP.
مراجعة
تعلّمتم التدريب بالدقة المختلطة باستخدام AMP:
- يختار
autocast()بين FP16 وFP32 لكل عملية في المرور الأمامي - يُحجّم GradScaler الخسارة لتجنب التدفق السفلي للتدرجات
- تتكون الدورة من
scaler.scale(loss).backward()وscaler.step(optimizer)وscaler.update() - النتيجة: توفير نحو ضعفي الذاكرة وتدريب أسرع
الأسئلة الشائعة
هل درس «التدريب بالدقة المختلطة باستخدام AMP» مجاني؟
نعم — نص درس «التدريب بالدقة المختلطة باستخدام AMP» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Learn AI with Python، انتقل إلى CoddyKit PRO. تتضمن دورة Learn AI with Python 4 دروس في المجموع.
ماذا ستتعلم في «التدريب بالدقة المختلطة باستخدام AMP»؟
torch.cuda.amp.autocast() وGradScaler، وFP16 مقابل BF16، وتوفير الذاكرة، وزيادة السرعة تتمرن على Learn AI with Python مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Learn AI with Python؟
لا تُشترط خبرة سابقة. Learn AI with Python على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «التدريب بالدقة المختلطة باستخدام AMP»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Learn AI with Python هذا؟
نعم. كل درس في Learn AI with Python يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- التدريب باستخدام وحدات GPU متعددة مع DataParallel
- DistributedDataParallel (DDP)
- التدريب بالدقة المختلطة باستخدام AMP
- التدريب الفعّال باستخدام Hugging Face Accelerate