Phase 10: LLMs from Scratch

दोहरी पाइप समानांतर

डीपसेक-वी3 को 2,048 एच800 जीपीयू पर प्रशिक्षित किया गया था। क्रॉस-नोड विशेषज्ञ सभी-से-सब संचार गणना के प्रत्येक 1 GPU-घंटे के लिए 1 GPU-घंटे संचार लागत. GPUs आधा समय निष्क्रिय थे. डुअलपाइप (डीपसेक, दिसंबर 2024) एक द्वि-दिशात्मक पाइपलाइन है जो आगे और पीछे की गणना के साथ ओवरलैप करता है सभी-से-सब संचार वे ट्रिगर करते हैं। बुलबुले गिरते हैं, उत्पादन बढ़ता है, और दो मॉडल-पैरामीटर प्रतियों (नाम देने वाला "डबल") रखना सस्ता है क्योंकि विशेषज्ञ समानांतर पहले से ही विशेषज्ञों को सभी रैंकों में फैला रहा है। यह सबक एक सीख प्रकार का है जो ड्यूलपाइप वास्तव में क्या करता है और क्यों सीएआई लैब के ड्यूलपाइपवी परिष्करण एक मामूली रूप से तंग बुलबुले की कीमत पर 2 गुना पैरामीटर लागत को कम करता है।

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 पीपी रैंक और 16 माइक्रो-बैच के लिए एक ड्यूलपाइप शेड्यूल को हाथ से ट्रैक करें और आगे और पीछे की धाराओं को एक दूसरे के निष्क्रिय स्लॉट को भरने की पुष्टि करें।
  • दोलपाइपवी (समुद्र एआई लैब, 2025) द्वारा किए गए व्यापारिक समझौते का वर्णन करेंः जब विशेषज्ञ समानांतर निष्क्रिय होता है तो थोड़ा बड़ा बुलबुला की लागत पर 2x पैरामीटर प्रतिकृति को छोड़ देता है।

समस्या

2k H800 GPUs पर एक 671B MoE मॉडल को प्रशिक्षित करने के लिए तीन मिश्रित बोतल गला में चला जाता हैः

  1. Memory pressure.प्रत्येक GPU में मॉडल का एक स्लाइस होता है। 128 हेड पर 61 परतों पर 8k अनुक्रम पर सक्रियण स्मृति बहुत बड़ी है।
  2. Pipeline bubbles.पारंपरिक पाइपलाइन समानांतर (GPipe, 1F1B) GPU को अपने चरण के इनपुट या ग्रेडिएंट की प्रतीक्षा करते हुए निष्क्रिय छोड़ देता है। 8 चरणों में, 1F1B अनुसूची के साथ भी लगभग 12% GPU समय बुलबुला हो सकता है।
  3. Cross-node all-to-all.विशेषज्ञ समानांतरता के साथ MoE नोड्स के माध्यम से विशेषज्ञों को बिखरेगा। प्रत्येक आगे के पास अपने विशेषज्ञों को टोकन भेजने के लिए एक ऑल-टू-ऑल को ट्रिगर करता है, और एक और को जोड़ता है। 2k GPUs पर यह आसानी से 1:1 कम्प्यूटिंग-टू-कॉम अनुपात बन जाता है।

इनमें से प्रत्येक में अलग-अलग समाधान हैंः स्मृति के लिए ग्रेडिएंट चेकपोइंटिंग, पाइपलाइन बुलबुले के लिए शून्य बुलबुला (समुद्र एआई लैब, 2023) और सभी के लिए विशेषज्ञ समानांतर संचार नाभिक। ड्यूलपाइप क्या करता है उन्हें एक साथ खेलने के लिए है। कार्यक्रम एक एकल आगे-पीछे टुकड़े के भीतर गणना और संचार को ओवरलैप करता है, पाइपलाइन के दोनों छोरों से एक साथ माइक्रो-बैच इंजेक्ट करता है, और परिणाम स्वरूप कार्यक्रम का उपयोग गणना खिड़कियों के अंदर सभी-से-सब छिपाने के लिए करता है।

रिपोर्ट किया परिणामः पाइपलाइन बुलबुले के लगभग उन्मूलन, डीपसेक-वी 3 के 14.8T-टोकन प्रशिक्षण रन में 95% से अधिक GPU उपयोग।

अवधारणा

पाइपलाइन समानांतरता ताज़ा करना

पी उपकरणों में एन-लेयर मॉडल को विभाजित करें। डिवाइस iपरतों को पकड़ता है i N/P .. (i+1) N/P - 1. एक माइक्रो-बैच डिवाइस 0 से P-1 तक आगे और फिर P-1 से 0 तक पीछे बहता है। प्रत्येक डिवाइस केवल तब आगे की अवस्था शुरू कर सकता है जब पूर्व डिवाइस अपना आउटपुट भेजता है और केवल तब वापस शुरू कर सकता है जब डाउनस्ट्रीम डिवाइस अपस्ट्रीम ग्रेडिएंट भेजता है।

जीपीआईपी (हुआंग एट अल, 2019) एक बार में एक माइक्रो-बैच को शेड्यूल करता है, जो अधिकांश जीपीयू समय बर्बाद करता है। 1F1B (Narayanan et al., 2021) कई सूक्ष्म बैचों के लिए आगे और पीछे के पास को अंतःस्थापित करता है। शून्य बुलबुला (Qi et al., 2023) पीछे की ओर जाने वाले को दो भागों में विभाजित करता है पीछे की ओर-इनपुट (B) और पीछे की ओर-वेट (W) और उन्हें बुलबुला भरने के लिए निर्धारित करता है। शून्य बुलबुले के बाद, पाइपलाइन लगभग तंग है।

ड्यूलपाइप अगले कदम है. यह दो विचारों को जोड़ता है शीर्ष परः

विचार 1: टुकड़ा विघटन

प्रत्येक आगे का टुकड़ा चार घटकों में विभाजित हैः

  • Attention.Q/K/V प्रक्षेपण, ध्यान, आउटपुट प्रक्षेपण।
  • All-to-all dispatch.क्रॉस-नोड संचार जो अपने विशेषज्ञों को टोकन भेजता है।
  • MLP.एमओई विशेषज्ञ गणना.
  • All-to-all combine.क्रॉस-नोड संचार जो विशेषज्ञ आउटपुट वापस लाता है।

एक पीछे की ओर टुकड़ा इनमें से प्रत्येक के ग्रेडिएंट संस्करण जोड़ता है। ड्यूलपाइप उन्हें शेड्यूल करता है ताकि अगले टुकड़े की ध्यान गणना के समानांतर में सभी-से-सभी डिस्पैच हो, और अगले टुकड़े की एमएलपी गणना के समानांतर में सभी-से-सभी संयोजन हो।

विचार 2: द्वि-दिशात्मक अनुसूची

अधिकांश पाइपलाइन कार्यक्रम चरण 0 से माइक्रो-बैच इंजेक्ट करते हैं और चरण P-1 की ओर बहते हैं। डुअलपाइप दोनों छोरों से माइक्रो-बैच इंजेक्ट करता है। चरण 0 वहां से आने वाले आगे के माइक्रो-बैच को देखता है; चरण P-1 वहां से आने वाले आगे के माइक्रो-बैच को भी देखता है। दोनों धाराएं बीच में मिलती हैं।

यह काम करने के लिए, डिवाइस iदोनों को प्रारंभिक पाइपलाइन परत को पकड़ना चाहिए iऔर देर से पाइपलाइन परत P - 1 - i. यह ड्यूलपाइप का "डबल" हिस्सा हैः प्रत्येक डिवाइस को मॉडल परतों की दो प्रतियां रखी जाती हैं जिन्हें उसे सेवा करने की आवश्यकता होती है (प्रत्येक दिशा के लिए एक) । डीपसेक-वी 3 के पैमाने पर, यह 2 गुना पैरामीटर प्रतिकृति लागत है। यह सस्ती है क्योंकि विशेषज्ञ समानांतर पहले से ही एमओई विशेषज्ञों को इतना पतला फैलाता है कि गैर-विशेषज्ञ परतों को दो बार प्रतिकृति देना छोटे आलू है।

महत्वपूर्ण बात यह है कि एक दिशा में आगे की धारा और दूसरी दिशा में पीछे की धारा एक-दूसरे पर एक-दूसरे के साथ मेल खाती है, जहां बुलबुले एक-दिशाने के कार्यक्रम में होती हैं। बुलबुले गायब हो जाती हैं।

एक हाथ से ट्रैक किए गए कार्यक्रम

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-दिशा से ओवरलैप होता है। गणना व्यस्त होती है। आगे-पास के लिए सभी-से-सभी डिस्पैच पीछे-पास के भीतर छिप जाते हैं। सभी-से-सभी को पीछे-पास के भीतर छिपाते हैं। आगे-कंप्यूटर के अंदर छिपाते हैं। बुलबुले बाहर दबाए जाते हैं।

बबल लेखांकन

मानक 1F1B पाइपलाइन बुलबुला (समय क्रमशः बर्बाद किया गया):

bubble_1F1B = (P - 1) * forward_chunk_time

शून्य बुलबुला परिष्करण इसे नीचे लाता है लेकिन शून्य तक नहीं। डुअलपाइप, स्थिर चरण में, शून्य बुलबुला है यदि माइक्रो-बैच की संख्या पाइपलाइन की गहराई से 2 गुना से विभाजित है। स्थिर चरण (गरम और ठंडा) के बाहर, कुछ बुलबुला है लेकिन यह माइक्रो-बैच की संख्या के साथ नहीं बढ़ता है।

विपणन के संदर्भ मेंः "बुलबुला मुक्त"। तकनीकी संदर्भ मेंः बुलबुले माइक्रो-बैच की संख्या के साथ नहीं बढ़ते हैं। सीएआई लैब के अनुवर्ती विश्लेषण (ड्यूलपीपवी / कट-इन-हाफ) केवल तब पूर्ण शून्य बुलबुला दिखाता है जब विशेषज्ञ समानांतरता बोतल की गर्दन नहीं है; ईपी-चालित ऑल-टू-ऑल के साथ, कुछ शेड्यूलिंग समझौता हमेशा मौजूद होता है।

DualPipeV परिष्करण

सीएआई लैब (2025) ने देखा कि 2x पैरामीटर प्रतिकृति व्यर्थ है जब ईपी संचार ओवरलैप मुद्दा नहीं है। उनके ड्यूलपाइपवी कार्यक्रम दो दिशाओं के इंजेक्शन को एक "वी-आकार" कार्यक्रम में लपेटता है जो एक पैरामीटर प्रति पर चलता है। बुलबुला डुअलपाइप की तुलना में थोड़ा बड़ा है, लेकिन मेमोरी की बचत काफी है। डीपसईक ने अपने ओपन-सोर्स ड्यूलपाइप कार्यान्वयन में ड्यूलपाइप वी को ईपी-ऑफ मोड के रूप में अपनाया।

समझौताः

FeatureDualPipeDualPipeV1F1BZero Bubble
Param copies per device2111
Bubble vs micro-batchesconstantsmall growthgrowsgrows
Compute-comm overlapfullpartialminimalpartial
Use whenEP-heavy MoEdense or EP-lightbaselineany pipeline

14.8T टोकन रन के लिए इसका क्या मतलब है

डीपसेक-वी3 के पूर्व प्रशिक्षण ने लगभग 2.8 मिलियन GPU-घंटों में 2,048 एच800 जीपीयू पर 14.8 टी टोकन का उपभोग किया। एक साफ़ 1F1B के साथ, वे पाइपलाइन बुलबुले के लिए 12-15% खो देंगे 340-420K GPU-घंटे, एक पूर्ण 70B मॉडल को प्रशिक्षित करने के लिए पर्याप्त। ड्यूलपाइप ने अधिकांश को बरामद किया। आंतरिक लॉग के बिना सीधे योगदान को मात्राबद्ध करना मुश्किल है, लेकिन पेपर में दावा है कि प्रशिक्षण के दौरान औसत जीपीयू उपयोग 95% से अधिक है।

छोटे रन (1k GPUs से कम) के लिए, DualPipe ओवरकिल है पाइपलाइन बुलबुले कुल लागत के सापेक्ष छोटे हैं, और घने मॉडल प्रशिक्षण शायद ही कभी सभी-से-सब कुछ बोतल के गले में हिट करता है। कई हजार GPU पैमाने पर सीमा मोई प्रशिक्षण के लिए, यह प्रभावी रूप से आवश्यक है।

जहां यह ढेर में बैठता है

  • के पूरकFSDP(चरण 10 · 05) FSDP रैंक के बीच मॉडल मापदंडों को छोटा करता है; डुअलपाइप रैंक के बीच गणना को शेड्यूल करता है। वे संयुक्त होते हैं।
  • के साथ संगतZeRO-3दो प्रतियों की प्रतिकृति के लिए लेखांकन ZeRO के टुकड़े टुकड़े gradients के साथ सहयोग करने की जरूरत है।
  • आवश्यकताएँ custom all-to-all kernelsडीपसेक के ओपन सोर्स कर्नल संदर्भ कार्यान्वयन हैं।

इसका प्रयोग करें

code/main.pyयह एक पाइपलाइन कार्यक्रम सिम्युलेटर है. यह लेता है(P, n_micro_batches, schedule)और 1F1B, शून्य बुलबुला, डुअलपाइप और डुअलपाइपवी के प्रत्येक के लिए स्थिर-चरण उपयोग को प्रिंट करता है। यह एक शिक्षण उपकरण है संख्याओं को कागजातों में गुणात्मक दावे से मेल खाता है, वे उत्पादन मापा गति के बारे में दावा नहीं हैं।

सिम्युलेटर का मूल्यः इसे अलग अलग पी और माइक्रो-बैच गिनती के साथ चलाएं और देखें कि 1F1B के लिए बुलबुला अंश कैसे बढ़ता है लेकिन डुअलपाइप नहीं।

वास्तविक प्रशिक्षण के लिए एकीकरण विचारः

  • पाइपलाइन समानांतर गहराई चुनें जो आपके सूक्ष्म बैच की गिनती में साफ विभाजित हो।
  • सुनिश्चित करें कि आपके विशेषज्ञ समानांतर जाल द्वि-दिशात्मक सभी-के-सब को समर्थन देता है. डीपसेक के कर्नेल संदर्भ हैं.
  • पहली बार अपने समय पर डिबगिंग समय के एक सप्ताह के लिए जला करने की उम्मीद. लेखांकन मुश्किल है.
  • केवल समग्र नहीं, बल्कि प्रत्येक श्रेणी के अनुसार जीपीयू उपयोग की निगरानी करें। डुअलपाइप का लाभ लटके हुए को कसकर करने से आता है।

इसे भेजें

यह सबक हमें फल देता हैoutputs/skill-dualpipe-planner.md. प्रशिक्षण क्लस्टर विनिर्देश (जीपीयू गिनती, टोपोलॉजी, इंटरकनेक्ट, मॉडल आकार) को देखते हुए, यह पाइपलाइन समानांतरता रणनीति, नियोजन एल्गोरिथ्म का उपयोग करने और लक्ष्य पैमाने पर अपेक्षित बुलबुला अंश की सिफारिश करता है।

व्यायाम

  1. दौड़ेंcode/main.pyपर(P=8, micro_batches=16, schedule=dualpipe)और (P=8, micro_batches=16, schedule=1f1b). GPU उपयोगिता अंतर की गणना करें और इसे प्रशिक्षण के प्रति मिलियन टोकन के लिए पुनर्प्राप्त GPU-घंटे के रूप में व्यक्त करें।
  1. के लिए समय सारिणी की स्केच(P=4, micro_batches=8, schedule=dualpipe)प्रत्येक समय स्लॉट को माइक्रो-बैच आईडी और दिशा के साथ चिह्नित करें। पहले समय स्लॉट की पहचान करें जहां बुलबुले अनुपस्थित हैं।
  1. डीपसेक-वी3 तकनीकी रिपोर्ट (arXiv:2412.19437) के चित्र 5 को पढ़ें। ड्यूलपाइप के आगे के टुकड़े के अंदर सभी-से-सब के डिस्पैच के लिए ओवरलैप विंडो की पहचान करें। समझाएं कि गणना कार्यक्रम इसे कैसे छिपाता है।
  1. पाइपलाइन चरणों के साथ 70B घने मॉडल के लिए DualPipe के 2x पैरामीटर ओवरहेड की गणना करें और पाइपलाइन चरणों के साथ 671B MoE मॉडल के लिए P=16। दिखाएं कि क्यों MoE मामले का ओवरहेड अनुपात में छोटा है (ज्यादातर पैरामीटर विशेषज्ञ हैं, एक बड़े EP समूह में विभाजित) ।
  1. डुअलपाइप की तुलना चिमरा (एक प्रतिस्पर्धी द्वि-दिशात्मक शेड्यूलर 2021 से) से करें। दो विशिष्ट गुणों की पहचान करें जो चिमरा में नहीं थे, पेपर के अनुभाग 3.4 का उपयोग करके संदर्भ के रूप में।

प्रमुख शर्तें

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

आगे पढ़ना

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.