Pipeline Parallelism
اكتشف كيف يقسّم التوازي عبر مسار البيانات نماذج التعلّم العميق بين وحدات GPU. وتعلّم منع أخطاء نفاد الذاكرة وتحسين التدريب الموزّع.
التوازي عبر خطوط الأنابيب هو أسلوب متقدم في التدريب الموزع مصمم لتقسيم الشبكة العصبية (NN) الكبيرة عبر أجهزة حوسبة متعددة، مثل وحدات معالجة الرسومات (GPUs)، وذلك بفصل النموذج على امتداد العمق. عندما تتجاوز أوزان النموذج وحالات المُحسِّن في بنية حديثة حدود ذاكرة مسرّع واحد، يقسم المهندسون الطبقات المتسلسلة للشبكة إلى «مراحل». فعلى سبيل المثال، قد توجد الطبقات العشر الأولى على GPU 0، بينما توجد الطبقات العشر التالية على GPU 1. أثناء التمرير الأمامي، تنتقل البيانات من جهاز إلى آخر. ومن خلال ربط هذه الأجهزة معًا، يستطيع الباحثون تدريب خوارزميات التعلم العميق (DL) ضخمة من دون مواجهة أخطاء نفاد الذاكرة التي تفرضها قيود العتاد.
كيفية عمل التوازي عبر خطوط الأنابيب#
يؤدي التنفيذ الساذج لتقسيم الطبقات عبر الأجهزة إلى أوجه قصور شديدة تُعرف باسم «فقاعات خط الأنابيب». وبما أن الطبقات تعالج البيانات بالتتابع، تظل GPU 1 خاملة تمامًا بينما تعالج GPU 0 الطبقات الأولية. ولزيادة الاستفادة من العتاد إلى أقصى حد، يقسم مجدولو خطوط الأنابيب الحديثة حجم الدفعة العالمي إلى «دفعات صغيرة» أصغر.
بدلًا من انتظار اكتمال دفعة كاملة، تبدأ GPU 0 فورًا في معالجة الدفعة الصغيرة الثانية بمجرد تمريرها الدفعة الصغيرة الأولى إلى GPU 1. وتستخدم أدوات مثل Microsoft DeepSpeed وواجهة برمجة التطبيقات للتوصيل عبر خطوط الأنابيب الموزعة في PyTorch عادةً استراتيجية جدولة 1F1B (تمرير أمامي واحد، وتمرير خلفي واحد). وتتناوب هذه الطريقة على حساب التمريرات الأمامية والخلفية لدفعات صغيرة مختلفة بشكل متزامن، مما يقلل بدرجة كبيرة من فقاعات خط الأنابيب واستهلاك الذاكرة. بل إن التطورات الحديثة في عامي 2024 و2025 قدمت التوازي عبر خطوط الأنابيب مع انعدام الفقاعات، وهي استراتيجية للتنبؤ بالأوزان تراعي المُحسِّن وتكاد تلغي وقت الخمول عبر عناقيد الحوسبة.
تمييز تقنيات التوازي ذات الصلة#
يعمل التوازي عبر خطوط الأنابيب ضمن منظومة أوسع من استراتيجيات الحوسبة الموزعة. ويُعد فهم الفروق بينها أمرًا بالغ الأهمية لتوسيع نطاق نماذج الذكاء الاصطناعي بفعالية:
- توازي النموذج: هو المصطلح الشامل لتقسيم نموذج عبر الأجهزة. ويُعد التوازي عبر خطوط الأنابيب شكلًا محددًا جدًا من توازي النموذج، إذ يقسم البنية بالتتابع على امتداد العمق.
- التوازي عبر الموترات: بخلاف التقسيمات على امتداد العمق في التوازي عبر خطوط الأنابيب، يقسم التوازي عبر الموترات عمليات المصفوفات الفردية أفقيًا عبر وحدات معالجة الرسومات. وغالبًا ما تُدمج هاتان التقنيتان لزيادة معدل النقل إلى أقصى حد.
- توازي البيانات: يكرر توازي البيانات النموذج بالكامل على كل وحدة معالجة رسومات، ويوزع بيانات التدريب بينها. وبالنسبة إلى بنيات اكتشاف الأجسام وتجزئة الصور المدمجة والمحسّنة بدرجة كبيرة، مثل نموذج Ultralytics YOLO26، الذي يلائم أصلًا ذاكرة VRAM لجهاز واحد، تُعد موازاة البيانات عبر DistributedDataParallel (DDP) في PyTorch الطريقة المفضلة لتسريع التدريب.
التطبيقات العملية في الذكاء الاصطناعي والتعلم الآلي#
يُعد توسيع نطاق البنية التحتية المعقدة أمرًا ضروريًا لبناء أنظمة ذكاء اصطناعي حديثة ومتقدمة:
- تدريب النماذج الأساسية: يتطلب تطوير نماذج اللغة الكبيرة (LLMs) والنماذج الأساسية العملاقة مثل Llama 3 من Meta الجمع بين توازي الموترات وتوازي البيانات والتوازي عبر خطوط الأنابيب. وتستفيد أطر عمل مثل NVIDIA Megatron-LM من هذه الاستراتيجيات لتدريب بنيات مزيج الخبراء (MoE) الضخمة عبر آلاف وحدات معالجة الرسومات على منصات سحابية مثل AWS SageMaker.
- التشخيص الطبي عالي الدقة: في الذكاء الاصطناعي في الرعاية الصحية والنمذجة العلمية، غالبًا ما تنتج عمليات المسح الحجمي ثلاثي الأبعاد تنشيطات هائلة جدًا بحيث لا تتسع لها ذاكرة مسرّع واحد. ويسمح تمرير طبقات الشبكة عبر العقد للمستشفيات البحثية بتدريب شبكات عميقة على مجموعات بيانات MRI ضخمة من دون المساس بدقة الصور.
مثال برمجي: مفهوم تقسيم الطبقات#
تاريخيًا، كان توزيع الطبقات عبر الأجهزة يتطلب تعليمات برمجية معقدة ومخصصة. أما اليوم، فترسم المنطقية الأساسية طبقات محددة إلى معرّفات أجهزة مختلفة. فيما يلي تمثيل مفاهيمي لكيفية تقسيم مراحل الشبكة عبر الأجهزة في PyTorch، بما يضع الأساس لعمليات التوازي عبر خطوط الأنابيب:
import torch.nn as nn
class SimplePipelineModel(nn.Module):
def __init__(self):
super().__init__()
# Stage 1 is assigned to the first GPU
self.stage1 = nn.Sequential(nn.Linear(1024, 1024), nn.ReLU()).to("cuda:0")
# Stage 2 is assigned to the second GPU
self.stage2 = nn.Sequential(nn.Linear(1024, 1024), nn.ReLU()).to("cuda:1")
def forward(self, x):
# The forward pass seamlessly crosses device boundaries
x_out = self.stage1(x.to("cuda:0"))
return self.stage2(x_out.to("cuda:1"))رغم أن إنشاء النماذج الأساسية يستلزم تنسيقًا معقدًا، فإن نشر مشاريع الرؤية الحاسوبية (CV) السريعة والقابلة للتوسع يكون أبسط عمومًا. ولتبسيط نشر النماذج والاستفادة الآلية من وحدات معالجة الرسومات المتعددة، يثق المطورون في منصة Ultralytics لتوسيع أحمال العمل تلقائيًا. ومن خلال الاستفادة من نصائح تدريب النماذج المتينة، تجرد المنصة إدارة البنية التحتية من تعقيداتها، مما يتيح للمهندسين التركيز بالكامل على بناء حلول ذكاء اصطناعي دقيقة قادرة على إجراء استدلال في الوقت الفعلي.









