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 (প্রতি মানে ৪ বাইট) আকারে সংরক্ষিত থাকে।
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 মূল ফরম্যাট নির্বিশেষে মডেলের সাথে একীভাবে কাজ করে। তবে, Xcode .mlmodel যোগ করার সময় .mlpackage ব্যবহারের সুপারিশসহ একটি সতর্কতা জারি করে।
রূপান্তরের পরে, মডেলটি নির্ভুলতা বজায় রেখেছে কিনা তা নিশ্চিত করা প্রয়োজন। 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 সমর্থন সম্পূর্ণরূপে অপসারণের তারিখ আনুষ্ঠানিকভাবে ঘোষণা করেনি, তবে ঐতিহাসিক প্রেক্ষাপট ৩-৪ বছরের একটি পরিবর্তনকাল নির্দেশ করে। .mlmodel ফরম্যাট ২০১৭ সালে প্রবর্তিত হয়েছিল, .mlpackage ২০২১ সালে। Xcode 13 (2021)-এ অবচিতকরণ সতর্কতা দেখা দিয়েছিল। ৩২-বিট অ্যাপ্লিকেশনের (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 অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন