Phase 19: Capstone Projects

تحليل متوازي للخطوط الأنابيب والفقاعة

تفرق التوازي التنسري المصفوفة المتعددة عبر الصفوف. تفرق التوازي للخطوط الأنبوبية النموذج عبر الصفوف، مرحلة واحدة لكل صفوف. تدفق البطاقات الصغيرة من خلال الخطوط الأنبوبية. الوقت الفارغ في البداية والنهاية هو الفقاعة. تقليل ذلك هو الصفوف بأكمله.

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 + خط الأنابيب على التجربة من نهاية إلى نهاية (في الروح؛ يحافظ التجربة على محاكاة خط الأنابيب لفترة تشغيل).

التمارين

  1. تنفيذ 1F1B وتحقق من أن الجزء الفقري يطابق GPipe ولكن ذاكرة التفعيل محدودة.
  2. تحليل الوقت الحقيقي لكل مرحلة على نموذج أعمق وإعادة توازن المراحل عن طريق قياس الساعة الحائطية.
  3. إضافة تراكم التدفق عبر الميكروباتشات خط الأنابيب والتحقق من التدفق يساوي التدفق من المكافئ كاملة المجموعة إلى الأمام.
  4. إزواج خط الأنابيب مع نقطة التفتيش التشغيل وقياس انخفاض الذاكرة مقابل تكلفة الحساب.
  5. الجمع بين خط الأنابيب مع DDP (كل صفوف خط الأنابيب يتم تكرارها عبر مجموعة متوازية للبيانات) والعقل من خلال جدول 2D.

الشروط الرئيسية

TermWhat people sayWhat 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

المزيد من القراءة

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.