mlmodelc Core ML मॉडल का एक संकलित संस्करण है, जो iOS, macOS और iPadOS चलाने वाले Apple उपकरणों पर निष्पादन के लिए अनुकूलित है। मूल .mlmodel प्रारूप के विपरीत, mlmodelc फ़ाइल एक संकलन चरण से गुज़रती है जिसके दौरान मॉडल को एक आंतरिक प्रतिनिधित्व में बदल दिया जाता है जिसे Core ML Runtime समझता है। Apple Developer Documentation, 2025 के अनुसार, Xcode में एप्लिकेशन बनाते समय संकलन स्वचालित रूप से होता है, साथ ही नेटवर्क से मॉडल डाउनलोड करने के बाद डिवाइस पर भी होता है। mlmodelc व्याख्या योग्य प्रारूप की तुलना में तेज़ स्टार्टअप और कम मेमोरी खपत सुनिश्चित करता है।
मुख्य बिंदु
mlmodelc Apple उपकरणों पर सीधे निष्पादन के लिए एक संकलित बाइनरी Core ML मॉडल प्रारूप है। मूल .mlmodel प्रारूप एक पैकेज है जिसमें protobuf मॉडल विवरण, सारणियों के रूप में भार और JSON में मेटाडेटा होता है। संकलन के दौरान, यह संरचना विशिष्ट हार्डवेयर प्लेटफ़ॉर्म के लिए अनुकूलित एक कॉम्पैक्ट बाइनरी प्रतिनिधित्व में बदल जाती है।
mlmodelc की मुख्य विशेषता इनफ़रेंस के दौरान व्याख्या चरण की अनुपस्थिति है। Core ML Runtime protobuf स्कीमा को पार्स नहीं करता और गणना ग्राफ़ को गतिशील रूप से नहीं बनाता — ये सभी चरण संकलन समय पर किए जाते हैं। इससे आर्किटेक्चर जटिलता के आधार पर मॉडल के पहले लोड समय में 30% से 60% तक सुधार होता है।
WWDC 2023 सत्र “Core ML Tools और मॉडल ऑप्टिमाइज़ेशन” के अनुसार, संकलन में फ़्लोटिंग-पॉइंट ऑपरेशन ऑप्टिमाइज़ेशन, क्रमिक परतों का विलय और Apple Neural Engine द्वारा समझे जाने वाले प्रारूप में रूपांतरण शामिल है। डेवलपर को इस प्रक्रिया को मैन्युअल रूप से प्रबंधित करने की आवश्यकता नहीं है — Xcode बिल्ड समय पर स्वचालित रूप से संकलन करता है।
| विशेषता | .mlmodel | mlmodelc |
|---|---|---|
| भंडारण प्रारूप | पैकेज (protobuf + भार) | बाइनरी, प्लेटफ़ॉर्म-विशिष्ट |
| निष्पादन के लिए तत्परता | संकलन आवश्यक | इनफ़रेंस के लिए तैयार |
| डिस्क पर आकार | मूल आकार | 10–20% छोटा |
| पहले लॉन्च की गति | धीमी (पार्सिंग + संकलन) | तत्काल स्टार्टअप |
| ANE समर्थन | अतिरिक्त अनुकूलन आवश्यक | स्वचालित |
मॉडल का mlmodelc में संकलन तीन चरणों से होकर गुज़रता है। पहले चरण में, Core ML Tools .mlmodel की protobuf विशिष्टता पढ़ता है और MIL (Model Intermediate Language) प्रारूप में एक आंतरिक गणना ग्राफ़ बनाता है। उपकरण लक्ष्य डिवाइस के साथ प्रत्येक ऑपरेशन की संगतता की जाँच करता है और CPU निष्पादन के लिए असमर्थित परतों को चिह्नित करता है।
दूसरे चरण में, ग्राफ़ अनुकूलन किया जाता है: क्रमिक परतों का विलय (convolution + batch norm → fused convolution), मृत नोड्स को हटाना, और FP32 से FP16 या INT8 में भार का क्वांटीकरण। Apple Engineering Report “Core ML Optimization Pipeline” (2024) के अनुसार, परत विलय इनफ़रेंस संचालन की संख्या को 40% तक कम करता है।
तीसरा चरण बाइनरी प्रतिनिधित्व निर्माण है। अनुकूलित ग्राफ़ मालिकाना Core ML Runtime प्रारूप में क्रमबद्ध किया जाता है। भार CPU कैश लाइनों के साथ संरेखित सहेजे जाते हैं, और मेटाडेटा तेज़ पहुंच के लिए एक अलग इंडेक्स में संग्रहीत किया जाता है। परिणाम .mlmodelc एक्सटेंशन वाला एक फ़ोल्डर है, जो एप्लिकेशन बंडल में शामिल करने के लिए तैयार है।
mlmodelc संरचना में तीन प्रमुख घटक शामिल हैं। Model Description में मॉडल मेटाडेटा होता है: इनपुट और आउटपुट प्रकार, उनके आयाम, टेंसर नाम और प्रीप्रोसेसिंग पैरामीटर। यह खंड Core ML API के साथ संगतता के लिए JSON-जैसे प्रारूप में संग्रहीत किया जाता है।
Program आंतरिक MIL भाषा में गणना ग्राफ़ का बाइनरी प्रतिनिधित्व है। Apple MIL को TensorFlow में MLIR या ONNX के समान एक मध्यवर्ती प्रतिनिधित्व के रूप में उपयोग करता है। एक MIL प्रोग्राम में ऑपरेशन होते हैं, जिनमें से प्रत्येक का एक प्रकार, इनपुट और आउटपुट टेंसर और विशेषताएँ होती हैं। MIL प्रारूप Apple Neural Engine पर कुशल निष्पादन के लिए अनुकूलित है।
तीसरा घटक weights.bin है — एक फ़ाइल जिसमें मॉडल के सभी प्रशिक्षित भार होते हैं। भार इष्टतम कैश लोडिंग के लिए 64 बाइट्स पर संरेखित संग्रहीत किए जाते हैं। यदि संकलन के दौरान क्वांटीकरण निर्दिष्ट किया जाता है, तो भार FP16 या INT8 में सहेजे जाते हैं, जिससे फ़ाइल का आकार कम हो जाता है और इन प्रारूपों के हार्डवेयर समर्थन वाले Apple A17 और M4 चिप्स पर इनफ़रेंस तेज़ हो जाता है।
Apple एप्लिकेशन में mlmodelc शामिल करने के तीन तरीकों का समर्थन करता है। पहला है बंडल में स्थिर समावेशन: mlmodelc फ़ाइल Xcode प्रोजेक्ट में जोड़ी जाती है और बिल्ड पर .app में शामिल हो जाती है। यह दृष्टिकोण 100 MB तक के छोटे मॉडल के लिए इष्टतम है और पहले लॉन्च के लिए नेटवर्क एक्सेस की आवश्यकता नहीं होती है।
दूसरा तरीका है MLModel.compile(at:) के माध्यम से नेटवर्क से डाउनलोड और डिवाइस पर संकलन। डेवलपर .mlmodel डाउनलोड करता है, इसे एक अस्थायी निर्देशिका में रखता है और Core ML कंपाइलर को कॉल करता है। परिणाम एक mlmodelc है जिसे बाद के लॉन्च के लिए कैश किया जा सकता है। Core ML के लिए Apple HIG के अनुसार, यह दृष्टिकोण 100 MB से बड़े मॉडल और नया एप्लिकेशन संस्करण प्रकाशित किए बिना गतिशील अपडेट के लिए अनुशंसित है।
तीसरा तरीका आवश्यकता पर डाउनलोड किए जाने वाले मॉडल के लिए On-Demand Resources है। Apple ODR mlmodelc को क्लाउड में संग्रहीत करने और आवश्यकता होने पर ही डाउनलोड करने की अनुमति देता है। यह दर्जनों मॉडल वाले एप्लिकेशन के लिए एक लोकप्रिय परिदृश्य है जहाँ उपयोगकर्ता केवल कुछ का उपयोग करता है।
नेटवर्क से मॉडल डाउनलोड करते समय, संकलन समय को ध्यान में रखना महत्वपूर्ण है। MLModel.compile(at:) समकालिक रूप से निष्पादित होता है और A12 और पुराने उपकरणों पर मध्यम आकार के मॉडल के लिए 5–10 सेकंड तक UI को ब्लॉक कर सकता है। पृष्ठभूमि थ्रेड में संकलन करने और लोडिंग इंडिकेटर के माध्यम से उपयोगकर्ता को प्रगति के बारे में सूचित करने की अनुशंसा की जाती है।
mlmodelc का मुख्य लाभ मॉडल लोडिंग गति है। Apple Performance Benchmarks (2024) के अनुसार, 100 MB का ResNet-50 मॉडल .mlmodel की तुलना में mlmodelc प्रारूप में 58% तेज़ी से लोड होता है। यह विशेष रूप से उन एप्लिकेशन के लिए महत्वपूर्ण है जो क्रमिक रूप से कई मॉडलों के साथ काम करते हैं।
दूसरा लाभ पीक मेमोरी खपत में कमी है। .mlmodel लोड करते समय, Core ML Runtime protobuf पार्स करने के लिए एक बफ़र और ग्राफ़ संकलन के लिए दूसरा बफ़र आवंटित करता है। mlmodelc सीधे शुरू होता है, इन चरणों को छोड़ते हुए। कंप्यूटर विज़न मॉडल के लिए पीक मेमोरी खपत 30–45% कम हो जाती है।
तीसरा है हार्डवेयर अनुकूलन। coremlc कंपाइलर बिल्ड समय पर लक्ष्य डिवाइस का विश्लेषण करता है और ANE, GPU और CPU के बीच संचालन का इष्टतम विभाजन चुनता है। यदि बिल्ड सार्वभौमिक है, तो संकलन पहले लॉन्च पर डिवाइस पर स्थानांतरित किया जाता है, और परिणाम बाद के सत्रों के लिए कैश किया जाता है।
एप्लिकेशन बंडल से संकलित मॉडल लोड करने का उदाहरण। बस मॉडल का URL निर्दिष्ट करें और MLModel.load(contentsOf:) कॉल करें। Core ML Runtime स्वचालित रूप से एक्सटेंशन द्वारा mlmodelc प्रारूप का पता लगाएगा और प्रारंभिक करेगा।
import CoreML
guard let modelURL = Bundle.main.url(
forResource: "MyModel",
withExtension: "mlmodelc"
) else { return }
let model = try await MLModel.load(contentsOf: modelURL)
let prediction = try await model.prediction(from: input)
बाद में कैशिंग के साथ डिवाइस पर .mlmodel संकलन का उदाहरण। mlmodelc का अस्थायी पथ प्राप्त करने के लिए MLModel.compile(at:) का उपयोग करें, फिर इसे कैश निर्देशिका में कॉपी करें।
let sourceURL = FileManager.default.temporaryDirectory
.appendingPathComponent("MyModel.mlmodel")
let compiledURL = try await MLModel.compile(at: sourceURL)
let cacheURL = FileManager.default.urls(
for: .cachesDirectory, in: .userDomainMask
)[0].appendingPathComponent("MyModel.mlmodelc")
try FileManager.default.copyItem(at: compiledURL, to: cacheURL)
अक्सर पूछे जाने वाले प्रश्न
हाँ, mlmodelc iOS सिम्युलेटर पर काम करता है, लेकिन ANE त्वरण के बिना, क्योंकि Neural Engine एक हार्डवेयर घटक है जो Mac पर अनुपस्थित है। इनफ़रेंस Accelerate फ्रेमवर्क के माध्यम से CPU पर किया जाता है।
mlmodelc निष्पादन के लिए एक संकलित प्रारूप है। .mlpackage Xcode 15+ के लिए एक कंटेनर है जो मूल मॉडल और कई कॉन्फ़िगरेशन को जोड़ता है। .mlpackage एप्लिकेशन बनाते समय mlmodelc में संकलित होता है।
फ़ाइल एक्सटेंशन जाँचें: .mlmodelc। यदि मॉडल का एक्सटेंशन .mlmodel है, तो यह संकलित नहीं है। Xcode में बिल्ड करने के बाद, तैयार mlmodelc एप्लिकेशन के DerivedData फ़ोल्डर में स्थित होता है।
नहीं, रिवर्स डीकंपाइलेशन मौजूद नहीं है। mlmodelc Apple का बाइनरी मालिकाना प्रारूप है। मूल .mlmodel संस्करण नियंत्रण में अलग से संग्रहीत किया जाता है।
हाँ, mlmodelc Core ML Tools के माध्यम से INT8 क्वांटीकरण का समर्थन करता है। संकलन के दौरान, भार FP32 से INT8 में परिवर्तित हो जाते हैं, जिससे आकार चार गुना कम हो जाता है और ANE पर 2x तक की गति मिलती है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें