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 APIs اصل فارمیٹ سے قطع نظر ماڈل کے ساتھ یکساں طور پر کام کرتی ہیں۔ تاہم، Xcode .mlpackage استعمال کرنے کی سفارش کے ساتھ .mlmodel شامل کرتے وقت ایک انتباہ جاری کرتا ہے۔
تبدیلی کے بعد، یہ یقینی بنانا ضروری ہے کہ ماڈل نے درستگی برقرار رکھی ہے۔ 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 ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں