mlmodelc Core ML ماڈل کا ایک کمپائلڈ ورژن ہے، جو iOS، macOS اور iPadOS چلانے والے Apple آلات پر عملدرآمد کے لیے بہتر بنایا گیا ہے۔ اصل .mlmodel فارمیٹ کے برعکس، mlmodelc فائل کمپائلیشن کے ایک مرحلے سے گزرتی ہے جس کے دوران ماڈل کو ایک داخلی نمائندگی میں تبدیل کیا جاتا ہے جسے Core ML Runtime سمجھتا ہے۔ Apple ڈویلپر دستاویزات، 2025 کے مطابق، کمپائلیشن Xcode میں ایپلیکیشن بناتے وقت خود بخود ہوتی ہے، نیز نیٹ ورک سے ماڈل ڈاؤن لوڈ کرنے کے بعد ڈیوائس پر بھی ہوتی ہے۔ mlmodelc قابل تشریح فارمیٹ کے مقابلے میں تیز تر اسٹارٹ اپ اور کم میموری کی کھپت کو یقینی بناتا ہے۔
اہم نکات
mlmodelc ایک کمپائلڈ بائنری Core ML ماڈل فارمیٹ ہے جو Apple آلات پر براہ راست عملدرآمد کے لیے ڈیزائن کیا گیا ہے۔ اصل .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 پر عملدرآمد کے لیے نشان زد کرتا ہے۔
دوسرے مرحلے میں، گراف آپٹیمائزیشن انجام دی جاتی ہے: متواتر پرتوں کا انضمام (کنولوشن + بیچ نارم → فیوزڈ کنولوشن)، مردہ نوڈس کا خاتمہ، اور FP32 سے FP16 یا INT8 میں وزن کی کوانٹائزیشن۔ Apple انجینئرنگ رپورٹ “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 سیکنڈ تک یوزر انٹرفیس کو روک سکتا ہے۔ پس منظر کے تھریڈ میں کمپائلیشن کرنے اور لوڈنگ انڈیکیٹر کے ذریعے صارف کو پیشرفت سے آگاہ کرنے کی سفارش کی جاتی ہے۔
mlmodelc کا بنیادی فائدہ ماڈل لوڈنگ کی رفتار ہے۔ Apple کارکردگی کے معیارات (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 ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں