MTPLX एक M1 Ultra पर: वह 25 टोक/सेक Tune That Served 16.5
एक हेड-टू-हेड रीमैच: MTPLX का मूल-MTP रनटाइम बनाम हाथ से ट्यून किया गया mlx-vlm लेन भाग एक से, एक 128 GB M1 Ultra पर. ऑटो ट्यूनर ने वादा किया 2.20x. सर्विंग पाथ के पास अन्य योजनाएँ थीं — Kimi K3 के साथ मापा गया 1 दिन में.
Developed by Robert E. Beckner III (Merlin) | rbeckner.com
रीमैच आया 1 दिन पहले. कल का M1 Ultra ट्यूनिंग आर्टिकल एक पूर्वानुमान के साथ बंद हुआ: जब एक MLX रिलीज़ संकलित डिकोड ग्राफ़ लैंड करता है, रीमैच 20.3 टोक/सेक लेन के खिलाफ दोपहर और 1 डाउनलोड लेगा। इस सुबह मैंने एक नया रनटाइम देखा जिसे MTPLX कहा जाता है, जो भविष्य को एक तैयार उत्पाद के रूप में वादा करता है — मूल मल्टी-टोकन-प्रेडिक्शन स्पेकुलेटिव डिकोडिंग Apple सिलिकॉन पर, एक ऑटो ट्यूनर जो आपकी विशिष्ट मशीन को मापता है, एक OpenAI- और Anthropic-संगत सर्वर, 1-क्लिक लॉन्चेज़ उन एजेंट हार्नेस के लिए जिन्हें हम वास्तव में उपयोग करते हैं, और Qwen3.8-27B को उसका फ़्लैगशिप कोडिंग मॉडल के रूप में। उनकी साइट कहती है "आपके पसंदीदा टूल्स, दोगुनी गति पर।" मैंने इसे Kimi K3 के पास लाया, मेरी सहयोगी ट्यूनिंग एडवेंचर के दिन पहले, और हमने साथ में शर्तें तय कीं: इसे Studio पर साफ़-सुथरा इंस्टॉल करें, उसके अपने ट्यूनर को अपना सर्वश्रेष्ठ केस बनाने दें, फिर मापें कि सर्वर वास्तव में क्या सर्व करता है. Kimi ने रिमोट वर्क और काउंटर चलाए; मैंने घर के नियम रखे और कॉल किए. यह है कि दिन वास्तव में कैसे गया.
MTPLX वह उत्पाद संस्करण है जिसे हमने साथ में बनाया था लेन का#
वास्तुकला को अग्रिम में श्रेय दिया जाना चाहिए, क्योंकि यह सही विचार है जिसे गंभीरता से लागू किया गया है. MTPLX मॉडल के अपने MTP हेड्स के साथ ड्राफ़्ट करता है — वही तंत्र जिसे हमारा लेन उपयोग करता है — और सटीक रिजेक्शन सैंपलिंग के माध्यम से ड्राफ़्ट स्वीकार करता है, इसलिए तापमान 0.6 पर सैंपलिंग सामान्य डिकोडिंग के समान वितरण पैदा करती है, केवल तेज़. कोई अलग ड्राफ़्ट मॉडल मेमोरी का उपभोग नहीं करता, ड्राफ़्ट गहराई प्रत्येक मशीन के लिए ऑटोरेग्रेसीव बेसलाइन के खिलाफ ट्यून की जाती है, और परियोजना अनजाने MTP साइडकार्स को मनमाने वज़नों से जोड़ने से इंकार करती है. वह अंतिम नीति एक अनुशासन थी जिसे किमी और मुझे मैन्युअल रूप से लागू करना पड़ा, दिन पहले, जब हमने Qwen3.8 के ड्रॉप्ड MTP टेन्सर्स को उनके ट्रंक के साथ पुनः जोड़ा. भाग एक से लेन स्पष्ट मापदंड था: वही स्टूडियो, वही मॉडल परिवार, उसी तरह मापा गया.
स्थापना ने वजन को छूने से पहले 2 क्वारंटीन जांच पास की#
पहली जांच मेरी थी. मार्च में, मेरे स्वायत्त परिष्करण प्रयोगशाला में, हम एक जाल पर पहुंचे जहां एक अलग Python वातावरण ने शांतिपूर्वक Apple की तेज़ लाइब्रेरीज़ तक पहुंच खो दी, और संख्याएँ केवल धीमी लौटीं. किमी आगे बढ़ने से पहले, मैंने जाल के लागू न होने का प्रमाण मांगा. एक 3-लाइन प्रॉब ने इसे तय किया — मूल arm64 इंटरप्रेटर, Metal उपलब्ध, GPU डिफ़ॉल्ट डिवाइस के रूप में. Apple का Metal पथ स्वयं mlx-metal व्हील के अंदर शिप किया जाता है, इसलिए इंटरप्रेटर का मूल GPU पहुंच के लिए अप्रासंगिक है, और भाग एक से लेन ने पहले ही उसी अलगाव आकार के माध्यम से GPU-नेटिव थ्रूपुट साबित किया था. MTPLX का अपना निरीक्षक सहमत हुआ, दोनों के Qwen3.8-27B बिल्ड्स को सत्यापित-नेटिव के रूप में रेट किया, सभी 15 MTP टेन्सर मौजूद थे.
दूसरी जांच किमी की थी, मध्य-डाउनलोड. MTPLX का pull कमांड सामान्य Hugging Face कैश पर्यावरण चर को अनदेखा करता है, और पहला प्रयास 20 GB मॉडल को स्टूडियो के होम डायरेक्टरी में लिख रहा था बजाय डेटा वॉल्यूम के जिसे घर के नियम सुरक्षित करते हैं. किमी ने पुल को समाप्त किया, केवल वही हटाया जो उसने बनाया था, और स्पष्ट कैश डायरेक्टरी के साथ पुनः आरंभ किया. प्रशंसक पूरे दिन Apple के वक्र पर रहे, जो एक ऐसे मशीन पर महत्वपूर्ण है जो उड़ान सिम्युलेटर के रूप में भी काम करता है.
उस सुबह सबसे ज़्यादा शोर करने वाली मशीन वह नहीं थी जो प्रयोग चला रही थी#
डाउनलोड के बीच में, मेरा अपना वर्कस्टेशन तीव्रता से स्पाइक करने लगा — लोड औसत 50 से ऊपर चढ़ गया — और हमने प्रयोग रोक दिया ताकि एक अधिक महत्वपूर्ण सवाल का उत्तर मिल सके: क्या यह हमारा काम था? यह नहीं था. हमारा काम Studio पर छोटे-जीवन वाले SSH सत्रों पर चला; स्थानीय पदचिह्न कुछ समाप्त curl और ssh प्रक्रियाएँ थीं। तूफ़ान एक Apple डेमन लहर थी — एक फंसा हुआ एसेट डाउनलोड, इंडेक्सिंग, और एक वर्चुअलाइज़ेशन प्रक्रिया से उछाल जो गायब हो गई इससे पहले कि हम उसके मालिक का नाम ले सकें — साथ ही यह खोज कि "रहस्यमय पुनर्जन्म नोड प्रक्रियाएँ" जिन्हें मैं मार रहा था, वे 3 विकास पर्यवेक्षक थे जो अपने सर्वर को पुनः आरंभ करके ठीक वही काम कर रहे थे। हमने पूरे काम को मशीन-गार्ड हैंडऑफ़ में लिखा और साफ़ मन से प्रयोग पर लौट आए. यह विराम इस कहानी में इसलिए है क्योंकि अनुशासन वही है जो बेंचमार्क चलाते हैं: अपनी स्वयं की पदचिह्न को जानें इससे पहले कि आप किसी मशीन को दोष दें.
MTPLX का ट्यूनिंग रीतिविधान ईमानदार इंजीनियरिंग है: यह आपके हार्डवेयर पर वास्तविक मॉडल को प्रत्येक ड्राफ्ट गहराई पर चलाता है, ऑटोरेग्रेसीव डिकोडिंग को बेसलाइन के रूप में रखता है, और केवल तभी गहराई सहेजता है जब वह उस बेसलाइन को मात देता है. M1 Ultra पर यह AR 11.4, गहराई 1 पर 9.2, गहराई 2 पर 25.1, गहराई 3 पर 20.7 टोक/सेकंड — गहराई 2 ने 2.20x पर विजेता को ताज पहनाया, सभी भविष्य के लॉन्च के लिए सहेजा गया.
वह 25.1 एक वास्तविक इंजन का वास्तविक माप है, 24% हमारे लेन के 20.3 सर्विंग रेट से ऊपर. यदि सर्वर ने इसे पुन: उत्पन्न किया होता, तो यह लेख एक माइग्रेशन गाइड होता.
सर्वर ने 16.5 सर्व किया, और डिफ़ॉल्ट्स टोकन को आंखों से बाहर खर्च कर रहे थे#
सर्विंग बेंच ने वही प्रॉम्प्ट्स, तापमान 0, और वॉल-क्लॉक अकाउंटिंग का उपयोग किया जो लेन की बेसलाइन थी. पहला रन 14.7 टोक/सेकंड पर वापस आया, और प्रतिक्रिया मेटाडेटा ने 2 डिफ़ॉल्ट्स को माप के खिलाफ काम करते हुए दिखाया:
रीज़निंग मोड डिफ़ॉल्ट रूप से चालू है, और Qwen3.8 उत्तर देने से पहले सोचता है. एक साधारण काउंट-टू-10 प्रॉम्प्ट पर, 44 के 64 उत्पन्न टोकन छिपे हुए थे, जिन्हें क्लाइंट कभी प्रदर्शित नहीं करता. वास्तविक कार्यभार उन टोकन के लिए भुगतान करते हैं, इसलिए वॉल रेट में पहले से ही वे शामिल हैं — लेकिन ट्यूनर के प्रॉम्प्ट्स पर ऐसा कोई कर नहीं था.
टर्बो रनटाइम प्रोफ़ाइल, इसके संकलित वेरिफ़ाई कर्नेल्स के साथ, नेटिव Mac ऐप का लॉन्च नियम है। एक टर्मिनल mtplx serve Sustained प्रोफ़ाइल को हल करता है, इसलिए कमांड-लाइन पथ तेज़ कर्नेल्स को कभी नहीं देखता जब तक आप न पूछें।
टर्बो को पिन करना, गहराई 2, और रीज़निंग बंद करने से FP16 बिल्ड को 16.5 टोक/सेकंड वॉल तक बढ़ाया गया — सबसे अच्छा MTPLX पूरे दिन उत्पन्न हुआ. 4-बिट ऑप्टिमाइज़्ड-स्पीड बिल्ड, वह जिसे प्रोजेक्ट कोडिंग के लिए अनुशंसा करता है, ने 15.5 सर्व किया. दोनों बिल्ड्स हमारे लेन के 15 GB के मुकाबले डिस्क पर 20.4 GB पर बैठे हैं, और एक बैंडविड्थ-बाउंड मशीन पर हर टोकन उन अतिरिक्त 5 GB को स्ट्रीम करने के लिए भुगतान करता है.
Serving rate on identical prompts (tok/s wall, M1 Ultra, Qwen3.8-27B)Chart data
दिन का सबसे उपयोगी निष्कर्ष 25.1 और 16.5 के बीच अंतर को समझाता है. MTPLX का अपना सर्वर स्टार्टअप पर एक वार्मअप सीढ़ी लॉग करता है, और वह सीढ़ी इंजन से 20-24 टोकन/सेकंड रिपोर्ट करती है — उसी प्रक्रिया के भीतर जो फिर HTTP पर 16.5 सर्व करती है। इंजन तेज़ है और परिवहन पर कर लगाया जाता है। डिकोड लूप और क्लाइंट के बीच HTTP परत है, प्रति अनुरोध सत्र-बैंक बुककीपिंग (पहले अनुरोध के आँकड़ों में 160 MB स्नैपशॉट लिखना दिखाई दिया), और रीज़निंग मशीनरी, और प्रत्येक टोकन उस सीमा को पार करता है। M4 और M5 चिप्स पर, जहां परियोजना के प्रकाशित 1.6-2.24x आंकड़े मापे गए थे, तेज़ CPU और फैब्रिक पारगमन को अवशोषित करते हैं. M1 Ultra का इंजन तालमेल रखता है; इसका सर्विंग पाथ नहीं रखता.
Diagram source
graph LR
subgraph "ट्यूनर पाथ"
A[वास्तविक मॉडल] --> B[ड्राफ्ट गहराई D1-D3]
B --> C[डिकोड-ओनली टाइमर
25.1 टोकन/सेकंड]
end
subgraph "सर्विंग पाथ"
D[HTTP अनुरोध] --> E[सत्र बैंक
+ रीज़निंग डिफ़ॉल्ट्स]
E --> F[वही इंजन
सीढ़ी दिखाती है 20-24]
F --> G[प्रति-टोकन सीमा
16.5 टोकन/सेकंड दीवार]
end
style C fill:transparent,stroke:#10B981,stroke-width:2px
style G fill:transparent,stroke:#F59E0B,stroke-width:2px
यह भाग एक का पाठ है जो एक नए कॉस्ट्यूम के साथ पहना गया है. llama.cpp के समुदाय के दावे 25-32 टोकन/सेकंड इस चिप के संपर्क में नहीं बचे, और MTPLX के ट्यूनर का 25.1 अपने स्वयं के सर्वर में नहीं बचे. दृढ़ नियम तेज होता है: एक सर्विंग दर HTTP सीमा पर मापी जाती है, उत्पादन डिफ़ॉल्ट्स दिखाई देते हैं, ट्यूनर के अंदर कभी नहीं। यह है benchmark-driven development जिसे स्टैक में एक स्तर ऊपर लागू किया गया है।
चैलेंजर ने 38 GB हल्का छोड़ दिया, और वॉचडॉग पीछे रह गया#
मैंने Kimi को प्रयोग शुरू होने से पहले 1 गैर-परक्राम्य दिया: जो भी उस Studio पर चलता है उसे निष्क्रिय होने पर स्वयं को रोकना चाहिए, क्योंकि मशीन का शाम का काम एक फ्लाइट सिम्युलेटर है. MTPLX अपने चैट सर्वर के लिए कोई आइडल टाइमआउट नहीं भेजता, इसलिए Kimi ने वॉचडॉग को एक छोटे रैपर स्क्रिप्ट में बनाया — केवल लूपबैक बाइंडिंग, Apple की नीति पर फैन, और एक कनेक्शन वॉचर जो 10 मिनट बिना क्लाइंट्स के सर्वर को रोक देता है। यह अपनी लाइव फायर ड्रिल पास कर गया, 60-सेकंड मार्क पर एक टेस्ट इंस्टेंस को नष्ट करके और पोर्ट को साफ़-सुथरे ढंग से रिलीज़ करके. रैपर और वर्चुअल एनवायरनमेंट मशीन पर रहते हैं, इसलिए रीटेस्ट 1 डाउनलोड दूर है जब MTPLX रिलीज़ M1-जनरेशन सर्विंग पाथ पर काम करता है या एक मेल खाता MTP आर्टिफैक्ट 15 GB के करीब भेजता है.
वज़न स्वयं नहीं रहे. एक बार निर्णय स्पष्ट हो जाने पर, हमने साफ-सफाई सावधानीपूर्वक की — दोनों MTPLX मॉडल डायरेक्टरीज़, 38 GB FP16 और 4-बिट बिल्ड्स में, हटाए गए यह पुष्टि करने के बाद कि कोई प्रोसेस उन्हें नहीं रखता, वॉल्यूम को ठीक उसी पूर्व-प्रयोग मुक्त स्थान पर लौटाते हुए. डिलीशन वर्कफ़्लो का हिस्सा बना रहता है: हर चैलेंजर जो हारता है उसी दिन डिस्क छोड़ देता है, जिससे अगला प्रयोग ईमानदार रहता है.
भाग एक का लेन कभी नहीं हिला. यह सुबह 20.3 टोक/सेकंड पर सेवा करता था, यह शाम को 20.3 टोक/सेकंड पर सेवा करता था, और अब यह अपनी स्लॉट को 3 चुनौतीकर्ताओं के खिलाफ रखता है बजाय 2 के — अभी भी एक प्रयोगात्मक लेन, 1 डाउनलोड दूर है अपनी अगली रीमैच से. भाग एक की चेकलिस्ट में 3 प्रविष्टियाँ बढ़ती हैं:
ट्यूनर का नंबर इंजन की छत है, और सर्विंग पाथ तय करता है कि आप इसका कितना हिस्सा रखते हैं. सीमा पर मापें जहाँ आपके क्लाइंट्स वास्तव में पार करते हैं.
डिफ़ॉल्ट्स बेंचमार्क का हिस्सा हैं. रीज़निंग मोड्स, रनटाइम प्रोफाइल्स, और सेशन कैश सभी टोकन या समय खर्च करते हैं, और एक निष्पक्ष लड़ाई उन्हें दोनों पक्षों पर स्पष्ट रूप से पिन करती है.
डिस्क एक परिकल्पना बजट है. 2 चुनौतीकर्ता 20.4 GB पर बनाता है प्रत्येक खरीदे गए 1 दोपहर की निश्चितता, और निश्चितता सस्ती होती है जब बाइट्स समय पर निकलती हैं.
जोड़ी की संतोषजनक सममिति यह है कि भाग एक ने इस सटीक प्रयोग को कतारबद्ध करके समाप्त किया, और प्रयोग एक उत्पाद के रूप में पैकेज्ड होकर आया जिसमें वास्तविक शिल्प है — सटीक सैंपलिंग, प्रति-यंत्र ट्यूनिंग, ईमानदार सत्यापन. शिल्प वास्तविक था और हानि वास्तविक थी, और दोनों निष्कर्ष एक ही दिन के मापन, CPU तूफान और सभी से आए. एक स्कोरबोर्ड के साथ साहसिक कार्य सबसे अच्छा प्रकार है, और इसने किमी K3 को हर काउंटर पढ़ते हुए मेरे बगल में रखा — वही संयोजित रिटर्न जो मैं स्थानीय AI लाभों को बुनियादी ढांचे के रूप में मानते हुए से प्राप्त करता हूँ. लेन अपनी स्लॉट रखता है, डिस्क पतली है, चेकलिस्ट लंबी है, और अगला चुनौतीकर्ता पहले से ही कोशिश करने के लिए स्वागत है.