Core ML Model Conversion تربیت یافتہ مشین لرننگ موڈیلوں کو مقبول فریم ورکوں سے Core ML (.mlmodel) فارمیٹ میں تبدیل کرنے کا عملیہ ہے، جو Apple آلات پر عمل کرنے کے لئے بہترین بنایا گیا ہے۔ تبدیل ضروری ہے کیونکہ PyTorch، TensorFlow اور دیگر فریم ورک Core ML Runtime کے ساتھ مطابق نہ ہونے والے اپنے فارمیٹ استعمال کرتے ہیں۔ coremltools دستاویز، 2025 کے مطابق، لائبریری PyTorch، TensorFlow 1.x اور 2.x، Keras، ONNX، scikit-learn اور libsvm سے تبدیل کی حمایت کرتی ہے۔ coremltools خود بخود غیر تعاون یافتہ کاروائیوں کو مساوی کاروائیوں سے بدل دیتا ہے، موڈیل کی عددی درستی کو برقرار رکھتا ہوئے۔
اهم نکات
Core ML Model Conversion ایک تربیت یافتہ مشین لرننگ موڈیل کو مبادی فریم ورک فارمیٹ سے .mlmodel فارمیٹ میں تبدیل کرنے کا عملیہ ہے جسے Apple آلات پر Core ML Runtime سمجھتا ہے۔ تبدیل کے بغیر، PyTorch یا TensorFlow میں تربیت یافتہ موڈیل براہ راست iOS یا macOS پر لوڈ اور عمل نہیں کیا جا سکتا۔
تبدیل کے عملیہ میں حساب گراف کا ترجمہ شامل ہے: مبادی فریم ورک کا ہر آپریٹر (Conv2D، BatchNorm، ReLU) متبادل Core ML آپریٹر سے منسوب کیا جاتا ہے۔ اگر کوئی براہ راست متبادل موجود نہیں ہے، coremltools مرکب کاروائیوں یا کسٹم پرتیں استعمال کرتا ہے۔ Apple ML Research کے مطابق، لائبریری مختلف فریم ورکوں کے 200 سے زائد آپریٹرز کو کیر کرتی ہے۔
تبدیل کے بعد، موڈیل .mlmodel بنڈل فارمیٹ میں محفوظ ہوتا ہے، جس میں protobuf گراف تفصیل، بائینری شکل میں وزن اور میٹا ڈیٹا شامل ہے۔ یہ فائل پھر ہدف آلہ پر عمل کے لئے mlmodelc میں مرتب کی جاتی ہے۔
coremltools ورشن 7.x چہ مذابع سے تبدیل کی حمایت کرتا ہے۔ PyTorch — torch.jit.trace یا torch.export کے ذریعے، TensorFlow 2.x — SavedModel اور Keras H5 کے ذریعے، TensorFlow 1.x — منجمد گراف .pb کے ذریعے۔ ONNX کے لئے، ایک درمیانی نمائندگی استعمال کی جاتی ہے، جو پھر Core ML میں ترجمہ کی جاتی ہے۔
| فریم ورک | داخلی فارمیٹ | coremltools API |
|---|---|---|
| PyTorch | TorchScript، torch.export | CTConverter / convert() |
| TensorFlow 2.x | SavedModel، Keras H5 | convert() |
| TensorFlow 1.x | Frozen .pb | convert() |
| ONNX | .onnx | onnx_to_coreml() |
| scikit-learn | .pkl / Pipeline | converters.sklearn.convert() |
| Keras | .h5 / .keras | convert() |
coremltools Apple کی سرکاری آئی سورس Python لائبریری ہے، جو pip install coremltools کے ذریعے دستیاب ہے۔ لائبریری تمام تعاون یافتہ فریم ورکوں سے تبدیل کے لئے ایک متحد API اور بعد از پروسیسنگ کے آلات فراہم کرتی ہے: کمیابی، درستی کی جانچ اور گراف ویزوآلائزیشن۔
PyTorch سے تنصیب اور بنیادی موڈیل تبدیل:
import coremltools as ct
import torch
import torchvision
model = torchvision.models.resnet18(pretrained=True)
model.eval()
example_input = torch.rand(1, 3, 224, 224)
traced_model = torch.jit.trace(model, example_input)
mlmodel = ct.convert(
traced_model,
source="pytorch",
inputs=[ct.ImageType(shape=example_input.shape)]
)
mlmodel.save("ResNet18.mlmodel")
TensorFlow سے تبدیل کے لئے، SavedModel کو مخاذ کے طور پر استعمال کریں۔ coremltools signature_def کی بنیاد پر خود بخود داخلی اور خارجی ٹینسرز کا تعین کرتا ہے:
import coremltools as ct
mlmodel = ct.convert(
"saved_model_dir",
source="tensorflow",
@minimum_deployment_target=ct.target.iOS16
)
mlmodel.save("MyTFModel.mlmodel")
تبدیل کا عملیہ چار مراحل پر مشتمل ہے۔ پہلے مرحلے میں، coremltools مبادی موڈیل کو لوڈ کرتا ہے اور ٹریسنگ یا گراف سکیننگ کرتا ہے۔ PyTorch کے لئے، torch.jit.trace استعمال کیا جاتا ہے، جو موڈیل کے ذریعے ایک نمونہ داخل چلاتا ہے اور کاروائیوں کی ترتیب ریکارڈ کرتا ہے۔
دوسرے مرحلے میں، آپریٹر میپنگ کی جاتی ہے۔ مبادی گراف کا ہر آپریٹر ایک Core ML آپریٹر سے منسوب کیا جاتا ہے۔ اگر کوئی براہ راست متبادل موجود نہیں ہے، coremltools آپریٹر کو تعاون یافتہ آپریٹرز کے ایک سیکونس میں تقسیم کرتا ہے۔ coremltools دستاویز کے مطابق، معمولی آرکیٹکچرز کے لئے PyTorch آپریٹر کیریج 95% سے تجاوز کر جاتی ہے۔
تیسرا مرحلہ گراف بہترینکری ہے۔ coremltools کاروائی فیوژن (مثلاں، conv + batch norm)، غیر ضروری تبدیلوں کو ہٹانا اور کارکردگی بہتر کرنے کے لئے آپریٹرز کی دوبارہ ترتیب دےنے کا کام کرتا ہے۔ چوتھا مرحلہ وزن اور میٹا ڈیٹا کے تحفظ کے ساتھ .mlmodel فارمیٹ میں سیریالائزیشن ہے۔
تبدیل میں سب سے عام مسئلہ غیر تعاون یافتہ کاروائیوں ہے۔ اگر موڈیل میں ایک ایسا آپریٹر ہے جو Core ML میں موجود نہیں ہے، coremltools آپریشن کے نام کے ساتھ ایک غلطی کی رپورٹ کرتا ہے۔ حل آپریٹر کو تعاون یافتہ آپریٹرز کے ایک مساوی مرکب سے بدلنا یا کسٹم لیئر API کے ذریعے ایک کسٹم پرت لاگو کرنا ہے۔
دوسرا مسئلہ جہت کا بے میل ہے۔ PyTorch NCHW فارمیٹ استعمال کرتا ہے، جبکہ Core ML بحکم دفتری NHWC استعمال کرتا ہے۔ coremltools خود بخود ترانسپوزیشن داخل کرتا ہے، لیکن کبھی کبھار محوروں کا ترتیب غلط طور پر متعین ہوتا ہے۔ تبدیل لاگز میں داخلی اور خارجی جہات کی جانچ کریں اور اگر ضرورت ہو تو صحیح ناموں کے ساتھ input_features متعین کریں۔
تیسرا مسئلہ کمیابی کے بعد درستی کا نقصان ہے۔ FP16 یا INT8 پالیٹ کے ساتھ تبدیل کرتے وقت موڈیل کی درستی کم ہو سکتی ہے۔ coremltools ایک ہی داخلی ڈیٹا پر مبادی اور تبدیل شدہ موڈیل کے آؤٹ پوٹ کا موازنہ کرنے کے لئے ct.models.CompiledModel یوٹیلٹی فراہم کرتا ہے۔ اگر اختلاف 1% سے تجاوز کرتا ہے، تو کیلیبریشن کے بغیر FP16 پالیٹ کے ساتھ کمیابی استعمال کریں یا کمیابی کو مکمل طور پر چھوڑ دیں۔
داخلی قسم کی وضاحت اور کم سے کم iOS ورشن کے ساتھ PyTorch سے MobileNetV3 موڈیل کو تبدیل کرنے کی مثال۔ خود بخود تصویر کی نارمالائزیشن کے لئے ct.ImageType استعمال کریں:
import coremltools as ct
import torchvision
model = torchvision.models.mobilenet_v3_small(
pretrained=True
)
model.eval()
example = torch.rand(1, 3, 224, 224)
traced = torch.jit.trace(model, example)
mlmodel = ct.convert(
traced,
source="pytorch",
inputs=[ct.ImageType(
shape=example.shape,
scale=1.0/255.0,
bias=[0, 0, 0]
)],
@minimum_deployment_target=ct.target.iOS16
)
# مربندہ Xcode میں ترتیب کے لئے .mlmodel میں محفوظ کریں
mlmodel.save("MobileNetV3.mlmodel")
FP16 کمیابی کے ساتھ TensorFlow Keras سے تبدیل کی مثال۔ Apple A13 اور نئے آلات پر FP16 حمایت کو چالو کرنے کے لئے minimum_deployment_target متعین کریں:
import coremltools as ct
from tensorflow import keras
keras_model = keras.applications.EfficientNetB0(
weights="imagenet"
)
mlmodel = ct.convert(
keras_model,
source="tensorflow",
@minimum_deployment_target=ct.target.iOS17
)
# حجم میں 2 گنا کمی کے لئے وزن کو FP16 میں کم کریں
mlmodel_fp16 = ct.models.neural_network.quantization_utils.quantize_weights(
mlmodel, 16
)
mlmodel_fp16.save("EfficientNetB0_fp16.mlmodel")
اکثر پوچے جانے والے سوالات
جی ہاں، اگر موڈیل TorchScript، SavedModel یا ONNX فارمیٹ میں محفوظ ہے۔ coremltools ان فارمیٹوں کو سورس کوڈ کی ضرورت کے بغیر لوڈ کرتا ہے اور حساب گراف کی بنیاد پر تبدیل کرتا ہے۔
coremltools تبدیل کے دوران لاگ میں غیر تعاون یافتہ کاروائیوں کی فہرست دیڤتا ہے۔ دستیاب Core ML آپریٹرز کی مکمل فہرست حاصل کرنے کے لئے ct.utils.get_coreml_operations() استعمال کریں۔
کمیابی پالیٹ موڈیل کے وزن کو سکڑانے کے لئے پیرامیٹرز کا ایک سیٹ ہے: fp16، int8 یا پالیٹائزیشن۔ coremltools 8-bit، 16-bit پالیٹ اور مختلف بٹ گھرائی کے ساتھ LUT کمیابی کی حمایت کرتا ہے۔
جی ہاں، آلہ پر عمل کرنے سے پہلے .mlmodel کو mlmodelc میں مرتب کیا جانا چاہی۔ ترتیب بائلڈ کے دوران Xcode میں یا MLModel.compile(at:) کے ذریعے آلہ پر خود بخود کی جاتی ہے۔
مبادی اور تبدیل شدہ موڈیل کے آؤٹ پوٹ کا موازنہ کرنے کے لئے ct.models.CompiledModel استعمال کریں۔ ایک ہی داخلی ڈیٹا فراہم کریں اور MSE یا کوسائن سمانت میٹرکس کا استعمال کرکے نتائج کا موازنہ کریں۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں