- 397B पैरामीटर वाले Mixture-of-Experts मॉडल को MacBook Pro(48GB RAM) पर 4.4 टोकन/सेकंड से अधिक की गति से चलाने वाला C/Metal-आधारित inference engine
- पूरे 209GB मॉडल को SSD से स्ट्रीम करते हुए, Python या किसी framework के बिना केवल C और Metal shaders से कार्यान्वित
- SSD Expert Streaming, FMA-optimized kernel, Deferred GPU Compute आदि के जरिए GPU·SSD·CPU parallel efficiency को अधिकतम किया गया
- 4-bit quantization configuration गुणवत्ता और गति के बीच संतुलन बनाती है, और tool calling capability सहित production-level output उत्पन्न करती है
- लैपटॉप वातावरण में भी अल्ट्रा-लार्ज MoE मॉडल पर real-time inference संभव बनाने वाला lightweight optimization का उदाहरण
प्रदर्शन परिणाम
- 4-bit expert (FMA kernel) configuration में 4.36 tok/s, अच्छी गुणवत्ता, कुल 209GB disk उपयोग
- 4-bit base configuration 3.90 tok/s देता है, यानी FMA optimization से पहले का चरण
- 2-bit expert (trust OS) configuration 5.74 tok/s तक पहुँचता है, लेकिन JSON output errors के कारण tool calling संभव नहीं
- 2-bit peak single token 7.05 tok/s तक पहुँचता है, लेकिन वास्तविक उपयोग के लिए उपयुक्त नहीं
- 4-bit quantization वास्तविक संचालन के लिए उपयुक्त configuration है
हार्डवेयर वातावरण
- MacBook Pro (Apple M3 Max), 16-core CPU(12P+4E), 40-core GPU, 16-core ANE
- 48GB unified memory, bandwidth लगभग 400GB/s
- SSD 1TB Apple Fabric, 17.5GB/s sequential read speed
- macOS 26.2 (Darwin 25.2.0) वातावरण
मॉडल आर्किटेक्चर
- कुल 60 transformer layers: 45 GatedDeltaNet(linear attention) + 15 full attention
- हर layer में 512 experts हैं, जिनमें से K=4 प्रति token सक्रिय होते हैं (1 shared expert सहित)
- hidden dimension 4096
-
मुख्य तकनीकें
-
SSD Expert Streaming
- expert weights (4-bit आधार पर 209GB) को NVMe SSD से parallel
pread() के जरिए जरूरत पड़ने पर लोड किया जाता है
- हर layer में सक्रिय सिर्फ 4 experts लोड होते हैं (प्रत्येक लगभग 6.75MB)
- OS page cache अपने आप caching संभालता है, अलग cache की जरूरत नहीं
- Apple के “LLM in a Flash” पेपर से प्रेरित संरचना
-
FMA-optimized dequant kernel
(nibble * scale + bias) * x ऑपरेशन को fma(nibble, scale*x, bias*x) रूप में पुनर्व्यवस्थित किया गया
scale*x और bias*x को पहले से calculate करके GPU FMA units एक ही instruction में काम करती हैं
- simple implementation की तुलना में 12% speed improvement
-
Metal Compute Shaders
- 4-bit/2-bit dequant matrix-vector multiply, SwiGLU activation, RMS normalization, GPU attention(Q@Kᵀ, softmax, scores@V), RoPE, MoE merge+residual+gate आदि को hand-coded Metal kernels से implement किया गया
-
Deferred GPU Expert Compute
- CMD3(expert forward pass) commands को asynchronous submit किया जाता है ताकि GPU के चलने के दौरान CPU अगली layer तैयार करे
- merge+normalization+residual ऑपरेशन भी GPU पर चलते हैं और सीधे अगली layer को सौंपे जाते हैं
-
Accelerate BLAS का उपयोग
- GatedDeltaNet की recurrent computation के लिए
cblas_sscal, cblas_sgemv, cblas_sger का उपयोग
- scalar code की तुलना में 64% तेज प्रदर्शन
-
Trust the OS
- custom cache हटाकर, OS page cache (LRU-based, लगभग 35GB) expert data caching संभालता है
- अपना Metal LRU, malloc cache, LZ4 compressed cache — इन सबसे धीमा निकला
- natural 71% cache hit rate हासिल
-
unified memory constraints
- Apple Silicon पर SSD DMA और GPU computation एक ही memory controller साझा करते हैं
- parallel execution के दौरान GPU bandwidth saturation से latency बहुत बढ़ जाती है
- GPU → SSD → GPU sequential pipeline ही hardware-optimal form है
1 टिप्पणियां
Hacker News की राय
consumer devices पर भी Qwen 3.5 397B चलाने का एक और तरीका है
लगभग 2.5 BPW quant वर्ज़न उपलब्ध है, इसलिए 128GB memory वाले डिवाइस पर भी यह काफी संभव है
मैंने इसे M1 Ultra पर लगभग 20 tok/s की गति से, 256k context बनाए रखते हुए, अच्छी तरह चलाया
lm-evaluation-harness परिणाम लगभग mmlu 87.86%, gpqa diamond 82.32%, gsm8k 86.43%, ifeval 75.90% थे
विस्तृत अनुभव मैंने Hugging Face चर्चा लिंक1 और लिंक2 में संकलित किए हैं
offline inference के लिए यह एक शानदार मॉडल है
token प्रति experts की संख्या 10 से घटाकर 4 कर दी गई है, इसलिए quality और गिर जाती है
छोटे prompt के लिए ठीक है, लेकिन लंबे session में इसका उपयोग नहीं है
JSON output में
"name"की जगह\name\उत्पन्न होने की समस्या भी है, जिससे tool calling अस्थिर हो जाता हैयह भी जानना है कि क्या यह लंबे context में भी अच्छी तरह काम करता है
और आपका username फिर से देखकर अच्छा लगा — Neovim बनाने वाले व्यक्ति होना वाकई बड़ी उपलब्धि है
मैं भी इसे रोज़ इस्तेमाल करता हूँ
शायद CoconutBattery से इसका अनुमान लगाया जा सकता है
विवरण देखें तो लगता है कि 2-bit quantization और experts की संख्या 10 से 4 करने से लगभग 5 tok/s हासिल हुआ
यह एक दिलचस्प proof of concept है, लेकिन मूल 397B मॉडल की quality से काफी दूर है
ऐसी चरम optimization से मॉडल की intelligence loss होती है
JSON output में
"name"की जगह\name\आने की समस्या भी है, इसलिए यह practical use के लिए उपयुक्त नहीं हैमैं मानता हूँ कि यह प्रयास दिखाता है कि तकनीकी रूप से ऐसा करना संभव है, लेकिन वास्तव में उपयोगी स्तर तक नहीं पहुँचा है
आजकल ऐसे AI-लिखित papers बहुत ज़्यादा हो गए हैं, जिससे थकान महसूस होती है
लेकिन सुना है कि वास्तविक commercial LLMs में भी tool calling accuracy कम होती है
शायद इसे लागू करना कठिन है, या संरचनात्मक रूप से कुछ सीमाएँ हैं
r/LocalLLaMA चर्चा में भी इस पर संबंधित बहस हुई थी
GitHub page के अनुसार साधारण mmap access में page-level overhead के कारण bottleneck आता है
सोच रहा हूँ कि macOS पर huge page सेट करना या
posix_fadviseसे prefetching करना मदद कर सकता है या नहीं2-bit quantization की quality गिरावट वास्तव में गंभीर समस्या है
वास्तविक काम में मेरा अनुभव है कि अच्छी तरह tuned 30B 4-bit model, 70B+ 2-bit से बेहतर होता है
experts की संख्या घटाने पर यह लगभग एक अलग model बन जाता है
फिर भी consumer hardware की सीमाओं को परखने की दृष्टि से यह दिलचस्प है
“लैपटॉप पर चल रहा है” जैसा शीर्षक हर बार $3000 वाले MacBook का मतलब निकले, यह थकाऊ है
compression तकनीक प्रभावशाली है, लेकिन आम उपयोगकर्ताओं के लिए यह व्यावहारिक विकल्प नहीं है
लेकिन शीर्षक देखकर मुझे यह उम्मीद नहीं होती कि यह किसी भी laptop पर चल जाएगा
ज़रूरत से ज़्यादा cynical होने के बजाय मैं ऐसे प्रयोगों का आनंद लेता हूँ
video editing जैसे कामों के कारण बहुत से लोगों के पास पहले से ऐसे high-end MacBook होते हैं
अलग hardware खरीदे बिना मौजूदा laptop से प्रयोग कर पाना इसका फायदा है
गति लगभग 20 tok/s थी, और मुझे लगता है कि यह व्यक्तिगत स्तर पर भी काफी सुलभ है
कामकाजी उपयोग के लिए भी यह निवेश करने लायक था
“No Python. No frameworks. Just C, Objective-C, and hand-tuned Metal shaders.”
यह वाक्य पढ़ते ही अंदाज़ा हो गया कि tokens कहाँ से आए होंगे
“Hand-written Metal kernels” लिखा है, तो क्या यह GPT ने खुद लिखा होगा? 😉
सच में प्रभावशाली परिणाम हैं
क्या Linux पर भी SSD के बजाय system memory आधारित access से ऐसा ही तरीका संभव होगा, यह जानना चाहूँगा
या weights को ROM के रूप में store करने का विचार भी रोचक है
बस यह project Metal का उपयोग करता है, इसलिए macOS-विशेष है
लेकिन MoE models अभी भी bandwidth constraints से काफ़ी प्रभावित होते हैं
लेकिन decode चरण में GPU की तुलना में CPU transfer overhead ज़्यादा होता है, इसलिए लाभ कम रहता है
GPU को shared part acceleration के लिए ही इस्तेमाल करना अधिक कुशल है
लेकिन जैसे ही model system RAM या disk तक चला जाता है, performance तेज़ी से गिरती है
SSD को bottleneck बताया गया था, लेकिन लेखक का कहना है कि उसे 15GB/s मिला
जबकि मेरी जानकारी में अधिकतम bandwidth लगभग 8GB/s थी। मैं क्या मिस कर रहा हूँ?
router का परिणाम आते ही SSD से experts लाए जाते हैं, और उसी क्षण SSD saturate हो जाता है
average IO लगभग 2970MB/s है, जो SSD limit से काफ़ी कम है
कुछ tensors को async reads के साथ parallelize किया जाए तो और बेहतर हो सकता है
मैंने Linux पर io_uring के साथ प्रयोग किया था, जहाँ लगभग 20% reads computation के दौरान parallel में पूरी हो गईं