موازی دو لوله
Type: Learn
Languages: Python (stdlib, schedule simulator)
Prerequisites: Phase 10 · 05 (distributed training, FSDP, DeepSpeed), Phase 10 · 14 (open-model architectures and MoE)
Time: ~60 minutes
اهداف یادگیری
- چهار قطعه قطعه دو پایپ را به صورت پیش رو و عقب نام دهید و چرا هر کدام پنجره های خود را دارند.
- مشکل فقرات لوله در مقیاس را توضیح دهید و معنی "فففحش آزاد" در عمل در مقابل بازاریابی چیست.
- برنامه دوپیپ را دست به دست برای 8 صف PP و 16 دسته کوچک ردیابی کنید و تایید کنید که جریان های پیش و عقب هر دو سوراخ بیکار را پر می کنند.
- بیان سازش دوالپپ V (مختبر سمندری هوش مصنوعی، 2025) انجام می دهد: تکرار پارامتر 2x را با هزینه یک حباب کمی بزرگتر کاهش می دهد وقتی که موازیات متخصص غیرفعال است.
مشکل
آموزش مدل MoE 671B روی GPU های 2K H800 به سه گلو بطری ترکیب می شود:
- Memory pressure.هر گپيوي يه قطعه از مدل رو نگه داره حافظه فعاليت در تسلسل 8k در طول 61 لايه در 128 سر خيلي بزرگه
- Pipeline bubbles.موازیات خط لوله سنتی (GPipe، 1F1B) GPU ها را در حالی که منتظر ورودی یا گرادینت مرحله خود هستند، بیکار می گذارد. در 8 مرحله، تقریبا 12٪ از زمان GPU حتی با برنامه ریزی 1F1B می تواند فاش باشد.
- Cross-node all-to-all.MoE با موازیات متخصص کارشناسان را در سراسر گره ها منتشر می کند. هر گذرگاه پیشروی یک همه را برای ارسال توکن به کارشناسان خود و دیگری برای ترکیب ایجاد می کند. در GPU های 2k این به راحتی تبدیل به یک نسبت 1:1 محاسبه به ارتباطات می شود.
هر یک از این راه حل های جداگانه ای دارد: کنترل گرادینت برای حافظه، فکن صفر (مختبر AI دریا، 2023) برای فکن لوله، هسته های ارتباطی موازی برای همه. دوالپپ فقط ميخواد با هم بازي کنه برنامه بر روی حساب و ارتباطات در یک قطعه پیش به عقب، میکرو-بچ ها را از هر دو پای لوله همزمان تزریق می کند و از برنامه حاصل برای پنهان کردن همه چیز در داخل پنجره های حساب استفاده می کند.
نتیجه گزارش شده: تقریبا از بین بردن حباب های لوله، بیش از 95 درصد استفاده از GPU در تمرین 14.8T توکن DeepSeek-V3
مفهوم
تازه کردن موازی خط لوله
یک مدل N-طبقات را در دستگاه های P تقسیم کنید. دستگاه iلایه ها رو نگه دارهi N/P .. (i+1) N/P - 1یک دسته کوچک از دستگاه ها از طریق دستگاه 0 به P-1 جریان می یابد و سپس از P-1 به 0 عقب می رود. هر دستگاه می تواند مرحله خود را فقط زمانی که دستگاه قبلی تولید خود را ارسال می کند و می تواند فقط زمانی که دستگاه پایین تر گرادینت به سمت بالا را ارسال می کند، به عقب حرکت کند.
GPipe (Huang et al., 2019) یک دسته کوچک را در یک زمان برنامه ریزی می کند که بیشتر زمان GPU را تلف می کند. 1F1B (Narayanan و همکارانش، 2021) برای چندین دسته کوچک، گذرگاه های پیش و عقب را با هم می گذارد. فلفل صفر (Qi و همکارانش، 2023) گذرۀ عقب را به دو بخش تقسیم می کند عقب-برای ورودی (B) و عقب-برای وزنه (W) و آنها را برای پر کردن فلفل برنامه ریزی می کند. بعد از "ففحش صفر"، لوله تقريباً تنگ شده
دوپایپ مرحله بعدی است. این دو ایده را اضافه می کند:
ایده ی اول: تجزیه قطعه
هر قطعه جلو به چهار بخش تقسیم می شود:
- Attention.پروژکتور Q/K/V، توجه، پروژکتور خروجی.
- All-to-all dispatch.ارتباط بين گره ها که توکن ها رو به کارشناسانشون ميفرستد
- MLP.حسابات متخصص وزارت خارجه
- All-to-all combine.ارتباط بين گره ها که بازيايي از ماهيان را به دست مي آورد
یک قطعه عقب تر نسخه های گرادینت هر یک از این قطعات را اضافه می کند. دوپیپ آنها را برنامه ریزی می کند تا ارسال همه به همه در موازی با محاسبه توجه قطعه بعدی اتفاق می افتد و ترکیب همه به همه در موازی با محاسبه MLP قطعه بعدی اتفاق می افتد.
ایده دوم: برنامه ریزی دو جهت
اکثر برنامه های خط لوله از مرحله 0 به سمت مرحله P1 می پردازند. دوالپایپ از هر دو پای میکروپات را تزریق می کند. مرحله 0 میکروپات های جلو را از آنجا می بیند؛ مرحله P-1 میکروپات های جلو را از آنجا نیز می بیند. دو جریان در وسط یکدیگر می رسند.
براي اين کار، دستگاهiباید هر دو لایه پایپولین اولیه را نگه داشته باشدiو لایه پایپول دیرP - 1 - iاین بخش "دوگانه" دوپیپ است: هر دستگاه دو نسخه از لایه های مدل مورد نیاز برای خدمت (یک برای هر جهت) را نگه می دارد. در مقیاس DeepSeek-V3، این هزینه تکرار پارامتر 2x است. این مقرون به صرفه است زیرا Expert Parallelism قبلاً کارشناسان MoE را به حدی نازک می کند که تکرار لایه های غیر متخصص دو بار بطاطس های کوچک است.
مهم است که جریان جلو در یک جهت و جریان عقب در سمت دیگر دقیقاً جایی که حباب ها در یک برنامه یک جهت قرار دارند، همپوشیده می شوند. حباب ها ناپدید می شوند.
برنامه ای که توسط دست ردیابی می شود
P = 4 صف، 8 دسته کوچک، تقسیم شده 4 پیش / 4 عقب. زمان از چپ به راست حرکت می کند؛ صف ها صف دستگاه هستند.
Time →
rank 0: F1 F2 F3 F4 F5R F6R F7R F8R B1 B2 B3 B4 ...
rank 1: F1 F2 F3 F4/F5R F6R F7R B1 B2 ...
rank 2: F1 F2 F3/F5R F4/F6R B1 ...
rank 3: F1 F2/F5R F3/F6R ...خواندن علامت "F4/F5R": رتبه 1 در همان زمان از سمت چپ به سمت راست در لوله حرکت می کند و از سمت چپ به سمت چپ در سمت چپ حرکت می کند. این همان چیزی است که "دو جهت" به معنای عملیاتی است.
در درجه 2 جریان های عبور زودتر همپوش می شوند، در درجه 0 و P-1 آنها آخرین همپوش می شوند. در مرحله متوسط پایدار برنامه، هر درجه در جهت X به جلو و سمت Y به عقب همپوش می شود. محاسبه مشغول است. ارسال همه چیز برای عبور به جلو در داخل حساب به عقب پنهان می شود. همه چیز ترکیب پنهان در داخل حساب به جلو. حباب ها فشار داده می شوند.
حسابداری بلبل
فلفل لوله های استاندارد 1F1B (زمان تلف شده در هر رتبه):
bubble_1F1B = (P - 1) * forward_chunk_timeبیفنگ صفر بیفنگ پایین می آورد اما به صفر. دوپایپ، در مرحله پایدار، بیفنگ صفر دارد اگر تعداد میکرو-بچ دو برابر عمق لوله تقسیم شود. خارج از مرحله پایدار (گرم شدن و خنک شدن) ، بیفنگ کمی وجود دارد اما با تعداد میکرو-بچ ها رشد نمی کند.
از لحاظ بازاریابی: "بلبل آزاد". از لحاظ فنی:بلبل ها با تعداد دسته های کوچک رشد نمی کنند. تجزیه و تحلیل پیگیری Sea AI Lab (DualPipeV / Cut-in-half) فقط زمانی که Expert Parallelism گوشه گشاده نیست ، مکمل صفر را نشان می دهد. با همه-به-همه-که توسط EP هدایت می شود ، همیشه برخی از تعهدی برنامه ریزی وجود دارد.
دوپایپV تصفیه
Sea AI Lab (2025) مشاهده کرد که تکرار پارامتر 2x وقتی که تعادل ارتباطات EP موضوع نیست، ضایع کننده است. برنامه دوپیپ وی آنها تزریق دو جهت را به یک برنامه "شکل V" که با یک نسخه پارامتر اجرا می شود، طوطه می زند. حباب کمی بزرگتر از دوالپایپ است اما پس انداز حافظه قابل توجهی است. DeepSeek DualPipeV را در پیاده سازی دوتاپیپ منبع باز خود به عنوان حالت EP-off اتخاذ کرد.
معامله:
| Feature | DualPipe | DualPipeV | 1F1B | Zero Bubble |
|---|---|---|---|---|
| Param copies per device | 2 | 1 | 1 | 1 |
| Bubble vs micro-batches | constant | small growth | grows | grows |
| Compute-comm overlap | full | partial | minimal | partial |
| Use when | EP-heavy MoE | dense or EP-light | baseline | any pipeline |
چه معنی داره برای یک 14.8T-token run
پیش از آموزش DeepSeek-V3 14.8T توکن ها را در 2.048 GPU H800 در حدود 2.8M ساعت GPU مصرف کرد. با یک F1B ساده، آنها 12 تا 15 درصد از آن را به فقرات لوله ای از دست داده بودند 340 تا 420K GPU ساعت، به اندازه کافی برای آموزش یک مدل 70B کامل. دوالپپ بیشترش رو بازیابی کرد به طور مستقیم مقدار گذاری کمک بدون دفترچه های داخلی دشوار است، اما ادعا در مقاله بیش از 95 درصد استفاده از GPU در میانگین در طول آموزش است.
برای اجراهای کوچکتر (در زیر 1k GPU) ، DualPipe بیش از حد می کشد حباب های لوله نسبت به هزینه کل کوچکتر هستند و آموزش مدل کثیف به ندرت به گوشه گیره همه چیز می رسد. برای آموزش MoE مرزی در مقیاس GPU چند هزار، به طور موثر مورد نیاز است.
جایی که در این دسته قرار داره
- مکمل برای FSDP(فاز 10 · 05). FSDP پارامترهای مدل را در میان صف ها تقسیم می کند؛ DualPipe محاسبه را در میان صف ها برنامه ریزی می کند. آنها ترکیب می شوند.
- با ZeRO-3حسابداری دو نسخه تکرار باید با gradient های زرو همکاری کند
- نیاز دارهcustom all-to-all kernelsهسته های منبع باز دیپ سکک، اجرای مرجع هستند.
ازش استفاده کن
code/main.pyاین یک شبیه ساز برنامه خط لوله است.(P, n_micro_batches, schedule)و استفاده از مرحله پایدار برای هر یک از 1F1B، فلفل صفر، دوپایپ و دوپایپ V را چاپ می کند. این یک ابزار آموزشی است اعداد با ادعاهای کیفیت در مقالات مطابقت دارند، آنها ادعای تولید اندازه گیری سرعت نیستند.
ارزش شبیه ساز: با تعداد مختلف P و میکرو-بچش اجرا کنید و ببینید که کسری فقرات چگونه برای 1F1B رشد می کند اما DualPipe نیست.
ملاحظات ادغام برای یک دوره آموزشی واقعی:
- عمق یک لوله موازی را انتخاب کنید که به طور تمیز به تعداد میکرو-بچ شما تقسیم شود.
- مطمئن شو که شبکه موازی متخصص شما از دو جهت تمام به همه پشتیبانی می کند.
- انتظار داشته باش که هفته ای از زمان اصلاح برنامه در اولین بار به سر بزنی.
- استفاده از گپيوپي ها رو به هر درجه يي نظارت کن نه فقط به جمعيت
-باده
این درس به ما کمک می کندoutputs/skill-dualpipe-planner.md. با توجه به مشخصات کلستر آموزش (مجموعه ی GPU، توپولوژی، ارتباط بین المللی، شکل مدل) ، آن یک استراتژی موازی لوله، الگوریتم برنامه ریزی برای استفاده و بخش حباب انتظار می رود در مقیاس هدف را توصیه می کند.
تمرینات
- فرار کن
code/main.pyدر(P=8, micro_batches=16, schedule=dualpipe)و(P=8, micro_batches=16, schedule=1f1b). تفاوت استفاده از GPU را محاسبه کنید و آن را به عنوان GPU ساعت های بازیابی در هر میلیون توکن آموزش بیان کنید.
- جدول برنامه رو برای
(P=4, micro_batches=8, schedule=dualpipe)با دست. هر زمان را با شناسه و جهت میکرو-بچ مشخص کنید. اولین زمان را که در آن حباب ها غائب هستند شناسایی کنید.
- شکل 5 گزارش فنی DeepSeek-V3 را بخوانید (arXiv:2412.19437). پنجره تعویض برای ارسال همه چیز در داخل یک قطعه پیشروی DualPipe را شناسایی کنید. توضیح دهید که چگونه برنامه محاسبه آن را پنهان می کند.
- هزینه های بالای 2x پارامتر دوپایپ را برای مدل 70B کثافت با مراحل لوله P=8 و مدل 671B MoE با مراحل لوله P=16 محاسبه کنید. نشان دهید که چرا هزینه های بالای مورد MoE متناسب با اندازه کوچکتر است (زیادہ تر پارامترها کارشناسان هستند، در یک گروه EP بزرگ تقسیم شده است).
- مقایسه دوپایپ با کیمرا (تاریخ دهنده دو جهت از سال ۲۰۲۱) را مقایسه کنید. دو ویژگی خاص را شناسایی کنید که دوپایپ اضافه کرد که کیمرا ندارد و از بخش ۳.۴ مقاله به عنوان مرجع استفاده کرد.
اصطلاحات کلیدی
| Term | What people say | What it actually means |
|---|---|---|
| Pipeline bubble | "Idle time per rank" | GPU cycles wasted because a pipeline stage is waiting for its input or gradient |
| 1F1B | "Default pipeline schedule" | One forward / one backward interleaved scheduling; the baseline DualPipe beats |
| Zero Bubble | "Sea AI Lab 2023" | Splits backward into B (input gradient) and W (weight gradient); almost fully tightens the pipeline |
| DualPipe | "DeepSeek-V3 schedule" | Bidirectional pipeline + compute-comm overlap; bubbles do not grow with micro-batch count |
| DualPipeV | "Cut-in-half" | V-shape refinement that drops the 2x parameter replication at the cost of slightly larger bubbles |
| Chunk | "Unit of pipeline work" | A forward or backward pass of one micro-batch through one pipeline stage |
| All-to-all dispatch | "Send tokens to experts" | Cross-node comm that routes tokens to their assigned MoE experts |
| All-to-all combine | "Bring expert outputs back" | Cross-node comm that gathers expert outputs after the MLP |
| Expert Parallelism (EP) | "Experts across GPUs" | Shards MoE experts across ranks so different GPUs hold different experts |
| Pipeline Parallelism (PP) | "Layers across GPUs" | Shards model layers across ranks; the dimension DualPipe schedules |
| Bubble fraction | "Wasted GPU time" | (bubble_time / total_time); the fraction DualPipe drives toward zero |
خواندن بیشتر
- DeepSeek-AI — DeepSeek-V3 Technical Report (arXiv:2412.19437), Section 3.3.2 and Figure 5 مرجع اصلی دو پایپ
- DeepSeek — DualPipe GitHub repository پیاده سازی مرجع منبع باز، از جمله حالت دوپیپV (کوتاه در نیمه)
- Qi et al. — Zero Bubble Pipeline Parallelism (arXiv:2401.10241, Sea AI Lab 2023) پیشگام "بلبل صفر"
- Sea AI Lab — DualPipe could be better without the Dual تجزیه و تحلیل DualPipeV که در حالت خاموش کردن EP DeepSeek را اطلاع داد
- Narayanan et al. — PipeDream / 1F1B (arXiv:1806.03377, 2018-2021) برنامه 1F1B دوالپایپ مقایسه با
- Huang et al. — GPipe (arXiv:1811.06965, 2018) مشکل موازی سازی خط لوله اصلی کاغذ و فلفل
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.