Gradient Accumulation
تعرف على كيفية تمكين تجميع التدرجات لأحجام دفعات فعالة أكبر على ذاكرة GPU محدودة، مع توجيهات عملية لتدريب PyTorch وUltralytics YOLO.
تراكم التدرج هو تقنية تدريب تجمع التدرجات من عدة دفعات صغيرة، تُسمى الدفعات المصغرة، قبل إجراء تحديث واحد لأوزان النموذج. وهي تقارب التدريب باستخدام حجم دفعة أكبر عندما تعجز ذاكرة وحدة معالجة الرسوميات المتاحة عن استيعاب الدفعة كاملة دفعة واحدة. وهذا يجعل الانحدار التدريجي المستهلك للذاكرة عملياً دون تغيير هندسة النموذج أو تقليل دقة الإدخال.
كيف يعمل تراكم التدرج#
أثناء التدريب العادي، تتبع كل دفعة ثلاث خطوات أساسية: حساب الخسارة، واستخدام الانتشار الخلفي لحساب التدرجات، والسماح للمحسن بتحديث أوزان النموذج. ثم يتم مسح التدرجات قبل الدفعة التالية.
يؤخر تراكم التدرج تحديث المحسن. تنفذ كل دفعة مصغرة تمريرة أمامية وخلفية، لكن تدرجاتها تبقى في الذاكرة وتُضاف إلى تدرجات الدفعات المصغرة اللاحقة. يتبع هذا السلوك بشكل طبيعي عملية الانتشار الخلفي في PyTorch، والتي تراكم القيم في حقل تدرج كل معامل.
بعد العدد المُكوّن لخطوات التراكم:
- يُحدث المحسن أوزان النموذج.
- يتم إعادة تعيين التدرجات باستخدام عملية مثل Optimizer.zero_grad.
- تبدأ نافذة تراكم جديدة.
حجم الدفعة الفعّال هو:
microbatch size x accumulation steps x number of training devices
على سبيل المثال، تتصرف الدفعة المصغرة المكونة من 4 صور والمُراكمة على مدى 8 خطوات تقريباً مثل دفعة من 32 صورة على وحدة معالجة رسوميات واحدة. ومع أربع وحدات معالجة رسوميات، يصبح حجم الدفعة الفعّال الإجمالي 128.
التأثيرات على الذاكرة والسرعة والتعلم#
يقلل تراكم التدرج الذاكرة القصوى المطلوبة لعمليات تنشيط البيانات نظراً لأن دفعة مصغرة واحدة فقط تمر عبر الشبكة في كل مرة. وهو لا يقلل بشكل كبير الذاكرة التي تستخدمها معاملات النموذج، أو التدرجات، أو حالة المحسن.
كما أنه لا يُسرّع التدريب عادةً. فمعالجة ثماني دفعات مصغرة تظل تتطلب ثماني تمريرات أمامية وخلفية، وقد تستخدم الدفعات الأصغر وحدة معالجة الرسوميات بكفاءة أقل. الفائدة الرئيسية هي ملائمة دفعة فعّالة مرغوبة داخل الذاكرة المحدودة. يمكن أن تحدث فائدة ثانوية في التدريب الموزع، حيث قد تتجنب التنفيذات مزامنة التدرجات حتى نهاية نافذة التراكم باستخدام ميزات مثل DistributedDataParallel no_sync.
يقسم التنفيذ اليدوي عادةً خسارة كل دفعة مصغرة على عدد خطوات التراكم لكي يمثل التدرج الناتج متوسطاً وليس مجموعاً. قد تتعامل المدربات عالية المستوى مع التطبيع تلقائياً، لذا فإن تطبيق تحجيم إضافي يمكن أن ينتج عنه تحديثات غير صحيحة.
يمكن أن يقارب التراكم دفعة كبيرة حقيقية، لكن النتائج لا تكون متطابقة دائماً. يتم حساب إحصاءات تطبيع الدفعة من الدفعات المصغرة الفردية، بينما يمكن أن تؤدي العمليات العشوائية وترتيب الفاصلة العائمة إلى إدخال اختلافات أيضاً. لذلك قد يتطلب معدل التعلم التحقق بدلاً من التحجيم التلقائي.
التقنيات ذات الصلة والاختلافات الرئيسية#
غالباً ما يُخلط بين تراكم التدرج وتقنيات الذاكرة أو الاستقرار الأخرى:
- حفظ التدرجات (Gradient checkpointing) يقلل ذاكرة التنشيط عن طريق إعادة حساب عمليات التمرير الأمامي المحددة أثناء الانتشار الخلفي. توصف المقايضة بين الحوسبة والذاكرة في توثيق حفظ تنشيط PyTorch. وبدلاً من ذلك، يقسم التراكم دفعة كبيرة إلى دفعات مصغرة أصغر.
- الدقة المختلطة تخزن أو تحسب عمليات محددة باستخدام أنواع بيانات ذات دقة أقل. يمكنها تقليل الذاكرة وتحسين الإنتاجية، بينما يغير التراكم عدد مرات تحديث المحسن. يمكن دمج التقنيات باتباع سير عمل تراكم الدقة المختلطة التلقائي الصحيح.
- قص التدرج (Gradient clipping) يحدد حجم التدرج لتقليل عدم الاستقرار الناتج عن التحديثات الكبيرة بشكل غير معتاد. وهو لا ينشئ حجم دفعة فعّالاً أكبر. وعند دمجه مع التراكم، يجب أن يحدث القص عادةً بعد اكتمال تجميع التدرج، باستخدام عملية مثل clip_grad_norm.
تطبيقات العالم الحقيقي#
في تجزئة الصور الطبية عالية الدقة، قد تستوعب وحدة معالجة رسوميات بسعة 12 جيجابايت مسحين كبيرين فقط في المرة الواحدة. إن تجميع التدرجات عبر ثماني دفعات مصغرة ينتج عنه دفعة فعّالة قدرها 16 مع الحفاظ على الدقة اللازمة لتحديد الهياكل التشريحية الصغيرة. والمقايضة هي فترة أطول بين تحديثات المحسن.
في اكتشاف الكائنات جوياً، قد يقوم فريق هندسي بالتدريب عبر أربع وحدات معالجة رسوميات بـ 6 صور لكل جهاز و4 خطوات تراكم. الدفعة الإجمالية الفعّالة هي 96 صورة. يمكن أن يؤدي هذا إلى تثبيت التحديثات للمشاهد التي تحتوي على العديد من المركبات أو المباني الصغيرة مع الحفاظ على كل جهاز ضمن حد الذاكرة الخاص به. يمكن للفرق إدارة تجارب السحابة ومجموعات البيانات وعمليات تشغيل التدريب من خلال التدريب السحابي لـ Ultralytics Platform.
تراكم التدرج مع Ultralytics YOLO#
يستمد سير عمل تدريب النماذج في Ultralytics سلوك التراكم من الإعدادات الفعلية batch والاسمية nbs. مع batch=4 و nbs=64، يستهدف المدرب دفعة اسمية تبلغ 64 عن طريق تأجيل تحديثات المحسن عبر دفعات مصغرة متعددة.
from ultralytics import YOLO
# Load a pretrained YOLO26 detection model
model = YOLO("yolo26n.pt")
# Use a small physical batch and a larger nominal batch
results = model.train(
data="coco8.yaml",
epochs=10,
batch=4,
nbs=64,
)يدير المدرب عالي المستوى الانتشار الخلفي، والتراكم، وخطوات المحسن، ومسح التدرجات. يتم توثيق سلوكه في مرجع Ultralytics BaseTrainer. عملياً، اختر أكبر دفعة مصغرة تتناسب بشكل موثوق، واحسب الدفعة الفعّالة المقصودة، وقارن نتائج التحقق عند تغيير خطوات التراكم، أو معدل التعلم، أو عدد الأجهزة.






