التدريب الموزع في عام 2026: DDP، وFSDP2، وDeepSpeed، وMegatron، ومحاور التوازي الخمسة
بمجرد امتلاكك لأكثر من وحدة معالجة رسومية (GPU) في جهازك، يصبح أمامك خيار. تهيمن أربع حزم برمجية مفتوحة المصدر على التدريب الموزع اليوم - PyTorch DDP وPyTorch FSDP2 وMicrosoft DeepSpeed وNVIDIA Megatron-Core - بالإضافة إلى TorchTitan كمرجع جديد للتدريب واسع النطاق باستخدام PyTorch الأصلي. كل منها يحل مشكلة مختلفة. اختيار الحزمة الخاطئة يُهدر أسابيع: إما أن النموذج لا يتناسب مع النظام وتكتشف ذلك في الخطوة 30 مع عطل بسبب نفاد الذاكرة، أو أنك بالغت في تصميم النظام لحمل عمل كان بإمكان DDP إنجازه في عُشر وقت التصميم.
تُقدّم هذه المقالة وجهة نظر المشتري والمهندس المعماري حول التدريب الموزّع. وتستعرض محاور التوازي الخمسة، والأطر الأربعة (التي أصبحت الآن خمسة) التي تجمع بينها، والوصفات العملية التي تُجدي نفعًا على أجهزة كينتينو - وتحديدًا معالجات RTX 5090 و4090 وRTX Pro 6000 Blackwell رباعية وثمانية النوى على خوادم AMD EPYC، مع PCIe Gen5 وشبكة إيثرنت أو InfiniBand بين العُقد. والخلاصة واضحة في بداية المقالة، فلا داعي لتكرارها: معظم عملاء كينتينو يُجرون عمليات ضبط دقيقة، لا تدريبًا مُسبقًا، ويُغطي FSDP2 على عقدة واحدة بثمانية معالجات رسومية 90% من احتياجات الضبط الدقيق. ولا يُجدي استخدام Megatron-Core والتوازي ثلاثي الأبعاد نفعًا إلا عند التدريب المُسبق من الصفر على نطاق يتجاوز 30 مليار، وهو نطاق أصغر بكثير مما تُشير إليه الحملات التسويقية.
المحاور الخمسة
تتألف جميع أطر التدريب الموزع الحديثة من مجموعة فرعية من محاور التوازي الخمسة نفسها. وهي ليست بدائل، إذ تجمع وصفات النماذج الكبيرة ثلاثة أو أربعة منها في آن واحد. انظر إلى عمود الاتصال؛ فهو جوهر الأمر.
| محور | ما يقسمه | خطوة التواصل | هل تستهلك الكثير من النطاق الترددي؟ | ملاحظة |
|---|---|---|---|---|
| البيانات المتوازية (DP) | الدفعة - كل رتبة لها نموذج كامل | تقليل جميع التدرجات مرة واحدة لكل خطوة | معتدل | خط الأساس؛ كل من DDP وFSDP DP |
| التوازي الموتري (TP) | عملية ضرب المصفوفات لكل طبقة عبر وحدات معالجة الرسومات | تقليل الكل لكل طبقة × 2 (attn + FFN) | ثقيل جدا | يُفضّل تقنية NVLink؛ ويُعاني من مشاكل في PCIe |
| خط الأنابيب الموازي (PP) | الطبقات موزعة على مراحل | التنشيط عند حدود المرحلة | خفيف | يُحسّن زمن استجابة الفقاعات، ويرفع معدل نقل البيانات |
| التوازي التسلسلي/السياقي (SP/CP) | أبعاد التسلسل عبر وحدات معالجة الرسومات | تجمع جميع أعضاء فريق KV / عمليات التفعيل | معتدل إلى ثقيل | يُمكّن من التدريب بملايين الرموز |
| الخبير الموازي (EP) | خبراء وزارة التعليم في مجال وحدات معالجة الرسومات | من الكل إلى الكل لكل طبقة من طبقات MoE | ثقيل متفجر | وزارة التعليم فقط |
يصرخ DP مرة واحدة لكل خطوة. يصرخ TP مرتين لكل خطوة طبقةيُصدر PP همسةً واحدةً لكل مرحلة. بينما يُصدر SP/CP صرخةً واحدةً لكل كتلة انتباه، ولكن على بُعدٍ مختلف. أما EP فيُطبّق آلية "الكل إلى الكل" فقط على الطبقات النشطة في MoE. ويُحدد هذا العمود الواحد مكان كل محور - داخل مربع سريع، أو عبر نسيج أبطأ.
إنّ "التوازي ثلاثي الأبعاد" الذي يظهر في كل مدونة لشركة NVIDIA هو DP × TP × PPبإضافة SP وEP، يصبح النظام رباعي الأبعاد أو خماسي الأبعاد، وهو ما يُعدّ تغييرًا في الترميز أكثر من كونه تغييرًا في البنية. المهم هو التخطيط: TP داخل العقدة (حيث يكون عرض النطاق الترددي منخفضًا)، وPP بين العقد (حيث يكون عرض النطاق الترددي مرتفعًا)، وDP في الأعلى لزيادة الإنتاجية. يُوضع SP بجانب TP؛ أما EP فيُطبّق فقط على MoE.
المراجع المتقاطعة: يتم فك تغليف عرض النطاق الترددي داخل العقدة المتوازية للموتر في كيه07 ، عقوبة NVLink مقابل PCIe في N03والنسيج بين العقد في N08.
DDP — عندما يكون النموذج مناسبًا وتريد فقط إنتاجية أكبر
يُعدّ PyTorch DDP (التوزيع المتوازي للبيانات) الحل الأقدم والأبسط والأكثر دقةً عندما يكون النموذج مناسبًا لوحدة معالجة رسومية واحدة. يحتفظ كل مستوى بنسخة كاملة من النموذج وحالة المُحسِّن. في كل خطوة، يُجري كل مستوى حساباته الخاصة بالتحويل الأمامي والخلفي وحساب التدرج على دفعته الصغيرة. ثم تقوم عملية اختزال واحدة بجمع التدرجات عبر المستويات، ويُطبّق الجميع التحديث نفسه.
يُعدّ DDP في PyTorch 2.x هو نفسه DDP الذي كان عليه دائمًا، مع تحسينين جديرين بالذكر: أكثر قوة static_graph=True مسار للرسوم البيانية الملائمة للمترجم، وتكامل أكثر إحكامًا مع torch.compileنمط الاتصال لم يتغير - عملية اختزال واحدة لكل خطوة، وتداخل مع التراجع، وتوسع خطيًا حتى تهيمن عملية الاختزال الكاملة.
متى يكون DDP هو الحل الصحيح:
- يمكن تحميل النموذج الكامل، بالإضافة إلى حالات المُحسِّن ووظائف التنشيط، على وحدة معالجة رسومية واحدة. بالنسبة للمُحسِّنات من نوع Adam التي تستخدم أوزان FP32 الرئيسية، فإن القاعدة العامة هي حوالي 16 بايت لكل مُعامل يستهلك نموذج بحجم 8 بايتات من الذاكرة لتخزين الحالة القابلة للتدريب فقط (4 بايتات للأوزان، 4 بايتات للتدرجات، 8 بايتات للمُحسِّن) بالإضافة إلى التنشيطات. نموذج بحجم 8 بايتات يساوي 128 جيجابايت من البيانات، وهو ما يتسع على بطاقة رسومات RTX Pro 6000 Blackwell واحدة (بسعة 96 جيجابايت) فقط مع دقة مختلطة وأوزان رئيسية من BF16. مع معلمات أقل من 8 بايتات، يكون DDP مناسبًا لبطاقة رسومات 5090 واحدة؛ أما مع معلمات أعلى من ذلك، فيُنصح باستخدام FSDP2.
- أنت تريد أقصى إنتاجية، وليس أقصى حجم للنموذج. يتميز DDP بأقل نسبة اتصال إلى حساب مقارنةً بأي نهج آخر للمعالجة المتوازية للبيانات، وذلك بسبب تقليل التدرجات. مرة لكل خطوة، بعد كل العمل العكسي المحلي.
- أنت تقوم بتطبيق عمليات نشر التعلم المعزز، أو LoRA، أو أي إعداد حيث تحتوي كل رتبة على محول صغير قابل للتدريب فوق أوزان أساسية مجمدة.
عندما يكون DDP خاطئًا: لا يتناسب النموذج. الحل ليس "دفعة أصغر". الحل هو FSDP2.
torchrun --standalone --nproc-per-node=8 train.py
هذا هو المشغل بأكمله. DDP هو المشغل الافتراضي الممل الذي ينساه الجميع، وهو الأسرع الذي يمكنك تشغيله في حالات العمل المناسبة.
FSDP2 — الوضع الافتراضي الجديد لكل ما لا يستطيع DDP التعامل معه
تقوم تقنية FSDP (التوازي الكامل للبيانات المجزأة) بتجزئة معلمات النموذج، والتدرجات، وحالات المُحسِّن عبر مجموعة البيانات المتوازية. تخزن كل وحدة معالجة رسومية (GPU) البيانات. 1/N من بين المعاملات. لإجراء تمرير أمامي، يقوم خوارزمية الترتيب بتجميع الطبقة التي تحتاجها حاليًا، ثم يُجري الحساب، ويتجاهل الأوزان المُجمّعة. ينخفض استهلاك الذاكرة بمقدار N ضعف تقريبًا مقارنةً بخوارزمية DDP؛ بينما يزداد استهلاك الاتصال نظرًا لتجميع كل طبقة وإعادة تجميعها.
قصة عام 2025 هي FSDP2. قام برنامج FSDP الأصلي (FSDP1) بتجميع مجموعات من المعلمات في معلمة واحدة FlatParameterمما جعل تحليل سلوك كل مُعامل على حدة - كالتجميد الجزئي، وأنواع البيانات المختلطة، وإعدادات المُحسِّن لكل مُعامل - أمرًا شاقًا أو مستحيلاً. أعاد FSDP2 كتابة البنية الداخلية بالاعتماد على DTensor: يبقى كل موتر عددًا حقيقيًا. torch.Tensor يتم تقسيم هذا العنصر على طول بُعده الصفري عبر الرتب. وقد تغيرت واجهة برمجة التطبيقات التي يتعامل معها المستخدم من FSDP(model, ...) إلى fully_shard(model, ...).
ما الذي يقدمه برنامج FSDP2 فعلياً مقارنةً ببرنامج FSDP1، استناداً إلى المعايير المنشورة وعمليات التشغيل الخاصة بنا:
-
انخفاض في ذاكرة وحدة معالجة الرسومات بنسبة 7% تقريبًا على جهاز Llama 2 7B بنفس التكوين، لأن FSDP2 يتجنب
record_streamنمطٌ يُثبّت الذاكرة بشكلٍ متشائم. -
زيادة في الإنتاجية بنسبة 1.5% تقريبًا عند التكافؤ، وتصل إلى زيادة في الإنتاجية بنسبة 50% عند دمجها مع
torch.compileوtorchaoتدريب float8 على أجهزة من فئة Hopper. - قواميس الحالة المجزأة التي يتم تحميلها بسرعة وإعادة تجزئتها بسلاسة عبر تخطيطات التوازي المختلفة - كان من الصعب للغاية إعادة تشكيل تنسيق نقطة التفتيش FSDP1 بين التدريب والاستدلال.
- تجميد جزئي للمعلمات بدون حركات بهلوانيةوهذا أمر مهم بالنسبة لتقنية LoRA وتدريب المحولات.
FSDP1 هو تم إيقاف هذه الميزة اعتبارًا من PyTorch 2.11ينبغي أن تستخدم الأعمال الجديدة fully_shard. القديم FullyShardedDataParallel لا يزال الغلاف موجودًا لأغراض التوافق، ولكنه في طريقه للإزالة.
يكشف FSDP2 أيضًا عن استراتيجيتين للتجزئة تحددان مكان وجود النموذج:
- شظية كاملة. يتم توزيع المعلمات بالكامل عبر جميع الرتب (الوضع الافتراضي لـ FSDP1). أقل استهلاك للذاكرة، وأعلى مستوى من الاتصال.
- شظية هجينة. المعلمات المجزأة في غضون عقدة و منسوخة بين العُقد. داخل العقدة الواحدة، يتم الاتصال عبر PCIe/NVLink (سريع). بين العُقد، لا يعبر سوى خوارزمية تقليل التدرج عبر الشبكة البطيئة. هذه هي الحالة المثلى لعقدتين إلى أربع عُقد على شبكة إيثرنت/IB بسرعة 100/200 جيجابت في الثانية.
عندما يكون FSDP2 هو الإجابة الصحيحة (حالة كينتينو النموذجية):
- ضبط دقيق من 8 إلى 70 مليار على عقدة واحدة بثمانية وحدات معالجة رسومية. تجزئة كاملة، BF16، تفعيل نقاط التحقق من التدرج.
torch.compile. فعله. - ضبط دقيق من 70 إلى 405 بايت عبر 2 إلى 4 عقد. تجزئة هجينة مع تجزئة كاملة داخل كل عقدة، يتم نسخها عبرها.
- أي شيء يتعلق بـ LoRA / QLoRA — تتفوق معالجة المعلمات الجزئية في FSDP2 على FSDP1 هنا بشكل مباشر.
from torch.distributed.fsdp import fully_shard, MixedPrecisionPolicy
mp = MixedPrecisionPolicy(param_dtype=torch.bfloat16, reduce_dtype=torch.float32)
for block in model.transformer_blocks:
fully_shard(block, mp_policy=mp)
fully_shard(model, mp_policy=mp)
تم إطلاقها بنفس طريقة إطلاق DDP، عبر torchrunالغلاف هو الشيء الوحيد الذي يتغير.
لا تزال تقنية DeepSpeed ومستويات Zero موجودة، لكنها لم تعد الوضع الافتراضي.
DeepSpeed هي حزمة التدريب الموزع من مايكروسوفت. وقد اشتهرت بكونها... صفر (مُحسِّن التكرار الصفري)، الذي ظهر قبل سنوات من FSDP وحدد نهج التجزئة الحديثة.
| مستوى | ما الذي يتم تقسيمه | توفير الذاكرة مقابل DDP | الاتصال مقابل DDP |
|---|---|---|---|
| صفر-1 | الدول محسن | ~4× | نفسه |
| صفر-2 | حالات المُحسِّن + التدرجات | ~8× | أكثر قليلا |
| صفر-3 | حالات المُحسِّن + التدرجات + المعاملات | خطي في N | ~1.5× DDP |
يُعدّ بروتوكول ZeRO-3 مكافئًا من الناحية المعمارية لبروتوكول FSDP ذي التجزئة الكاملة. فهما يحلان المشكلة نفسها باستخدام نفس آليات الاتصال.
الواقع في الفترة 2025-2026: لقد تفوقت FSDP2 على DeepSpeed في حالة استخدام LLM الكثيفة. متوافق مع PyTorch، لا يتطلب حزمة إضافية، ومتكامل مع torch.compileتُستخدم نفس الوصفة في Hugging Face Transformers و Accelerate و TorchTitan. تُظهر الاختبارات المعيارية الداخلية من Lightning و Hugging Face أن FSDP يعمل بتقسيم كامل أسرع من 2 إلى 5 مرات لكل تكرار مقارنةً بـ ZeRO-3 في بعض الإعدادات، على الرغم من أن DeepSpeed يستعيد بعضًا من كفاءته في النماذج الكبيرة جدًا (10 مليارات فأكثر) حيث لا تزال مسارات تفريغ وحدة المعالجة المركزية و NVMe مفيدة حقًا.
لا يزال من المهم معرفة المزيد عن تقنية DeepSpeed لثلاثة أسباب:
- تفريغ بيانات Zero-Infinity. إذا كنتَ مضطرًا لضبط نموذج لا يتناسب مع ذاكرة وحدة معالجة الرسومات الإجمالية على الإطلاق - على سبيل المثال، نموذج 405 بايت على جهاز Blackwell مزود بأربع وحدات RTX Pro 6000 - فإن DeepSpeed يُمكنه نقل المعلمات إلى ذاكرة الوصول العشوائي لوحدة المعالجة المركزية (رخيصة، بطيئة) وإلى NVMe (أرخص، أبطأ بكثير). يُوفر FSDP أيضًا إمكانية نقل المعلمات إلى وحدة المعالجة المركزية، لكن مسار NVMe في DeepSpeed أكثر تطورًا. يُعد هذا مفيدًا في حالة "لديّ جهاز واحد ونموذج صعب"، ولكنه ليس الحل الأمثل إذا كان بإمكانك استئجار أو شراء عقدة ثانية.
- التوازي التسلسلي بين DeepSpeed وUlysses. مخطط تسلسلي متوازٍ فعال من حيث الاتصال، يستخدم آلية "الكل إلى الكل" بدلاً من آلية "التجميع الحلقي" للانتباه. تم إثبات فعاليته مع سياقات تصل إلى مليون رمز على 64 وحدة معالجة A100، وتدريب نموذج Llama-8B على سياقات تصل إلى 15 مليون رمز على 32 وحدة معالجة H100 في بحث منشور عام 2025. إذا كنت تسعى تحديدًا إلى تدريب سياقات طويلة جدًا، فإن Ulysses لا يزال متفوقًا على تطبيق Megatron المتوازي للسياق في بعض الحالات.
- DeepSpeed-MoE. التدريب المختلط للخبراء بالتوازي مع الخبراء. أقل أهمية للضبط الدقيق، ولكنه ذو أهمية بالغة إذا كنت تقوم بالتدريب المسبق على منهجية MoE.
بالنسبة لمعظم عمليات الضبط الدقيق لعملاء كينتينو، يُعدّ FSDP2 الخيار الأمثل، إلا إذا كان لديك سببٌ مُحدد لاستخدام DeepSpeed (مثل السياق الطويل، أو تفريغ وحدة المعالجة المركزية/NVMe، أو التدريب المُسبق باستخدام MoE). ويتجه النظام البيئي بشكلٍ واضح نحو FSDP2.
ميجاترون-إل إم، ميجاترون-كور، نيمو — حيث يعيش الحديد الثقيل
بدأ مشروع ميجاترون كبحثٍ عن تقنية Transformer المتوازية الموترية من شركة NVIDIA في عام 2019. واليوم، تتكون هذه العائلة من ثلاث طبقات:
- ميجاترون- إل إم — قاعدة بيانات البحث الأصلية. لا تزال مستخدمة؛ ولا تزال تُحدَّث.
- ميجاترون-كور — نسخة المكتبة المعيارية. وحدات بناء قابلة للتركيب لأنظمة TP/PP/DP/EP/CP، والدقة المختلطة (FP16/BF16/FP8/FP4)، وهياكل محولات المرجع. هذا ما تقوم بدمجه فعليًا.
- نفيديا نيمو — إطار عمل متكامل مبني على Megatron-Core. وصفات، مسارات بيانات، مواءمة، نشر.
يُعدّ Megatron-Core الإطار الذي يحقق النجاح في أعلى المستويات، وذلك تحديدًا لأنه يُنفّذ التوازي الموتري، والتوازي الخطي، والتوازي التسلسلي، والتوازي السياقي، والتوازي الخبير في شبكة واحدة قابلة للتركيب. عندما تقوم بتدريب نموذج كثيف بحجم 405 مليار على 512+ وحدة معالجة رسومية، لا يمكنك تجنب الجمع بين ثلاثة منها على الأقل، وMegatron-Core هو التركيب الأكثر انتشارًا والأكثر اختبارًا.
تتوافق إرشادات التوازي الخاصة بمعالج ميجاترون لعام 2026، والواردة في وثائق NVIDIA نفسها، مع واقع الأجهزة:
| أجهزة التبخير | المحاور الأساسية الموصى بها |
|---|---|
| عقدة واحدة، NVLink | يصل عدد نقاط النقل إلى 8 داخل العقدة |
| عقد متعددة، InfiniBand NDR | TP داخل العقدة، PP عبر العقد |
| شبكة محدودة (إيثرنت) | قلل من TP، وفضل PP للعقد المتقاطعة |
| تسلسلات طويلة | أضف نقطة تحكم؛ فعّل نقطة الخدمة أينما كانت نقطة الاتصال قيد التشغيل |
يوضح لك هذا الجدول سبب وجود ميجاترون. إنه الإطار الذي يعتمد مؤلفوه على حسابات عرض النطاق الترددي التي وصفناها في N03 و كيه07 وتم تعديل وصفاتها خصيصاً لذلك.
متى يُعتبر ميجاترون مبالغًا فيه؟ في أي عملية ضبط دقيق لعقدة واحدة، أو أي نموذج يتوافق مع ذاكرة FSDP2، أو أي عبء عمل لا يتطلب معالجة TP. صحيح أن آلية معالجة TP في ميجاترون أسرع من معالجة TP المُصممة يدويًا على PCIe، إلا أن معالجة TP على PCIe لا تزال بطيئة - انظر إلى أرقام K07. تكمن قوة ميجاترون في مكونات SXM التي لا تُصنّعها شركة كينتينو.
يُعدّ ميجاترون الخيار الأمثل في الحالات التالية: التدريب المسبق لنماذج كثيفة البيانات تتراوح بين 70 مليار و405 مليار بيانات أو أكثر على أجهزة NVLink مستأجرة أو مملوكة، أو بناء بنية تحتية للتدريب الإنتاجي لمختبر أبحاث. إذا كنتَ من هؤلاء، فمن المحتمل أنك تستخدم بالفعل نظام NeMo البيئي.
تورش تايتان - المرجع الجديد
يُعدّ TorchTitan مرجعًا أصليًا للتدريب واسع النطاق من Meta، مُصممًا خصيصًا لـ PyTorch، وقد تم قبوله في مؤتمر ICLR 2025، وهو الآن المثال الفعلي لـ "كيف ينبغي أن تبدو وصفة TP × PP × FSDP2 × CP في عام 2026؟" فهو لا يبتكر توازيًا جديدًا، بل يُركّب اللبنات الأساسية التي يوفرها PyTorch بالفعل.fully_shard, torch.distributed.tensor.parallel, pipelining، DTensor) في نص تدريب متوازي رباعي الأبعاد نظيف مع نقاط تفتيش مجزأة غير متزامنة، torch.compileو float8.
لماذا يُعدّ الأمر مهماً حتى لو لم تستخدمه بشكل مباشر؟
- انها مثال نموذجي كيفية دمج FSDP2 مع TP و PP بدون إطار عمل تابع لجهة خارجية.
- تأتي واجهات برمجة التطبيقات نفسها في PyTorch الأساسي. لا يوجد شيء سحري.
- أصدرت AMD نسخة محسّنة من TorchTitan لـ ROCm في أواخر عام 2025؛ كما أن شراكة Lightning AI التي تم الإعلان عنها في أكتوبر 2025 تجعل وصفات TorchTitan قابلة للتشغيل على Lightning Studios.
بالنسبة لعملاء فئة Kentino، يُعدّ TorchTitan مرجعًا للقراءة أكثر من كونه إطار عمل للتطبيق. إذا كنت تُجري عمليات ضبط دقيقة، فإنّ Accelerate أو Axolotl عبر FSDP2 أكثر سهولة في الاستخدام. أما إذا كنت تُجري تدريبًا مسبقًا على نطاق متوسط (8-64 وحدة معالجة رسومية) على أجهزة قياسية، فإنّ TorchTitan يُنافس NeMo ويُعدّ أقل استهلاكًا للموارد التشغيلية.
مصفوفة الإطار
| الإطار | محاور التوازي | هل تمت صيانته؟ | أفضل ل |
|---|---|---|---|
| باي تورش DDP | DP | نعم، مستقر | يناسب النموذج كل وحدة معالجة رسومية على حدة؛ أقصى إنتاجية |
| PyTorch FSDP1 | DP (مجزأ) | تم إيقاف الإصدار 2.11 | لا تبدأ من هنا |
| PyTorch FSDP2 | DP (مجزأ)، يتكون من TP/PP/CP | نعم نشيط | إجابة الضبط الدقيق للنموذج في عام 2026 |
| DeepSpeed ZeRO | DP (مجزأ)، تفريغ وحدة المعالجة المركزية/NVMe | نعم نشيط | سياق طويل جدًا يعتمد على تفريغ البيانات (يوليسيس)، وزارة التعليم |
| ميجاترون-كور / نيمو | TP، PP، SP، CP، EP، DP | نعم، نشيط جداً | أكثر من 70 مليار عملية تدريب مسبق، مجموعات SXM/NVLink |
| تيتان الشعلة | FSDP2 + TP + PP + CP + float8 | نعم، مرجع | التدريب المسبق الحديث على حزمة PyTorch الأصلية |
| تسريع التردد العالي | غلاف حول DDP/FSDP/DS | نعم نشيط | مشغل سهل الاستخدام، يُخفي الواجهة الخلفية |
| قنفذ البحر | غلاف حول Accelerate/FSDP | نعم نشيط | الضبط الدقيق، ومجموعات البيانات، ووصفات لتقنية LoRA/QLoRA |
لا تُعدّ كلٌّ من Accelerate و Axolotl استراتيجيتين منفصلتين للتوازي، بل هما بمثابة غلاف للواجهات الخلفية المذكورة أعلاه. سيستخدم معظم عملاء Kentino الذين يقومون بضبط الأداء Axolotl بدلاً من FSDP2 دون تفكير، وهذا أمرٌ صحيح.
ميزانية الاتصالات - لماذا تحد شبكتك من النموذج
إشارة الصليب: N08 يشرح هذا العرض عملية RDMA وحسابات الوصلة الصاعدة؛ وهذه هي وجهة النظر الخاصة بالتدريب.
بالنسبة للمعالجة المتوازية للبيانات (DDP أو FSDP)، فإن الاتصال بين الرتب لكل خطوة يتناسب تقريبًا مع عدد المعلمات (التدرجات المراد تقليلها). بالنسبة للتوازي الموتري، فهو يتناسب مع حجم التنشيط × عدد الطبقات — أكبر بكثير في كل خطوة.
حجم التدرج التقريبي لخطوة واحدة عند BF16:
| حجم النموذج | بايتات التدرج/الخطوة | تقليل وقت التحميل بالكامل بسرعة 25 جيجابايت/ثانية (فئة NDR HDR) | بسرعة 12.5 جيجابايت/ثانية (100 جيجابت إيثرنت) |
|---|---|---|---|
| 8B | 16 جيجا بايت | ~0.6 ثانية | ~1.3 ثانية |
| 70B | 140 جيجا بايت | ~5.6 ثانية | ~11 ثانية |
| 405B | 810 جيجا بايت | ~32 ثانية | ~65 ثانية |
تستغرق عملية الاختزال الكاملة لـ 70 بايت وحدها 5.6 ثانية على شبكة بسرعة 200 جيجابت في الثانية. إذا استغرقت عملية الحساب الأمامي والخلفي في خطوة واحدة 5 ثوانٍ أيضًا، فأنت بالفعل مقيد بنسبة 50% بالاتصال؛ وإذا استغرقت عملية الحساب ثانيتين، فأنت متوقف عن استخدام الشبكة بنسبة تزيد عن 70%. لهذا السبب فإن سرعة 100 جيجابت إيثرنت تعيق تدريب 70B+، وتحتاج إلى 400 جيجابت إيثرنت / NDR IB. تزداد سرعة الحوسبة باستمرار؛ ويجب أن تواكب الشبكة هذا التطور وإلا ستبقى وحدات معالجة الرسومات خاملة.
يُخفي FSDP2 بعضًا من ذلك من خلال التداخل (يبدأ بتجميع الطبقة التالية أثناء حساب الطبقة الحالية). أما التجزئة الهجينة فتُخفي المزيد من خلال الاحتفاظ بـ ميل يتم تطبيق عملية الاختزال الكامل داخل بنية الشبكة السريعة داخل العقدة، مع تقليل التدرجات المكررة فقط عبر العقد. الأرقام المذكورة أعلاه تمثل أسوأ حالة لبروتوكول FSDP ذي التجزئة الكاملة عبر العقد دون تداخل.
في المعالجة المتوازية باستخدام الموترات، يتناسب معدل الاتصال لكل رمز مع حجم الطبقة المخفية وعدد الطبقات. الأرقام في كيه07 أظهر السبب: حوالي 80 ميجابايت لكل رمز مميز تم إنشاؤه أثناء فك التشفير، وحوالي 300 جيجابايت لكل تعبئة مسبقة على 70 مليار في الدفعة 32. هذا هو النظام الذي يكون فيه PCIe (50 جيجابايت/ثانية واقعية) أبطأ بحوالي 14 مرة من NVLink (700+ جيجابايت/ثانية واقعية)، وحيث لا يعمل التدريب المسبق لنموذج كثيف بحجم 70 مليار+ على PCIe بكفاءة مقبولة.
وصفات حقيقية
ضبط دقيق لـ 8B Llama، عقدة واحدة بـ 8 وحدات معالجة رسومية — FSDP2
المكونات المادية: 8× RTX 5090 أو 8× RTX Pro 6000 Blackwell، مضيف EPYC، لا حاجة إلى نسيج بين العقد.
torchrun --standalone --nproc-per-node=8 \
finetune.py \
--model meta-llama/Llama-3.1-8B \
--batch-size 1 --grad-accum 16 --seq-len 4096 \
--bf16 --fsdp full_shard --fsdp-reshard-after-forward \
--gradient-checkpointing --torch-compile
المتوقع: معدل نقل بيانات إجمالي يبلغ حوالي 2000 توك/ثانية عند BF16، ويتوافق بسلاسة مع عمليات التنشيط/KV، ويتولى بروتوكول FSDP2 كامل التجزئة عبر PCIe Gen5 عملية تقليل التدرج بالكامل داخل الجهاز. وهذا ما تبدو عليه 90% من عمليات الضبط الدقيق لـ Kentino.
70B Llama ضبط دقيق، عقدتان 2× 8-GPU — تجزئة هجينة FSDP2
المكونات المادية: 2× 8× RTX Pro 6000 Blackwell، 200 جيجابت في الثانية IB أو 100 جيجابت في الثانية RoCE بين العقد.
torchrun --nnodes=2 --nproc-per-node=8 \
--rdzv-backend=c10d --rdzv-endpoint=node0:29500 \
finetune.py \
--model meta-llama/Llama-3.3-70B \
--batch-size 1 --grad-accum 32 --seq-len 4096 \
--bf16 --fsdp hybrid_shard \
--gradient-checkpointing --torch-compile \
--activation-cpu-offload
يحتفظ نظام التجزئة الهجين بالتجزئة الكاملة داخل كل عقدة من عقدات 8 وحدات معالجة رسومية، ويكررها عبر العقدتين. ينقل نسيج الربط بين العقدتين فقط بيانات التدرجات المكررة بعد تقليل تشتتها - حوالي 70 جيجابايت لكل خطوة في BF16، وحوالي 3 ثوانٍ على شبكة IB بسرعة 200 جيجابت في الثانية. يخفي التداخل معظم هذه البيانات. عند سرعة 100 جيجابت في الثانية، تستغرق الخطوة نفسها حوالي 5-6 ثوانٍ، وتبدأ وحدات معالجة الرسوميات في إظهار وقت خمول؛ ومع ذلك، لا تزال الوصفة تعمل، ولكن بشكل أبطأ لكل دورة.
405 مليار عملية تدريب مسبق، 8 عقد × 8 وحدات معالجة رسومية — ميجاترون-كور ثلاثي الأبعاد
المكونات المادية: 8 وحدات NVLink/SXM بثمانية معالجات رسومية، وواجهة NDR IB بسرعة 400 جيجابت في الثانية. لم يتم بناؤها بواسطة Kentino - من أجل الإكمال.
# Megatron-Core launcher (abbreviated)
torchrun --nnodes=8 --nproc-per-node=8 \
pretrain_gpt.py \
--tensor-model-parallel-size 8 \
--pipeline-model-parallel-size 8 \
--sequence-parallel \
--context-parallel-size 1 \
--num-layers 126 --hidden-size 16384 --num-attention-heads 128 \
--seq-length 8192 --micro-batch-size 1 --global-batch-size 2048 \
--bf16 --use-flash-attn --transformer-impl transformer_engine
TP=8 × PP=8 = 64 الرتب لكل نسخة متماثلة؛ 8 nodes × 8 GPUs = 64 GPUs إجمالاً، نسخة واحدة بالضبط. لزيادة الإنتاجية، قم بالتوسيع إلى نسخ متعددة، واضرب في DPهنا تبرز أهمية ميجاترون. فالنموذج نفسه على منصة FSDP2 وحدها سيقضي معظم وقته في الاتصالات بين الرتب؛ أما التصميم ثلاثي الأبعاد فيضع أثقل الاتصالات (TP) داخل نطاق NVLink.
رأي صريح لزبائن كينتينو
معظم عملاء كينتينو لا يقومون بالتدريب المسبق. بل يقومون بضبط نماذج أساسية مفتوحة الوزن - مثل لاما، وكوين، وميسترال، وأحيانًا جيما - على بيانات مجالهم، باستخدام LoRA أو QLoRA أحيانًا، وأحيانًا أخرى بضبط كامل. لهذا الغرض، يكون اختيار الإطار البرمجي كالتالي:
- نموذج واحد يناسب وحدة معالجة رسومية واحدة في لعبة Battlefield 16، مع حالة المُحسِّن. استخدم DDP. قم بنسخ النسخ لزيادة الإنتاجية.
- نموذج واحد لا يتناسب مع وحدة معالجة رسومات واحدة ولكنه يتناسب بشكل إجمالي مع عقدة واحدة تحتوي على 8 وحدات معالجة رسومات. استخدم FSDP2 كامل الشظية. هذا يغطي عمليات الضبط الدقيق من 8 إلى 70 مليار.
- نموذج واحد يتناسب بشكل إجمالي عبر عقدتين من 8 وحدات معالجة رسومية. استخدم شظية FSDP2 الهجينة. 70 مليار - 200 مليار عملية ضبط دقيقة.
- نموذج أكبر من ذلك، أو التدريب المسبق من الصفر. هذا هو النقاش الذي ينبغي أن يدور حوله كل من Megatron-Core، وأجهزة SXM، وNDR IB. سنقوم ببناء نظام التخزين ومنصة الإدارة، ولكن عادةً ما يتم استئجار وحدات معالجة الرسومات (GPUs) لهذه المرحلة.
يشكل العملاء الذين يحتاجون فعلاً إلى تدريب متكامل على عدة عقد، والذين يمثلون نسبة 10%، مختبرات بحثية في الغالب، ولديها برامج تدريب مسبق ممولة، وهم على دراية تامة باحتياجاتهم قبل التواصل. أما نسبة الـ 90% المتبقية، فلا ينبغي بيعها مجموعة خوادم، بل ينبغي بيعها عقدة واحدة ذات مواصفات جيدة مزودة بثمانية وحدات معالجة رسومية، مع توفير البنية التحتية اللازمة لعقدة ثانية مستقبلية، مع ترك معدات الشبكة كبند إضافي في خطة الدفع الثانية (P2).
ماذا تفعل بعد ذلك
إذا كنت بصدد تحديد حجم وظيفة تدريبية ولم تختر إطار عمل بعد، فاتبع هذه الخطوات بالترتيب:
- احسب الذاكرة لكل رتبة بدقة هدفك. المعلمات × 2 (BF16) + التدرجات × 2 + المُحسِّن × 8 (حالات Adam FP32) + التنشيطات. إذا كان ذلك يتناسب مع ذاكرة الوصول العشوائي للفيديو (VRAM) الخاصة بوحدة معالجة الرسومات (GPU) مع وجود مساحة كافية، فإن DDP هو الحل الأمثل.
- إذا لم تتسع الذاكرة، فاسأل: هل لدي عقدة واحدة أم عدة عقد؟ عقدة واحدة ← تجزئة كاملة لبروتوكول FSDP2، نهاية المحادثة. عدة عقد ← تجزئة هجينة لبروتوكول FSDP2.
-
قم بإجراء فحص سلامة بسيط. شاهدوا الوقت المخفّض بالكامل في
NCCL_DEBUG=INFOإذا كانت هذه الخطوة هي المهيمنة، فهذا يعني أن حجم الشبكة غير مناسب للنموذج. أمامك خياران: إما استخدام نموذج أصغر أو استخدام شبكة أكبر؛ ولن يفيدك تعديل الإطار. -
لا تلجأ إلى Megatron-Core أو DeepSpeed إلا عندما لا يستطيع FSDP2 القيام بما تحتاجه. "لا يمكن" تعني: الحاجة إلى معالجة متوازية للموتر لنموذج أكبر من ذاكرة العقدة المجمعة، والحاجة إلى تفريغ وحدة المعالجة المركزية/NVMe، والحاجة إلى معالجة متوازية للتسلسل أعلى مما هو مطلوب
--context-parallel-sizeيوفر لك PyTorch، أو يقوم بتدريب MoE مسبقًا. - استخدم Axolotl أو Accelerate لتشغيل الجهاز. يُعدّ إنشاء غلاف FSDP2 يدويًا عملية تعليمية؛ أما في بيئة الإنتاج، فستحتاج إلى إطار عمل يُعالج مجموعة البيانات، ومُجزئ الكلمات، وتنسيق نقاط التحقق، وبنية LoRA التحتية. ويعتمد كل ذلك على FSDP2 في الأساس.
-
نقطة تفتيش مع
torch.distributed.checkpoint(DCP) أو نقطة التفتيش المجزأة غير المتزامنة لـ NeMo. تُعدّ نقاط التفتيش المتزامنة غير المجزأة المكتوبة إلى نظام ملفات الشبكة (NFS) نمطًا من أنماط عام 2022؛ أما في عام 2026، فهي بمثابة مأزق تدريبي ذاتي. انظر كيه06 وذلك لمعالجة الأعطال المرتبطة بهذا الأمر. - كن صادقاً بشأن حجم المجموعة التي تحتاجها فعلاً. إذا كان عملك يعمل على عقدة واحدة بثمانية وحدات معالجة رسومية (GPU) ضمن وقت تشغيل معقول، فلا تدفع مقابل مجموعة من أربع عقد لجعلها أسرع بمقدار 2.5 مرة نظريًا. حسابات التوسع في كيه07 يوضح هذا لماذا يتوقف "المزيد من العقد" عن تقديم المساعدة مبكراً على الأجهزة التجارية.
مقالات مصاحبة: تخزين التدريب الموزع ونقاط التفتيش في كيه04 ، التجميع الاستدلالي في كيه03 معالجة الأعطال في كيه06 ، الحد الأقصى لعرض نطاق PCIe في كيه07 والمفاضلة بين تقنية NVLink وتقنية PCIe في N03. تكمن معادلات الشبكات في N08.
هذا جزء من ويكي كينتينو، وهي سلسلة مرجعية حول الحوسبة الذكية، والروبوتات، والأنظمة التي تربط بينهما. نرحب بالتعليقات والتصويبات على info@kentino.com.