मैंने केवल 3.2 GB RAM वाले लैपटॉप पर, बिना किसी बाहरी मदद के केवल plain C99 और एक NVMe ड्राइव का उपयोग करके, 284-बिलियन-पैरामीटर वाला लैंग्वेज मॉडल चलाने में सफलता प्राप्त की। इसका तरीका पूरे 160 GB चेकपॉइंट को मेमोरी में लोड करने के बजाय मॉडल के एक्सपर्ट वेट्स (expert weights) को स्ट्रीम करना था, जिससे यह साबित हुआ कि सबसे बड़े Mixture-of-Experts (MoE) मॉडल को भी कंज्यूमर हार्डवेयर पर चलाया जा सकता है।

यह क्यों महत्वपूर्ण है

लार्ज लैंग्वेज मॉडल्स (LLMs) कोड जनरेशन, रिसर्च असिस्टेंस और बहुत कुछ को शक्ति प्रदान करते हैं, लेकिन उनका आकार आमतौर पर उपयोगकर्ताओं को महंगे मल्टी-GPU सर्वर या भारी क्वांटाइजेशन (quantisation) की ओर धकेलता है जो गुणवत्ता को नुकसान पहुँचाता है। यह दिखाना कि एक 284 B-पैरामीटर वाला MoE मॉडल कुछ गीगाबाइट RAM के साथ चल सकता है, शौकिया लोगों (hobbyists), छोटे स्टार्टअप्स और बजट-बाधित शोधकर्ताओं के लिए सटीकता से समझौता किए बिना अत्याधुनिक मॉडल्स के साथ प्रयोग करने के द्वार खोलता है।

मॉडल और हार्डवेयर की बाधा (bottleneck)

DeepSeek-V4-Flash प्रत्येक ट्रांसफॉर्मर लेयर में 256 एक्सपर्ट्स के माध्यम से 284 B पैरामीटर्स को स्टोर करता है। रॉ चेकपॉइंट डिस्क पर लगभग 160 GB जगह लेता है—एक ऐसा आकार जो एक सामान्य लैपटॉप में मौजूद 3.2 GB RAM के मुकाबले बहुत बड़ा है। पारंपरिक इन्फरेंस पाइपलाइन पूरे चेकपॉइंट को मेमोरी में मैप करने की कोशिश करती हैं, जिससे RAM बजट जल्दी खत्म हो जाता है और सिस्टम क्रैश हो जाता है।

एक्सपर्ट वेट्स को स्ट्रीम करना: मुख्य विचार

MoE आर्किटेक्चर प्रत्येक टोकन के लिए एक्सपर्ट्स के केवल एक बहुत छोटे हिस्से को सक्रिय करते हैं। DeepSeek-V4-Flash में, राउटर प्रति लेयर 256 में से छह एक्सपर्ट्स का चयन करता है। चूंकि गणना (computation) कभी भी निष्क्रिय एक्सपर्ट्स को नहीं छूती है, इसलिए इन्फरेंस इंजन उन्हें लोड करने को छोड़ सकता है।

कार्यान्वयन चेकपॉइंट को एक स्ट्रीमिंग सोर्स के रूप में मानता है। जब राउटर यह तय करता है कि वर्तमान टोकन के लिए किन एक्सपर्ट्स की आवश्यकता है, तो इंजन उन वेट ब्लॉक्स को NVMe ड्राइव से RAM में मौजूद एक LRU (least-recently-used) कैश में खींच लेता है। यदि कैश पर्याप्त बड़ा है, तो लगातार टोकन के दौरान उन्हीं एक्सपर्ट्स का पुन: उपयोग किया जाता है, जिससे कैश हिट (cache hits) मिलते हैं; यदि कैश बहुत छोटा है, तो इंजन डिस्क से बार-बार पढ़ता है। इसका परिणाम 3.23 GB का पीक मेमोरी फुटप्रिंट है, जो लैपटॉप की सीमाओं के भीतर है, जबकि यह फुल-प्रिसिजन वेट्स को बनाए रखता है और इसके लिए किसी GPU एक्सेलेरेशन की आवश्यकता नहीं होती है।

कार्यान्वयन से प्राप्त कठिन सबक

1. सुसंगत आउटपुट सही होने का प्रमाण नहीं है एक बग वाला कर्नेल (kernel) अभी भी विश्वसनीय दिखने वाले वाक्य बना सकता है, खासकर जब मॉडल के भाषाई पैटर्न संख्यात्मक त्रुटियों (numerical errors) को छिपा देते हैं। मैंने प्रत्येक 14 महत्वपूर्ण ऑपरेशन्स को एक नए PyTorch रेफरेंस के विरुद्ध सत्यापित किया, यह जाँचते हुए कि संख्यात्मक अंतर एक बहुत ही कम टॉलरेंस (tolerance) के भीतर रहे। इस चरण को छोड़ने से सूक्ष्म विचलन (subtle drift) अनसुना रह जाता।

2. साझा विफलता मोड आपके परीक्षणों को धोखा दे सकते हैं मेमोरी-करप्शन बग ने रूटिंग विकल्पों को कुछ ही एक्सपर्ट्स तक सीमित कर दिया, जिससे कैश-हिट रेट 52% से बढ़कर 95% हो गया और एक बड़े स्पीडअप का भ्रम पैदा हुआ। क्योंकि टेस्ट सुइट ने एक ही बग वाले कोड के दो संस्करणों की तुलना की थी, इसलिए यह समस्या को पकड़ नहीं पाया। इसका समाधान एक स्वतंत्र रेफरेंस पाथ जोड़ना है—ऐसा कोड जिसका प्राथमिक कार्यान्वयन के साथ कोई साझा लॉजिक न हो—ताकि कोई साझा दोष अनसुना न रह जाए।

3. ऑप्टिमाइज़ करने से पहले मापें मैंने मान लिया था कि एक मेमोरी कॉपी में 1 ms लगता है और उसे ऑप्टिमाइज़ करने में समय बिताया। प्रोफाइलिंग से पता चला कि उस ऑपरेशन में वास्तव में 3.6 ms लगे, या कुल इन्फरेंस समय का 22%। सबक: प्रदर्शन-महत्वपूर्ण (performance-critical) सेक्शन के लिए कभी भी अंतर्ज्ञान (intuition) पर भरोसा न करें; सटीक माप ही एकमात्र विश्वसनीय मार्गदर्शक है।

4. थर्मल स्थितियाँ थ्रूपुट को नाटकीय रूप से प्रभावित करती हैं एक "हीट-सोक्ड" (heat-soaked) लैपटॉप पर बेंचमार्क चलाने से ठंडी मशीन की तुलना में तीन गुना तक धीमा रनटाइम प्राप्त हुआ। बढ़े हुए तापमान ने NVMe ड्राइव के थ्रूपुट को धीमा कर दिया और CPU को धीमा कर दिया, जिससे परिणाम प्रभावित हुए। जब भी आप परफॉरमेंस नंबर प्रकाशित करें, सिस्टम की थर्मल स्थिति को रिकॉर्ड करें।

आंकड़े क्या दर्शाते हैं

  • डिस्क पर मॉडल का आकार: ~160 GB
  • पीक RAM उपयोग: 3.23 GB
  • प्रति टोकन एक्सपर्ट्स: 6 (256 में से)
  • कैश-हिट रेट: RAM के साथ बदलता है; 3.2 GB के साथ यह उतार-चढ़ाव करता है।
  • कोई क्वांटाइजेशन नहीं: फुल-प्रिसिजन वेट्स को स्ट्रीम किया जाता है, जिससे मॉडल की गुणवत्ता बनी रहती है।

यदि RAM बजट लगभग 3.21 GB से नीचे गिर जाता है, तो कैश कभी नहीं भरता और इंजन प्रत्येक टोकन पर स्ट्रीम करता है, जिससे प्रदर्शन में भारी गिरावट आती है।

सोर्स कोड github.com/ronak-create/deepseek-v4-in-c पर सार्वजनिक रूप से उपलब्ध है। जो कोई भी इस प्रयोग को दोहराना या विस्तार करना चाहता है, उसके लिए t.me/GyaanSetuAi पर एक कम्युनिटी डिस्कशन चैनल मौजूद है।

निष्कर्ष

केवल उन्हीं विशेषज्ञों (experts) को स्ट्रीम करना जिनका एक MoE मॉडल वास्तव में उपयोग करता है, एक 284 B-पैरामीटर वाले LLM को बिना क्वांटाइजेशन (quantisation) या GPU एक्सेलेरेशन के एक साधारण लैपटॉप पर चलाने में सक्षम बनाता है। यह प्रयोग दर्शाता है कि चतुर डेटा मूवमेंट, कठोर सत्यापन और अनुशासित माप उन हार्डवेयर सीमाओं को दरकिनार कर सकते हैं जिन्हें कई लोग अपरिवर्तनीय मानते हैं।