تحليل متوازي للخطوط الأنابيب والفقاعة
Type: Build
Languages: Python
Prerequisites: Phase 19 Track C lessons 42-49
Time: ~90 min
أهداف التعلم
- تقسيم نموذج متسلسل إلى مراحل N وتحاكي خط أنابيب للأمام عبر صفوف N.
- قم بتحديد الميكروبات المخطط M عبر خط الأنابيب باستخدام جدول GPipe (المملء للأمام فقط ثم للخلف) وحسب جزء فقاعة.
- مقارنة الفقاعة مع جدول 1F1B المتداخل المستخدم في Megatron-LM و PipeDream.
- تعيين المرحلة الدفاعية: حساب مساوٍ لكل مرحلة مهم أكثر من عدد المعلمات المساواة لكل مرحلة.
المشكلة
نموذج 70B في fp16 يحتاج إلى 140 جيجا غابايت من المعلمات وحدها. لا يوجد جهاز تصوير عمومي للمستهلك يحمله يقطع الزيرو-3 المعلمات عبر الصفوف ولكن لا يزال يحتاج كل صفوف لجمع الطبقة الكاملة لكل خطوة إلى الأمام، ويدفع ثمن كل طبقة. تتخذ خط الأنابيب المتوازية مسارًا مختلفًا: قطع النموذج إلى مراحل N ووضع مرحلة واحدة على كل صف. ينهي التقدم من الطبقة 1 على الصف 0 ويمتد تنسور التفعيل إلى الصف 1; يمر الصف 1 على الصف 2 ويمتد الصف 2 على الصف 2; وهكذا. تدفقات للخلف في العكس. يقلل الذاكرة خطياً لأن كل صف يحمل فقط مرحلة واحدة؛ الحساب متسلسل، وهو مشكلة الفقاعة.
الفقاعة هي الوقت المتوقف في بداية خط الأنابيب (انتظار أول ميكروباتش للوصول إلى المرحلة الأخيرة) وفي النهاية (انتظار آخر ميكروباتش للخروج مرة أخرى من خلال). مع M microbatches و N مراحل فاكتة فقاعة لكل مرحلة هي (N-1) / ((M+N-1). عند M=8، N=4 هذا هو 27٪. عند M=64، N=4 هو 4.5%. تتقلص الفقاعة عندما يكون لديك العديد من الميكروباتشات في كل خطوة، وهذا يعني أن الحجم الصغير لكل ميكروباتش من الحجم، وهو القيود التي تدفع تصميم الميكروباتش.
المفهوم
flowchart LR R0[rank 0: stage 0 / layer 0] --> R1[rank 1: stage 1 / layer 1] R1 --> R2[rank 2: stage 2 / layer 2] R2 --> R3[rank 3: stage 3 / loss] R3 -.backward.-> R2 R2 -.backward.-> R1 R1 -.backward.-> R0
جدول أعمال GPipe
املأ خط الأنابيب للأمام مع جميع الميكروباتش M قبل بدء أي للخلف؛ ثم تنفذ للخلف في العكس. يجب أن يتم إيقاف تنشيطات كل ميكروباتش حتى تتراجع، لذا تتزايد الذاكرة خطيا مع M. للأمام يأخذ دورات M+N-1، والخلف يأخذ دورات أخرى M+N-1. العمل المفيد لكل مرحلة هو دورات 2M؛ فقاعة لكل مرحلة هو دورات 2 ((N-1). تكسر فقاعة هو (N-1) / ((M+N-1) عندما يستغرق كل من الأمام والخلف وحدة واحدة من الوقت. اختيار M أكبر بكثير من N يخفي الفقاعة.
جدول 1F1B
التوقف: بمجرد أن يصل خط الميكروباتش إلى الأمام إلى المرحلة الأخيرة، ابدأ في التخلف واتركه يتدفق مرة أخرى. يختلف الجدول الزمني واحد للأمام وواحد للخلف لكل مرحلة. الفقاعة لا تزال N-1 ولكن ذاكرة التفعيل هو محدودة من قبل عمق خط الأنابيب، وليس عدد الميكروباتش. خطوط الإنتاج تستخدم 1F1B (ميغاترون، بيبدريم). الدرس ينفذ GPipe أولا لأنه أبسط، و 1F1B كتمارين.
لماذا حساب المساواة لكل مرحلة مهم
إذا استغرق المرحلة 0 50 ms والمرحلة 1 100 ms ، يتم إغلاق كل دورة على المرحلة 1. المرحلات الأخرى 50 ms في الدورة في انتظار مرحلة 1 لتحرير. عدد المعلمات المتساوية هو المحور الخطأ: يهيمن حساب المحول على الاهتمام بالإضافة إلى MLP لكل طبقة ، وترتيب الطبقات لديها العديد من المعلمات ولكن القليل من الحساب. يجب أن يكون تعيين المرحلة متساويا FLOPs لكل مرحلة ، وليس الأوزن لكل مرحلة.
الميكروباتش مقابل اللحظة
يدير خط أنابيب M ميكروباتش من الحجم B كل واحد. حجم اللحظة الفعالة هو M B. التراجع في نهاية خط أنابيب هو التراجع على أمثلة M B المدمجة. يعتمد جزء الفقاعة على M ؛ يرى المحافظ M * B. تعني ضبط M تداول الفقاعة (أدنى مع M عالية) مقابل ذاكرة كل ميكروباتش (ذاكرة تنشيط أعلى مع M عالية ل GPipe).
بناءها
code/main.pyتطبيقات:
PipelineStage: صغيرnn.Moduleالذي يحمل معايير مرحلة واحدة ويعرضforward(activation). . .Pipeline(stages, num_microbatches): ينسق جدول GPipe على مراحل محاكاة باستخدام ساعة جدار محاكاة لكل مرحلة.bubble_fraction(num_stages, num_microbatches): شكل مغلق (N-1) / ((M+N-1).- عرض 4 مراحل يقوم بطبع آثار كل ميكروباتش وقطع الفقاعة المقاسة
إشغله
bashpython3 code/main.pyالناتج: مخطط غانت مرحلة بكمية صغيرة و نسبة الفقاعة مقابل التنبؤات في الشكل المغلق.
أنماط الإنتاج في البرية
ثلاثة أنماط تقسيم خط الأنابيب متوازية بما فيه الكفاية للشحن.
Activation checkpointing pairs with pipeline.مع M microbatches في الطيران على GPipe ، تصل ذاكرة التفعيل إلى M × 1 microbatch. يقوم تفتيش التفعيل بإعادة حساب المضي قدما في الوقت الخلفي ، وتداول الحساب مقابل الذاكرة. الجمع هو ما يجعل خط الأنابيب قابلاً للتحكم في تسلسلات طويلة.
Stage balance is measured, not assumed.تقوم فرق الإنتاج بتشغيل مرور تحديد الملفات التي تقيس الحساب الفعلي لكل طبقة (FLOPs و ساعة الحائط) على الأجهزة المستهدفة ، ثم تقسيمها بناء على هذا القياس.--num-layers-per-stageيوافق العلم على قائمة تسمح بإعداد الطبقات غير المتساوية عندما تكون للمراحل تكلفة طبقة مختلفة.
Send-recv schedule must avoid deadlock.خط أنابيب يستخدم كل مرحلة لإرسالها قبل أن تتلقى قفلات مسدودة على السلك. التحديد القياسي هو التقاط بينهما: مرحلة مرتبة متساوية ترسل أولا ثم recv، مرحلة مرتبة غير مرتبة recv أولا ثم ترسل. جدول الدروس يتم ترتيبها صراحة حتى يكون النمط مرئيًا.
استخدمها
أنماط الإنتاج:
- Megatron-LM.المرجح للمناقلة في النزول. يستخدم 1F1B ويدعم التنسور + النزول + البيانات الموازية مجتمعة.
- DeepSpeed Pipeline.يدمج مع زرو؛ خط أنابيب زرو-1 + هو مزيج شائع لأكبر النماذج المفتوحة.
- PyTorch Pipe.غلاف خط أنابيب "بيتورش" الأصلي، بني على
torch.distributed.pipeline.sync.Pipe. . .
أرسله
الدرس 80 تخزين شرائح المعلمات لكل مرحلة في نقطة التفتيش المقطوعة. الدرس 81 يكوّن DDP + ZeRO + خط الأنابيب على التجربة من نهاية إلى نهاية (في الروح؛ يحافظ التجربة على محاكاة خط الأنابيب لفترة تشغيل).
التمارين
- تنفيذ 1F1B وتحقق من أن الجزء الفقري يطابق GPipe ولكن ذاكرة التفعيل محدودة.
- تحليل الوقت الحقيقي لكل مرحلة على نموذج أعمق وإعادة توازن المراحل عن طريق قياس الساعة الحائطية.
- إضافة تراكم التدفق عبر الميكروباتشات خط الأنابيب والتحقق من التدفق يساوي التدفق من المكافئ كاملة المجموعة إلى الأمام.
- إزواج خط الأنابيب مع نقطة التفتيش التشغيل وقياس انخفاض الذاكرة مقابل تكلفة الحساب.
- الجمع بين خط الأنابيب مع DDP (كل صفوف خط الأنابيب يتم تكرارها عبر مجموعة متوازية للبيانات) والعقل من خلال جدول 2D.
الشروط الرئيسية
| Term | What people say | What it actually means |
|---|---|---|
| Pipeline | "Model parallel along depth" | One stage per rank, activations flow stage to stage |
| Bubble | "Pipeline idle time" | (N-1) steps at start + end where some stages have no work |
| Microbatch | "Slice of the batch" | One forward/backward unit; bubble shrinks as M grows |
| GPipe | "Fill then drain" | All M forwards before any backward; high activation memory |
| 1F1B | "Interleaved schedule" | One forward one backward per stage; bounded activation memory |
المزيد من القراءة
- Huang et al, GPipe: Efficient Training of Giant Neural Networks
- Narayanan et al, PipeDream: Generalized Pipeline Parallelism for DNN Training
- Megatron-LM pipeline parallel docs
- المرحلة 19 الدروس 76 - البدائيات إرسال / استرداد المخطط يستخدم
- المرحلة 19 الدروس 78 - زرو هو متقاطع إلى خط الأنابيب وغالبا ما يجمع
This free lesson is part of the AI Engineering from Scratch curriculum. Read the full explanation, run the lesson code, and verify the result in the interactive reader or from the repository source.
Browse the complete course catalog or open this lesson on GitHub.