mlmodel Apple के Core ML फ्रेमवर्क के लिए मशीन लर्निंग मॉडल का एक फ़ाइल प्रारूप है, जिसका उपयोग .mlpackage प्रारूप के आने से पहले प्रशिक्षित मॉडलों को संग्रहीत करने के लिए किया जाता था। .mlmodel फ़ाइल protobuf प्रारूप में एक बाइनरी पैकेज थी जिसमें मॉडल विवरण, न्यूरल नेटवर्क वेट, मेटाडेटा और इनपुट/आउटपुट के बारे में जानकारी होती थी। Apple Core ML Release Notes (2025) के अनुसार, Xcode 13 और Core ML 4 से शुरू होकर, पुराने .mlmodel प्रारूप को .mlpackage के पक्ष में हटा दिया गया है, जो बेहतर वर्जनिंग और मेटाडेटा पठनीयता प्रदान करता है।
मुख्य बिंदु
mlmodel एक बाइनरी फ़ाइल प्रारूप है जिसे Apple ने 2017 में WWDC 2017 में Core ML फ्रेमवर्क के साथ पेश किया था। यह प्रारूप Google की protobuf (Protocol Buffers) सीरियलाइज़ेशन तकनीक पर आधारित है, जो कॉम्पैक्ट आकार (Float32 में मॉडल वेट) और कुशल मेमोरी लोडिंग सुनिश्चित करता था। .mlmodel फ़ाइल का एक्सटेंशन .mlmodel और MIME प्रकार application/x-Apple-mlmodel था।
.mlmodel प्रारूप 2017 से 2021 तक एकमात्र Core ML प्रारूप था। इस समय के दौरान, TensorFlow, Keras, PyTorch, Caffe, scikit-learn और अन्य लाइब्रेरीज़ से लाखों मॉडल coremltools के माध्यम से परिवर्तित किए गए। मॉडलों की जटिलता बढ़ने के साथ प्रारूप की सीमाएँ स्पष्ट हो गईं: protobuf सुविधाजनक वर्जनिंग का समर्थन नहीं करता, मेटाडेटा बाइनरी रूप में संग्रहीत होता है (git diff में अपठनीय), और नए फ़ील्ड जोड़ने के लिए protobuf स्कीमा में बदलाव की आवश्यकता होती थी।
mlmodel फ़ाइल मॉडल को एक कॉम्पैक्ट बाइनरी प्रतिनिधित्व में संग्रहीत करती है। आकार दसियों किलोबाइट (लीनियर रिग्रेशन) से लेकर गीगाबाइट्स (लाखों पैरामीटर वाले न्यूरल नेटवर्क) तक होता है। प्रारूप सभी Core ML मॉडल प्रकारों का समर्थन करता है: न्यूरल नेटवर्क (NeuralNetwork, NeuralNetworkClassifier, NeuralNetworkRegressor), एन्सेम्बल मॉडल (TreeEnsemble, GradientBoosting), रिग्रेशन (LinearRegression, SVM) और प्री/पोस्ट-प्रोसेसिंग पाइपलाइन (OneHotEncoder, FeatureVectorizer)।
| विशेषता | mlmodel |
|---|---|
| प्रारूप | बाइनरी (protobuf) |
| पठनीयता | अपठनीय (केवल coremltools के माध्यम से) |
| वर्जनिंग | नहीं (एकल बाइनरी फ़ाइल) |
| मेटाडेटा | protobuf स्कीमा में |
| Git-अनुकूल | नहीं (बाइनरी diff अप्रभावी) |
.mlmodel फ़ाइल की आंतरिक संरचना CoreML.framework फ्रेमवर्क में वर्णित protobuf स्कीमा द्वारा परिभाषित की गई है। मुख्य अनुभाग हैं: modelDescription — इनपुट, आउटपुट और मॉडल मेटाडेटा का विवरण; modelParameters — मॉडल प्रकार के विशिष्ट पैरामीटर (न्यूरल नेटवर्क वेट, ट्री एन्सेम्बल, रिग्रेशन गुणांक); preprocessing — प्रीप्रोसेसिंग कॉन्फ़िगरेशन (स्केलिंग, इमेज नॉर्मलाइज़ेशन); postprocessing — पोस्ट-प्रोसेसिंग (softmax, argmax, थ्रेशोल्ड मान)।
modelDescription अनुभाग (MLModelDescription) में मॉडल का नाम, लेखक, संस्करण, विवरण, लाइसेंस, साथ ही सभी इनपुट और आउटपुट पैरामीटर का विस्तृत विवरण शामिल है: नाम, डेटा प्रकार (Float32, Int32, String, Image), आयाम, इमेज प्रारूप (BGR, RGB), वैकल्पिक बाधाएँ (मान सीमा)। इस अनुभाग का उपयोग Xcode द्वारा टाइप किए गए इनपुट और आउटपुट के साथ Swift मॉडल क्लास उत्पन्न करने के लिए किया जाता था।
modelParameters अनुभाग में प्रशिक्षित मॉडल के वास्तविक वेट और पैरामीटर होते हैं। न्यूरल नेटवर्क के लिए, यह परतों (NeuralNetworkLayer) की एक सरणी है, जिनमें से प्रत्येक में प्रकार (convolution, pooling, activation, innerProduct), वेट, बायस और पैरामीटर (kernelSize, stride, padding) होते हैं। एन्सेम्बल मॉडल के लिए — निर्णय वृक्ष और उनके नोड। रिग्रेशन के लिए — गुणांक और इंटरसेप्ट। वेट Float32 (4 बाइट प्रति मान) में संग्रहीत होते हैं।
preprocessing अनुभाग मॉडल में इनपुट डेटा देने से पहले प्रीप्रोसेसिंग चरणों का वर्णन करता है। Core ML समर्थन करता है: स्केलिंग (Scaler) — माध्य और मानक विचलन के माध्यम से सामान्यीकरण; इमेज ट्रांसफ़ॉर्मेशन (ImagePreprocessing) — आकार बदलना, क्रॉप करना, रंग चैनल सामान्यीकरण, BGR→RGB रूपांतरण; OneHotEncoder — श्रेणीबद्ध विशेषताओं का एन्कोडिंग; FeatureVectorizer — कई विशेषताओं को एक वेक्टर में संयोजित करना।
mlpackage Core ML मॉडल के लिए अगली पीढ़ी का प्रारूप है, जिसे WWDC 2021 में पेश किया गया था। एकल बाइनरी .mlmodel फ़ाइल के विपरीत, .mlpackage एक फ़ाइल संरचना वाली निर्देशिका (पैकेज) है: मॉडल सामग्री पठनीय JSON फ़ाइलों (मेटाडेटा, परत कॉन्फ़िगरेशन) और वेट के लिए अलग बाइनरी फ़ाइलों के रूप में संग्रहीत की जाती है। यह भंडारण, वर्जनिंग और ML मॉडल पर सहयोग के दृष्टिकोण को मौलिक रूप से बदलता है।
| पैरामीटर | mlmodel | mlpackage |
|---|---|---|
| प्रकार | एकल बाइनरी फ़ाइल | निर्देशिका (पैकेज) |
| मेटाडेटा | बाइनरी protobuf | JSON (पठनीय) |
| Git diff | बेकार | काम करता है (वेट को छोड़कर) |
| वर्जनिंग | मैन्युअल | JSON में स्वचालित |
| कस्टम परतें | नहीं | समर्थित |
| स्थिति | पुराना | वर्तमान |
.mlpackage पैकेज में शामिल है: ModelCI/ — संस्करणित मॉडल कॉन्फ़िगरेशन वाली निर्देशिका; Data/ — बाइनरी वेट फ़ाइलें (SharedWeights.bin); Metadata.json — नाम, लेखक, विवरण, मॉडल संस्करण, निर्माण तिथि; Model.json — आर्किटेक्चर विवरण, इनपुट/आउटपुट, परत प्रकार; Manifests/ — CI/CD के लिए संस्करण मैनिफ़ेस्ट। यह संरचना git में मॉडल के साथ कुशलतापूर्वक काम करने की अनुमति देती है: मेटाडेटा और कॉन्फ़िगरेशन ट्रैक किए जाते हैं, जबकि बाइनरी वेट Git LFS का उपयोग कर सकते हैं।
.mlmodel से .mlpackage में रूपांतरण दो तरीकों से किया जाता है: Xcode में बिल्ड के दौरान स्वचालित रूप से (Xcode स्वयं संकलन के दौरान .mlmodel को .mlpackage में बदलता है) या Python में coremltools के माध्यम से मैन्युअल रूप से। मैन्युअल रूपांतरण अधिक नियंत्रण देता है और मॉडल मेटाडेटा को अपडेट करने, विवरण जोड़ने और लेखक सेट करने की अनुमति देता है। रूपांतरण के बाद, मॉडल .mlpackage के रूप में सहेजा जाता है और मूल .mlmodel के बजाय उपयोग किया जा सकता है।
import coremltools as ct
model = ct.models.MLModel(
"OldModel.mlmodel"
)
model.author = "IT Sectr"
model.short_description = "Converted from mlmodel"
model.version = "2.0"
model.save("NewModel.mlpackage")
Xcode प्रोजेक्ट में .mlmodel फ़ाइल जोड़ने पर, सिस्टम स्वचालित रूप से इसके प्रारूप का पता लगाता है और बिल्ड के दौरान Model Compiler चलाता है — एक उपकरण जो .mlmodel को .mlpackage में ट्रांसलेट करता है। संकलित .mlpackage बिल्ड निर्देशिका (DerivedData) में रखा जाता है। डेवलपर इस प्रक्रिया पर ध्यान नहीं देता — सभी Core ML API मूल प्रारूप की परवाह किए बिना मॉडल के साथ समान रूप से काम करते हैं। हालांकि, .mlpackage का उपयोग करने की अनुशंसा के साथ .mlmodel जोड़ने पर Xcode एक चेतावनी जारी करता है।
रूपांतरण के बाद, यह सुनिश्चित करना आवश्यक है कि मॉडल ने सटीकता बनाए रखी है। coremltools समान इनपुट डेटा पर मूल और रूपांतरित मॉडल की भविष्यवाणियों की तुलना करने के लिए ct.utils.compare_models() उपयोगिता प्रदान करता है। Float32 के लिए स्वीकार्य विचलन 1e-5 से अधिक नहीं है। यदि विचलन इस सीमा से अधिक है, तो मॉडल में कस्टम परतें या संचालन हो सकते हैं जो नए प्रारूप में समर्थित नहीं हैं।
.mlmodel की पिछड़ी संगतता iOS और macOS के सभी वर्तमान संस्करणों पर सुनिश्चित की जाती है। Xcode 12 या नए के साथ संकलित एप्लिकेशन स्वचालित रूप से मॉडल का .mlpackage संस्करण प्राप्त करता है, भले ही मूल फ़ाइल .mlmodel हो। हालांकि, Xcode 15 (2023) से शुरू करके, Apple ने घोषणा की कि नए मॉडल प्रकार (डायनामिक न्यूरल नेटवर्क, नियंत्रित शिक्षण) केवल .mlpackage प्रारूप में उपलब्ध होंगे, और .mlmodel को नई क्षमताएँ प्राप्त नहीं होंगी।
iOS 18 और macOS 15 (Sequoia) से शुरू करके, Core ML अब .mlmodel को सीधे लोड करने का समर्थन नहीं करता है। सभी .mlmodel मॉडल को पहले से .mlpackage में परिवर्तित किया जाना चाहिए, या बिल्ड के दौरान रूपांतरण के लिए Xcode Model Compiler का उपयोग किया जाएगा। सिस्टम API MLModel(contentsOf:) केवल .mlmodel फ़ाइलों को खोल सकता है यदि उन्हें प्रोजेक्ट बिल्ड चरण में .mlpackage में परिवर्तित किया गया हो।
Apple ने .mlmodel समर्थन को पूरी तरह से हटाने की तारीख की आधिकारिक घोषणा नहीं की है, लेकिन ऐतिहासिक संदर्भ 3-4 वर्ष की संक्रमण अवधि का संकेत देता है। .mlmodel प्रारूप 2017 में पेश किया गया था, .mlpackage 2021 में। Xcode 13 (2021) में चेतावनियाँ दिखाई दीं। 32-बिट अनुप्रयोगों (iOS 11 ने समर्थन बंद कर दिया) के अनुरूप, .mlmodel का पूर्ण समर्थन iOS 20-21 (2026-2027) में बंद हो सकता है।
प्रारूप के पुराना होने के बावजूद, .mlmodel अभी भी मौजूदा परियोजनाओं और कुछ परिदृश्यों में पाया जाता है। Core ML के साथ काम करने वाले डेवलपर्स को यह समझने की आवश्यकता है कि .mlmodel कब वर्कफ़्लो का हिस्सा बना रहता है और प्रदर्शन खोए बिना इसके साथ सही तरीके से कैसे इंटरैक्ट करें।
2021 से पहले शुरू की गई मौजूदा परियोजनाओं में Swift Package Manager या सीधे Xcode के माध्यम से लोड किए गए दर्जनों .mlmodel मॉडल हो सकते हैं। सभी मॉडलों को .mlpackage में माइग्रेट करना श्रम-गहन हो सकता है, खासकर यदि मॉडल coremltools (5.0 से पहले) के पुराने संस्करण द्वारा उत्पन्न किए गए हों। Apple निकटतम कार्यक्षमता अपडेट के दौरान एक बार में एक मॉडल, क्रमिक माइग्रेशन की अनुशंसा करता है।
कुछ मौजूदा CI/CD पाइपलाइनें स्वचालित मॉडल रूपांतरण के लिए coremltools संस्करण 4.x का उपयोग करती हैं, जो डिफ़ॉल्ट रूप से .mlmodel में निर्यात करता है। coremltools को संस्करण 5+ में अपडेट करने से निर्यात प्रारूप .mlpackage में बदल जाता है, जिसके लिए स्क्रिप्ट और परीक्षणों को अपडेट करने की आवश्यकता हो सकती है। ऐसे मामलों में, टीमें कभी-कभी बाद की तारीख में माइग्रेशन की योजना बनाते हुए, अस्थायी रूप से .mlmodel में निर्यात रखती हैं।
2021 से पहले प्रकाशित तृतीय-पक्ष लाइब्रेरीज़ और CocoaPods में .mlmodel प्रारूप में मॉडल हो सकते हैं। उदाहरण के लिए, चेहरा पहचान, इमेज फ़िल्टरिंग या AR फ़िल्टर के लिए लाइब्रेरीज़। ऐसी लाइब्रेरीज़ का उपयोग करने वाले डेवलपर .mlmodel के साथ काम करना जारी रख सकते हैं क्योंकि Xcode बिल्ड के दौरान उन्हें स्वचालित रूप से परिवर्तित करता है। हालांकि, यह जांचने की अनुशंसा की जाती है कि क्या लेखक ने .mlpackage के साथ अपडेट जारी किया है।
पुराने .mlmodel प्रारूप के साथ काम करते समय, डेवलपर्स कई सामान्य मुद्दों का सामना करते हैं। इन समस्याओं और उनके समाधानों को जानने से आधुनिक परियोजनाओं में Core ML मॉडल को एकीकृत करते समय समय बर्बाद होने से बचने में मदद मिलती है। आइए मुख्य मुद्दों पर नज़र डालें।
Xcode 13+ में .mlmodel जोड़ने पर एक चेतावनी दिखाई देती है: “‘mlmodel’ format is deprecated. Use ‘mlpackage’ instead.” चेतावनी बिल्ड को अवरुद्ध नहीं करती है लेकिन माइग्रेशन की आवश्यकता को इंगित करती है। चेतावनी को हल करने के लिए, coremltools के माध्यम से मॉडल को बदलें या मॉडल निर्माण उपकरण को अपडेट करें।
coremltools (3.0 से पहले) के पुराने संस्करण के साथ बनाई गई .mlmodel फ़ाइल protobuf कोडेक्स में बदलाव के कारण iOS 16+ वाले नए उपकरणों पर नहीं खुल सकती है। समाधान Python के माध्यम से मॉडल लोड करना है: model = ct.models.MLModel(“old.mlmodel”), फिर इसे फिर से सहेजें: model.save(“fixed.mlmodel”), या बेहतर होगा कि इसे सीधे .mlpackage में बदलें।
कस्टम परतों (उपयोगकर्ता-परिभाषित न्यूरल नेटवर्क परतें) वाले .mlmodel मॉडल अतिरिक्त चरणों के बिना सीधे .mlpackage में परिवर्तित नहीं किए जा सकते। पहले मॉडल को coremltools में लोड करना होगा, जांचना होगा कि कौन सी परतें नए प्रारूप में समर्थित नहीं हैं, और उन्हें .mlpackage के लिए कार्यान्वित करना होगा। यदि कस्टम परत महत्वपूर्ण नहीं है, तो आप इसे मॉडल से हटाने का प्रयास कर सकते हैं।
अक्सर पूछे जाने वाले प्रश्न
mlmodel Core ML मॉडल को संग्रहीत करने का एक पुराना बाइनरी फ़ाइल प्रारूप है, जिसका उपयोग 2017 से 2021 तक किया गया था। यह protobuf सीरियलाइज़ेशन पर आधारित है, जिसमें .mlmodel एक्सटेंशन वाली एकल बाइनरी फ़ाइल में मॉडल वेट, मेटाडेटा और इनपुट/आउटपुट डेटा विवरण होते हैं।
mlmodel एक एकल बाइनरी फ़ाइल है, जो git में अपठनीय है और वर्जनिंग समर्थन का अभाव है। mlpackage JSON मेटाडेटा वाली एक निर्देशिका (पैकेज) है, जो git में पठनीय है और वर्जनिंग का समर्थन करती है। mlpackage कस्टम परतों का भी समर्थन करता है और स्वचालित रूप से संस्करण मैनिफ़ेस्ट उत्पन्न करता है। Apple सभी नई परियोजनाओं के लिए mlpackage की अनुशंसा करता है।
आप .mlmodel फ़ाइल को तीन तरीकों से खोल सकते हैं: Xcode के माध्यम से (प्रोजेक्ट में जोड़ें — मॉडल मेटाडेटा के साथ संपादक में प्रदर्शित होता है), Python में coremltools के माध्यम से (model = ct.models.MLModel(“model.mlmodel”)), या Netron का उपयोग करके — एक मुफ्त मॉडल विज़ुअलाइज़र जो Core ML, ONNX, TensorFlow और अन्य प्रारूपों का समर्थन करता है।
यह अनुशंसित है लेकिन तुरंत अनिवार्य नहीं है। Xcode प्रोजेक्ट बिल्ड के दौरान स्वचालित रूप से .mlmodel को .mlpackage में बदल देता है। हालांकि, Xcode की पुराना होने की चेतावनी दिखाई देगी, और नई Core ML सुविधाएँ (डायनामिक नेटवर्क, iOS 18+) .mlmodel के लिए उपलब्ध नहीं होंगी। निकटतम कार्यक्षमता अपडेट के दौरान मॉडल बदलें।
iOS 18+ पिछड़ी संगतता मोड में केवल .mlmodel का समर्थन करता है: यदि मॉडल Xcode प्रोजेक्ट में .mlmodel के रूप में जोड़ा गया है, तो Xcode बिल्ड के दौरान इसे स्वचालित रूप से .mlpackage में बदल देता है। iOS 18+ उपकरणों पर MLModel(contentsOf:) के माध्यम से .mlmodel की सीधी लोडिंग की गारंटी नहीं है — Apple मॉडल को .mlpackage में संग्रहीत करने की अनुशंसा करता है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें