در آموزش مدلهای زبانی عظیم بهویژه ساختارهای MoE (ترکیب متخصصان یا Mixture of Experts)، ارتباطات سنگین شبکه و حبابهای زمانی پایپلاین میتوانند نیمی از توان محاسباتی گرانبهای پردازندهها را هدر دهند. وقتی متخصصان روی گرههای مختلف توزیع میشوند، ارتباطات All-to-all بیننودی زمان درخور توجهی پردازندههای گرافیکی را معطل نگه میدارد.
الگوریتم DualPipe که توسط تیم DeepSeek در جریان آموزش مدل DeepSeek-V3 معرفی شد، یک زمانبندی پایپلاین دوطرفه است که اجرای گذر رو به جلو و گام رو به عقب را با ارتباطات All-to-all همپوشانی میکند. این رویکرد حبابهای مرسوم را به حداقل میرساند و بهرهوری کلاستر را تا بالای 95% افزایش میدهد.
از آنجا که دسترسی به کلاسترهای بزرگ پردازندههای گرافیکی خارجی برای توسعهدهندگان ایرانی دشوار و بسیار پرهزینه است و حتی اجرای آزمایشی روی این سختافزارها نیازمند بهینهسازی دقیق است، درک کارایی معماریهایی مثل DualPipe و نسخهی سبکتر آن یعنی DualPipeV دید مهندسی دقیقی برای استفاده حداکثری از منابع پردازشی میدهد.
مدل DeepSeek-V3 روی 2,048 پردازندهی گرافیکی H800 آموزش دید؛ آن هم با متخصصان MoE که بین نودها پخش شده بودند. ارتباطات همهبههمه (All-to-all) بیننودی متخصصان به ازای هر 1 ساعت-GPU محاسبات، 1 ساعت-GPU هزینهی ارتباطی تحمیل میکرد؛ یعنی GPUها نیمی از زمان بیکار بودند. روش DualPipe (شرکت DeepSeek، دسامبر 2024) یک پایپلاین دوطرفه است که محاسبات گذر رو به جلو و گام رو به عقب را با ارتباطات All-to-all ناشی از آنها همپوشانی میکند. حبابها فرو میریزند، نرخ پردازش بالا میرود و نگهداری دو نسخه از پارامترهای مدل (دلیل نامگذاری «Dual») ارزان تمام میشود؛ چون موازیسازی متخصصان (Expert Parallelism یا EP) از قبل متخصصان را بین رتبهها پخش کرده است. این درس، یک راهنمای گامبهگام و کاربردی است تا ببینید DualPipe در عمل چه میکند و چرا نسخهی بهبودیافتهی DualPipeV از Sea AI Lab، هزینهی دوبرابری پارامترها را با پذیرش حبابی کمی فشردهتر حذف میکند.
اهداف یادگیری
- نام بردن چهار بخش تشکیلدهندهی یک چانک گذر رو به جلو و گام رو به عقب در DualPipe و درک علت اختصاص یک پنجرهی همپوشانی مجزا به هر بخش.
- توضیح مسئلهی حباب پایپلاین در مقیاس بزرگ، و معنای عبارت «بدون حباب» در عمل در مقایسه با ادعاهای تبلیغاتی.
- ردگیری دستی زمانبندی DualPipe برای 8 رتبهی PP و 16 میکروبچ، و تأیید اینکه جریانهای مستقیم و معکوس زمانهای بیکاری یکدیگر را پر میکنند.
- بیان موازنهی DualPipeV (آزمایشگاه Sea AI Lab، سال 2025): حذف تکثیر دوبرابری پارامترها به بهای ایجاد حبابی کمی بزرگتر در زمان غیرفعال بودن موازیسازی متخصصان.
صورت مسئله
آموزش یک مدل MoE با 671 میلیارد پارامتر روی 2 هزار GPU مدل H800 با سه گلوگاه همافزا روبهرو میشود:
- فشار حافظه. هر GPU برشی از مدل را نگه میدارد. حافظهی اکتیویشن در طول توالی 8k روی 61 لایه و 128 سر، فوقالعاده سنگین است.
- حبابهای پایپلاین. موازیسازی سنتی پایپلاین (GPipe، 1F1B) پردازندههای گرافیکی را حین انتظار برای دریافت ورودی استیج یا گرادیان، بیکار میگذارد. در 8 استیج، حتی با زمانبندی 1F1B هم حدود 12% از زمان GPU صرف حباب میشود.
- ارتباط All-to-all بیننودی. معماری MoE همراه با موازیسازی متخصصان، متخصصان را بین نودهای مختلف پخش میکند. هر گذر رو به جلو یک ارتباط All-to-all برای توزیع توکنها به متخصصان و یک All-to-all دیگر برای ترکیب نتایج ایجاد میکند. در مقیاس 2 هزار GPU، این وضعیت نسبت محاسبات به ارتباط را بهراحتی به 1:1 میرساند.
هر یک از این چالشها راهحل جداگانهای دارد: چکپوینتگذاری گرادیان (Gradient Checkpointing) برای حافظه، الگوریتم Zero Bubble (آزمایشگاه Sea AI Lab، سال 2023) برای حبابهای پایپلاین، و کرنلهای ارتباطی موازی متخصصان برای All-to-all. هنر DualPipe این است که همهی آنها را با هم هماهنگ میکند. این زمانبندی، محاسبات و ارتباطات را درون یک چانکِ رفتوبرگشتی همپوشانی میکند، میکروبچها را همزمان از هر دو سر پایپلاین میفرستد و با استفاده از الگوی حاصل، All-to-all را درون پنجرههای محاسباتی پنهان میسازد.
نتیجهی گزارششده: حذف تقریباً کامل حبابهای پایپلاین و رسیدن به بیش از 95% بهرهوری GPU در اجرای آموزشی 14.8 تریلیون توکنی مدل DeepSeek-V3.
مفهوم
یادآوری موازیسازی پایپلاین
مدلی با N لایه را روی P دستگاه تقسیم کنید. دستگاه i لایههای i * N/P .. (i+1) * N/P - 1 را نگه میدارد. یک میکروبچ در مسیر گذر رو به جلو از دستگاه 0 تا P-1 پیش میرود و سپس در گام رو به عقب از P-1 به 0 برمیگردد. هر دستگاه فقط وقتی میتواند استیج رفت خود را شروع کند که دستگاه پیشین خروجیاش را فرستاده باشد، و گام رو به عقب را زمانی آغاز میکند که دستگاه پایینی گرادیان بالادستی را ارسال کرده باشد.
الگوریتم GPipe (سال 2019، Huang و همکاران) در هر زمان فقط یک میکروبچ را زمانبندی میکند که بخش عمدهی توان GPU را هدر میدهد. الگوریتم 1F1B (سال 2021، Narayanan و همکاران) گذر رو به جلو و گام رو به عقب چند میکروبچ را به صورت یکدرمیان اجرا میکند. الگوریتم Zero Bubble (سال 2023، Qi و همکاران) گام رو به عقب را به دو بخش تقسیم میکند — پسانتشار برای ورودی (B) و پسانتشار برای وزنها (W) — و آنها را طوری میچیند که حباب پر شود. بعد از Zero Bubble، پایپلاین بسیار فشرده و منسجم میشود.
روش DualPipe گام بعدی این مسیر است و دو ایدهی مکمل روی آن پیاده میکند:
ایدهی اول: تجزیهی چانک
هر چانک گذر رو به جلو به چهار بخش تقسیم میشود:
- اتنشن (Attention). لایههای تصویر کردن Q/K/V، اتنشن و تصویر کردن خروجی.
- توزیع All-to-all (یا Dispatch). ارتباط بیننودی که توکنها را به متخصصانشان میفرستد.
- لایهی MLP. محاسبات مربوط به متخصصان MoE.
- ترکیب All-to-all (یا Combine). ارتباط بیننودی که خروجی متخصصان را بازمیگرداند.
چانک گام رو به عقب نسخهی گرادیانی هر یک از این بخشها را اضافه میکند. زمانبندی DualPipe طوری چیده شده که توزیع All-to-all همزمان با محاسبات اتنشن چانک بعدی، و ترکیب All-to-all همزمان با محاسبات MLP چانک پس از آن انجام شود.
ایدهی دوم: زمانبندی دوطرفه
بیشتر زمانبندیهای پایپلاین، میکروبچها را از استیج 0 تزریق میکنند تا به سمت استیج P-1 حرکت کنند. اما DualPipe میکروبچها را از هر دو طرف پایپلاین وارد میکند. استیج 0 میکروبچهای گذر رو به جلوی آغازشده از سمت خودش را میبیند؛ استیج P-1 هم میکروبچهای گذر رو به جلوی آغازشده از سمت خودش را پردازش میکند. این دو جریان در میانه به هم میرسند.
برای کارکرد این سازوکار، دستگاه i باید هم لایهی اوایل پایپلاین یعنی i و هم لایهی اواخر پایپلاین یعنی P - 1 - i را در حافظه داشته باشد. بخش «Dual» در نام این روش از همینجا میآید: هر دستگاه دو نسخه از لایههای مدل موردنیازش را نگه میدارد (یک نسخه برای هر جهت). در مقیاس DeepSeek-V3، این کار هزینهی تکثیر دوبرابری پارامترها را دارد. این هزینه کاملاً مقرونبهصرفه است؛ چرا که موازیسازی متخصصان از پیش متخصصان 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 در همان بازهی زمانی هم گذر رو به جلوی میکروبچ 4 (در جهت چپ به راست پایپلاین) و هم گذر رو به جلوی میکروبچ 5 (در جهت راست به چپ) را اجرا میکند. معنای عملیاتی «دوطرفه» دقیقاً همین است.
در رتبهی 2 جریانهای متقاطع زودتر همپوشانی پیدا میکنند، و در رتبههای 0 و P-1 دیرتر به هم میرسند. در فاز پایدار میانی زمانبندی، هر رتبه گذر رو به جلوی جهت X را همزمان با گام رو به عقب جهت Y اجرا میکند. بخش محاسبات مدام مشغول است. توزیع All-to-all برای گذر رو به جلو، زیر بار محاسبات گام رو به عقب پنهان میشود. ترکیب All-to-all هم درون محاسبات گذر رو به جلو مخفی میگردد. به این ترتیب حبابها کاملاً کنار میروند.
محاسبهی حباب
حباب استاندارد پایپلاین 1F1B (زمان هدررفته به ازای هر رتبه):
bubble_1F1B = (P - 1) * forward_chunk_time
بهبودهای Zero Bubble این زمان را کم میکند اما به صفر نمیرساند. DualPipe در فاز پایدار، در صورتی که تعداد میکروبچها بر 2 برابرِ عمق پایپلاین بخشپذیر باشد، اصلاً حبابی ندارد. خارج از فاز پایدار (وارمآپ و خنکسازی) مقداری حباب وجود دارد، اما طبق نکتهی کلیدی مطرحشده در مقاله، این حباب با افزایش تعداد میکروبچها رشد نمیکند.
به زبان بازاریابی: «بدون حباب». به زبان فنی: حبابها با افزایش تعداد میکروبچها رشد نمیکنند. تحلیلهای بعدی Sea AI Lab (طرح DualPipeV / Cut-in-half) نشان داد که حذف کامل حباب فقط زمانی رخ میدهد که موازیسازی متخصصان گلوگاه اصلی نباشد؛ با وجود ارتباطات All-to-all ناشی از EP، همیشه نوعی مصالحه در زمانبندی گریزناپذیر است.
نسخهی تکمیلی: DualPipeV
آزمایشگاه Sea AI Lab (سال 2025) نشان داد وقتی همپوشانی ارتباطی EP هدف اصلی نباشد، تکثیر دوبرابری پارامترها توجیهی ندارد. زمانبندی DualPipeV آنها تزریق دوطرفه را در یک الگوی V-شکل ادغام میکند که تنها با یک نسخهی پارامتر اجرا میشود. در این حالت حباب کمی بزرگتر از DualPipe است، اما صرفهجویی چشمگیری در حافظه حاصل میشود. خود تیم DeepSeek نیز DualPipeV را به عنوان حالت بدون EP (حالت EP-off) در پیادهسازی متنباز DualPipe به کار گرفت.
موازنه:
| ویژگی | DualPipe | DualPipeV | 1F1B | Zero Bubble |
|---|---|---|---|---|
| نسخههای پارامتر در هر دستگاه | 2 | 1 | 1 | 1 |
| رشد حباب نسبت به میکروبچها | ثابت | رشد اندک | رشد میکند | رشد میکند |
| همپوشانی محاسبات و ارتباط | کامل | نسبی | حداقل | نسبی |
| کاربرد مناسب | MoE با EP سنگین | مدلهای چگال یا EP سبک | خط مبنا | انواع پایپلاینها |
دستاورد این روش در آموزش 14.8 تریلیون توکن
پیشآموزش DeepSeek-V3 با مصرف 14.8 تریلیون توکن روی 2,048 پردازندهی H800، حدود 2.8 میلیون ساعت-GPU زمان برد. اگر از 1F1B ساده استفاده میکردند، بین 12 تا 15 درصد از این زمان (حدود 340 تا 420 هزار ساعت-GPU؛ معادل زمان لازم برای آموزش کامل یک مدل 70B) در حبابهای پایپلاین تلف میشد. DualPipe بخش اعظم این زمان را نجات داد. سنجش دقیق این سهم بدون لاگهای داخلی ممکن نیست، اما ادعای مقاله این است که میانگین بهرهوری GPUها در طول آموزش بالای 95% بوده است.
برای آموزشهای کوچکتر (زیر 1,000 پردازنده)، DualPipe بیش از حد نیاز است؛ چون حبابهای پایپلاین در برابر هزینهی کل کوچکترند و در آموزش مدلهای چگال هم گلوگاه All-to-all بهندرت پیش میآید. اما برای آموزش مدلهای پیشروی MoE در مقیاس چند هزار GPU، عملاً به ابزاری اجتنابناپذیر بدل میشود.
جایگاه در پشتهی فناوری
- مکمل FSDP (بخش 10 · درس 05). سیستم FSDP پارامترهای مدل را بین رتبهها تقسیم میکند؛ DualPipe محاسبات را در طول رتبهها زمانبندی میکند. این دو ترکیب میشوند.
- سازگار با شاردینگ گرادیان در ZeRO-3. مدیریت مربوط به نگهداری دو نسخه باید با سازوکار گرادیانهای خردشدهی ZeRO هماهنگ باشد.
- نیازمند کرنلهای اختصاصی All-to-all که متناسب با توپولوژی اختصاصی کلاستر بهینهسازی شده باشند. کرنلهای متنباز DeepSeek پیادهسازی مرجع محسوب میشوند.
استفاده در عمل
فایل code/main.py یک شبیهساز زمانبندی پایپلاین است. این برنامه ورودی (P, n_micro_batches, schedule) را میگیرد و بهرهوری فاز پایدار را برای هر یک از روشهای 1F1B، Zero Bubble، DualPipe و DualPipeV نمایش میدهد. این ابزار صرفاً جنبهی آموزشی دارد؛ یعنی اعداد آن مطابق با ادعاهای کیفی مقالات است و به معنای شتاب قطعی و اندازهگیریشده در محیط عملیاتی نیست.
ارزش شبیهساز: آن را با مقادیر مختلف P و تعداد میکروبچها اجرا کنید و ببینید سهم حباب برای 1F1B چطور بالا میرود، اما برای DualPipe ثابت میماند.
نکات مهم برای اتصال به یک سیستم آموزشی واقعی:
- عمق موازیسازی پایپلاین را طوری انتخاب کنید که تعداد میکروبچها دقیقاً بر آن بخشپذیر باشد.
- مطمئن شوید مش موازیسازی متخصصان شما از All-to-all دوطرفه پشتیبانی میکند. کرنلهای DeepSeek مرجع استاندارد هستند.
- در اولین تجربه، دستکم یک هفته زمان برای عیبیابی خودِ زمانبندی در نظر بگیرید؛ چرا که مدیریت جزئیات آن بسیار پیچیده و حساس است.
- بهرهوری GPU را به تفکیک تکتک رتبهها پایش کنید، نه فقط به صورت میانگین کل. ارزش 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 آزادشده به ازای هر یک میلیون توکن آموزش بیان کنید. -
جدول زمانبندی
(P=4, micro_batches=8, schedule=dualpipe)را با دست رسم کنید. شناسهی هر میکروبچ و جهت آن را در هر اسلات زمانی علامت بزنید. نخستین اسلات زمانی را که حباب در آن کاملاً حذف میشود مشخص کنید. -
تصویر 5 از گزارش فنی DeepSeek-V3 (مقالهی arXiv:2412.19437) را بررسی کنید. پنجرهی همپوشانی را برای توزیع All-to-all درون یک چانک گذر رو به جلوی DualPipe پیدا کنید. توضیح دهید که زمانبندی محاسبات چطور آن را پنهان میکند.
-
سربار دوبرابری پارامترهای DualPipe را برای یک مدل چگال 70B با 8 استیج پایپلاین (P=8) و یک مدل MoE با حجم 671B و 16 استیج پایپلاین (P=16) حساب کنید. نشان دهید چرا این سربار در مدل MoE از نظر نسبی بسیار کوچکتر است (بیشتر پارامترها متعلق به متخصصان هستند که درون یک گروه بزرگ EP خرد شدهاند).
-
DualPipe را با Chimera (زمانبند دوطرفهی دیگری که در سال 2021 ارائه شد) مقایسه کنید. با استناد به بخش 3.4 مقاله، دو ویژگی مشخص را بنویسید که DualPipe اضافه کرد اما Chimera نداشت.
اصطلاحات کلیدی
| اصطلاح | در گفتگوها | معنای دقیق فنی |
|---|---|---|
| حباب پایپلاین (Pipeline bubble) | «زمان بیکاری هر رتبه» | چرخههای تلفشدهی GPU ناشی از انتظار یک استیج پایپلاین برای ورودی یا گرادیان |
| 1F1B | «زمانبندی پیشفرض پایپلاین» | اجرای یکدرمیان یک گذر رو به جلو و یک گام رو به عقب؛ خط مبنایی که DualPipe از آن پیشی میگیرد |
| Zero Bubble | «روش سال 2023 Sea AI Lab» | تقسیم گام رو به عقب به B (گرادیان ورودی) و W (گرادیان وزن)؛ روشی که پایپلاین را تا حد زیادی فشرده میکند |
| DualPipe | «زمانبندی DeepSeek-V3» | پایپلاین دوطرفه همراه با همپوشانی محاسبات و ارتباطات؛ حبابها با افزایش میکروبچها رشد نمیکنند |
| DualPipeV | «طرح نصف کردن (Cut-in-half)» | نسخهی V-شکل اصلاحشده که تکثیر دوبرابری پارامترها را با پذیرش حبابهایی کمی بزرگتر حذف میکند |
| چانک (Chunk) | «واحد کاری پایپلاین» | یک گذر رو به جلو یا گام رو به عقب از یک میکروبچ درون یک استیج پایپلاین |
| توزیع All-to-all (All-to-all dispatch) | «ارسال توکنها به متخصصان» | ارتباطات بیننودی که توکنها را به متخصصان MoE مربوطهشان میفرستد |
| ترکیب All-to-all (All-to-all combine) | «بازگرداندن خروجی متخصصان» | ارتباطات بیننودی که پس از اجرای MLP، خروجی متخصصان را جمعآوری میکند |
| موازیسازی متخصصان (Expert Parallelism یا EP) | «پخش متخصصان روی پردازندهها» | خرد کردن متخصصان MoE بین رتبهها بهگونهای که پردازندههای مختلف، متخصصان متفاوتی را نگه دارند |
| موازیسازی پایپلاین (Pipeline Parallelism یا PP) | «پخش لایهها روی پردازندهها» | خرد کردن لایههای مدل بین رتبهها؛ بعد اصلی که DualPipe آن را زمانبندی میکند |
| سهم حباب (Bubble fraction) | «زمان هدررفتهی GPU» | حاصل تقسیم زمان حباب بر زمان کل (bubble_time / total_time)؛ نسبتی که DualPipe آن را به صفر نزدیک میکند |
برای مطالعهی بیشتر
- گزارش فنی DeepSeek-V3 از تیم DeepSeek-AI (شناسهی arXiv:2412.19437)، بخش 3.3.2 و تصویر 5 — مرجع اصلی DualPipe
- مخزن گیتهاب DualPipe شرکت DeepSeek — پیادهسازی مرجع متنباز، شامل حالت DualPipeV (یا Cut-in-half)
- مقالهی Zero Bubble Pipeline Parallelism از Qi و همکاران (شناسهی arXiv:2401.10241، سال 2023 در Sea AI Lab) — ایدهی پایهای و سلف Zero Bubble
- مقالهی Sea AI Lab: شاید DualPipe بدون بخش Dual بهتر باشد — تحلیل DualPipeV که ایدهبخش حالت بدون EP در DeepSeek شد
- مقالهی PipeDream / 1F1B از Narayanan و همکاران (شناسهی arXiv:1806.03377، سالهای 2018 تا 2021) — زمانبندی 1F1B که DualPipe با آن سنجیده میشود
- مقالهی GPipe از Huang و همکاران (شناسهی arXiv:1811.06965، سال 2018) — مقالهی مرجع موازیسازی پایپلاین و تعریف اولیهی مسئلهی حباب
