CUDA Graphs, रिझनिंग मॉडेल आणि विभाजित सर्व्हिंग

आधुनिक AI पायाभूत सुविधा CPU ओव्हरहेड दूर करणे, इन्फरन्स-वेळचे रिझनिंग लूप आणि टप्पा-विशिष्ट GPU क्लस्टर राउटिंग यांच्या मदतीने सिलिकॉन आणि क्लस्टर्सच्या भौतिक मर्यादेपर्यंत कार्यक्षमता नेतात. ही तीन तंत्रे आजच्या सर्वांत वेगवान, बुद्धिमान प्रॉडक्शन AI प्रणालींना चालना देतात.
1. CUDA Graphs आणि कर्नल फ्युजन: CPU & मेमरी ओव्हरहेड दूर करणे
आधुनिक GPUs (जसे H100 आणि B200) घातांकीय वेगाने अधिक जलद झाले असल्याने एक हलका GPU कर्नल चालवण्यासाठी अवघे 2 ते 5 मायक्रोसेकंद लागू शकतात. मात्र CPUला तो कर्नल तयार करणे, पडताळणे आणि PCIe ड्रायव्हरमार्फत लाँच करणे यासाठीच अनेकदा 10 ते 20 मायक्रोसेकंद लागतात. त्यामुळे लाखो डॉलरचा GPU CPUच्या सूचनांची वाट पाहत पूर्णपणे निष्क्रिय बसतो.
- कर्नल फ्युजन (मेमरी आणि लाँच वाचवण्यासाठी ऑपरेशन्स एकत्र करणे).
- फ्युजन नसतानाचा अडथळा. एक प्रमाणित Transformer लेयर डझनभर छोटी ऑपरेशन्स क्रमाने चालवते (उदा., LayerNorm → Linear → Add Residual → GeLU). फ्युजनशिवाय GPU प्रत्येक पायरीसाठी स्वतंत्र कर्नल लाँच करतो, मधले टेन्सर संथ HBMमध्ये (VRAM) लिहितो आणि पुढच्या पायरीसाठी लगेच परत वाचतो.
- फ्युज केलेली अंमलबजावणी. torch.compile (TorchInductor) आणि TensorRT-LLMसारखे कम्पायलर अनेक एलिमेंट-वाइज आणि रिडक्शन ऑपरेशन्स एकाच कस्टम CUDA/Triton कर्नलमध्ये एकत्र करतात. मूल्ये HBMमधून एकदाच लोड होतात, अतिवेगवान ऑन-चिप रजिस्टर/SRAMमध्ये बदलली जातात आणि अगदी शेवटीच परत HBMमध्ये लिहिली जातात. त्यामुळे मेमरी बँडविड्थ वाहतूक आणि कर्नल लाँचची संख्या दोन्ही मोठ्या प्रमाणात कमी होतात.
- CUDA Graphs (संपूर्ण अंमलबजावणी पाइपलाइन एकाच वेळी पुन्हा चालवणे).
- रेकॉर्ड आणि रिप्ले. कर्नल फ्युजननंतरही LLMच्या फॉरवर्ड पाससाठी तयार होणाऱ्या प्रत्येक टोकनमागे शेकडो कर्नल लाँच आवश्यक असतात. CUDA Graphs वॉर्मअप रनदरम्यान GPU ऑपरेशन्सचा संपूर्ण क्रम, म्हणजे कर्नल, मेमरी कॉपी आणि अवलंबित्वे, नोंदवून त्यांना थेट GPU मेमरीत साठवलेल्या स्थिर एक्झिक्युशन ग्राफमध्ये कम्पाइल करून हे सोडवतात.
- शून्य CPU हस्तक्षेप. रिअल-टाइम इन्फरन्सदरम्यान CPUने 300 स्वतंत्र कर्नल एकेक करून लाँच करण्याऐवजी CPU एकच API कॉल (cudaGraphLaunch) देतो, जो GPUवर संपूर्ण फॉरवर्ड पास स्वायत्तपणे सुरू करतो.
- डायनॅमिक आकार हाताळणे. CUDA Graphsना स्थिर मेमरी पत्ते आणि टेन्सर आकार आवश्यक असल्याने इन्फरन्स इंजिन येणाऱ्या बॅच निश्चित बकेट आकारांपर्यंत पॅड करतात (उदा., बॅच आकार 1, 2, 4, 8, 16) आणि आधी नोंदवलेला ग्राफ पुन्हा चालवण्यापूर्वी इनपुट पॉइंटर जागेवरच अपडेट करतात.
2. टेस्ट-टाइम कम्प्युट & रिझनिंग मॉडेल (o1/o3 & DeepSeek-R1)
पूर्वी AI प्रयोगशाळा केवळ प्री-ट्रेनिंगमध्ये अधिक गणनाशक्ती वापरून बुद्धिमत्ता वाढवत असत (अधिक इंटरनेट मजकुरावर प्रशिक्षित मोठी मॉडेल). OpenAIची o1/o3 आणि DeepSeek-R1सारख्या रिझनिंग मॉडेलनी स्केलिंगचा दुसरा अक्ष खुला केला: टेस्ट-टाइम कम्प्युट (इन्फरन्स-टाइम स्केलिंग), ज्यामुळे मॉडेलना उत्तर देण्यापूर्वी अधिक काळ "विचार" करता येतो.
- चेन-ऑफ-थॉटसाठी (CoT) रिइन्फोर्समेंट लर्निंग.
- फक्त माणसांनी लिहिलेल्या टप्प्याटप्प्याच्या तर्काच्या उदाहरणांवर अवलंबून राहण्याऐवजी या मॉडेलना गणित, कोडिंग आणि औपचारिक तर्कशास्त्र यांसारख्या पडताळता येणाऱ्या क्षेत्रांत मोठ्या प्रमाणातील रिइन्फोर्समेंट लर्निंगने (RL) प्रशिक्षित केले जाते (जसे DeepSeek-R1मधील GRPO - Group Relative Policy Optimization).
- मॉडेल अनेक संभाव्य तर्कमार्ग तयार करते, अंतिम उत्तर युनिट टेस्ट किंवा गणितीय पडताळणीत यशस्वी झाले तरच वस्तुनिष्ठ बक्षिसे मिळवते आणि उदयास येणारी संज्ञानात्मक वर्तने स्वायत्तपणे शोधते. यामध्ये स्वतः पडताळणी करणे, मार्ग खुंटल्यास मागे फिरणे आणि जटिल समस्या उप-उद्दिष्टांत विभागणे यांचा समावेश होतो.
- इन्फरन्स गणना कशी स्केल होते.
- कठीण प्रॉम्प्ट दिल्यास मॉडेल अंतिम प्रतिसाद देण्यापूर्वी लपवलेल्या स्क्रॅचपॅडमध्ये हजारो अंतर्गत "थिंकिंग टोकन" तयार करते. मॉडेल गृहीतके तपासण्यासाठी अधिक इन्फरन्स टोकन वापरत जाते तशी अचूकता लघुगणकीय पद्धतीने सुधारते.
- गणनेच्या तडजोडीत बदल. पारंपरिक LLMsमध्ये इन्फरन्स स्वस्त आणि जलद असते (सुमारे 50 आउटपुट टोकन तयार होतात). रिझनिंग मॉडेलमध्ये एकच प्रश्न 10,000 ते 50,000 थिंकिंग टोकन तयार करू शकतो, ज्यामुळे इन्फरन्स एक प्रचंड, सतत बॅच-जनरेशन कार्यभार बनते. यात KV-cacheची वाढ आणि दीर्घ-संदर्भ अटेन्शनची कार्यक्षमता महत्त्वाची ठरते.
3. विभाजित प्रीफिल आणि डिकोड
LLM सर्व्हिंगमध्ये मूलतः विरुद्ध स्वरूपाचे दोन गणनात्मक टप्पे असतात. दोन्ही टप्पे अगदी त्याच GPUवर चालवल्यास गंभीर शेड्यूलिंग संघर्ष आणि हार्डवेअरचा अपुरा वापर होतो.
| टप्पा | कार्यभाराचे स्वरूप | हार्डवेअरमधील अडथळा | विलंबाचे माप |
|---|---|---|---|
| प्रीफिल (प्रॉम्प्ट प्रक्रिया) | एकाच फॉरवर्ड पासमध्ये सर्व प्रॉम्प्ट टोकन (उदा., 10,000 टोकन) समांतरपणे प्रक्रिया करते. | गणनाक्षमता-मर्यादित (प्रचंड मॅट्रिक्स गुणाकारांनी GPU Tensor Coresची पूर्ण क्षमता वापरते). | TTFT (पहिल्या टोकनपर्यंतचा वेळ) |
| डिकोड (टोकन निर्मिती) | प्रत्येक पायरीवर संपूर्ण KV cache वाचून आउटपुट टोकन एकेक करून क्रमाने तयार करते. | मेमरी-बँडविड्थ-मर्यादित (VRAM वाचनाची वाट पाहत Tensor Cores बहुतांश निष्क्रिय राहतात). | TPOT (प्रत्येक आउटपुट टोकनमागील वेळ) |
- एकत्र ठेवल्याने होणाऱ्या हस्तक्षेपाची समस्या.
- पारंपरिक एकीकृत सर्व्हिंगमध्ये इतर 50 वापरकर्त्यांचे डिकोड टोकन स्ट्रीम होत असताना एखाद्या वापरकर्त्याने प्रीफिलसाठी प्रचंड 32,000-टोकन दस्तऐवज दिला, तर प्रीफिलचे प्रचंड मॅट्रिक्स गणित GPUच्या Tensor Coresवर ताबा मिळवते. त्यामुळे स्ट्रीमिंग करणाऱ्या सर्व 50 वापरकर्त्यांना जाणवण्याजोगे थांबे आणि विलंबाचे अचानक चढाव ("अडखळणे") अनुभवावे लागतात.
- शिवाय प्रीफिलला उच्च गणनात्मक FLOPs लागतात, तर डिकोडला मोठ्या बॅचचे KV cache ठेवण्यासाठी प्रचंड HBM मेमरी बँडविड्थ आणि क्षमता लागते.
- क्लस्टरचे विभाजन (विभाजित आर्किटेक्चर).
- आधुनिक हायपरस्केल इन्फरन्स प्रणाली (जसे Mooncake, DistServe आणि NVIDIA Dynamo) GPU क्लस्टर दोन समर्पित पूलमध्ये विभागतात:
- 1. प्रीफिल पूल: लांब प्रॉम्प्ट वेगाने प्रक्रिया करून कडक Time-To-First-Token (TTFT) लक्ष्ये गाठण्यासाठी मूळ गणना थ्रूपुटला अनुकूल केलेला (उच्च Tensor Core वापर, कमी टेन्सर समांतरता).
- 2. डिकोड पूल: कमाल टोकन-प्रति-सेकंद वेगाने सुरळीत टोकन स्ट्रीम करण्यासाठी उच्च मेमरी बँडविड्थ आणि मोठ्या KV-cache क्षमतेला अनुकूल केलेला (विस्तृत टेन्सर/एक्स्पर्ट समांतरता, मोठ्या बॅच).
- हाय-स्पीड KV Cache ट्रान्सफर. प्रीफिल GPU प्रॉम्प्ट प्रक्रिया पूर्ण करून प्रारंभिक KV Cache तयार करतो, तेव्हा तो हा KV Cache अतिवेगवान NVLink किंवा InfiniBand RDMA इंटरकनेक्टमार्फत थेट डिकोड GPUच्या VRAMमध्ये स्ट्रीम करतो. डिकोड GPU कोणत्याही हस्तक्षेपाविना लगेच टोकन निर्मितीची जबाबदारी घेतो.