تحويل نماذج Core ML: ما هو، مراحل وطرق التحويل

المؤلف: IT Sectr نُشر: 2026-07-17 وقت القراءة: 6 دق

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 — تحويل نماذج ML إلى تنسيق .mlmodel للتنفيذ على أجهزة Apple.
  • الأداة الرئيسية هي coremltools، مكتبة Python مفتوحة المصدر من Apple.
  • يدعم PyTorch وTensorFlow وKeras وONNX وscikit-learn.
  • تتضمن العملية تتبع الرسم البياني واستبدال العمليات والتحقق من الدقة.
  • بعد التحويل، يمكن كمية النموذج إلى FP16 أو INT8 للتسريع.

ما هو Core ML Model Conversion

Core ML Model Conversion هو عملية تحويل نموذج تعلم آلي مدرب من تنسيق إطار المصدر إلى تنسيق .mlmodel الذي يفهمه Core ML Runtime على أجهزة Apple. بدون تحويل، لا يمكن تحميل نموذج مدرب في PyTorch أو TensorFlow وتنفيذه على iOS أو macOS مباشرة.

تتضمن عملية التحويل ترجمة الرسم البياني للحساب: يتم تعيين كل عامل من إطار المصدر (Conv2D، BatchNorm، ReLU) إلى عامل Core ML المقابل. إذا لم يوجد بديل مباشر، يستخدم coremltools عمليات مركبة أو طبقات مخصصة. وفقًا لأبحاث Apple ML، تغطي المكتبة أكثر من 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.

مصفوفة توافق الأطر

الإطارتنسيق الإدخالAPI coremltools
PyTorchTorchScript، torch.exportCTConverter / convert()
TensorFlow 2.xSavedModel، Keras H5convert()
TensorFlow 1.xFrozen .pbconvert()
ONNX.onnxonnx_to_coreml()
scikit-learn.pkl / Pipelineconverters.sklearn.convert()
Keras.h5 / .kerasconvert()

أدوات التحويل: coremltools

coremltools هي مكتبة Python الرسمية مفتوحة المصدر من Apple، متاحة عبر pip install coremltools. توفر المكتبة واجهة برمجة تطبيقات موحدة للتحويل من جميع الأطر المدعومة، بالإضافة إلى أدوات المعالجة اللاحقة: الكمية والتحقق من الدقة وتصور الرسم البياني.

التثبيت والتحويل الأساسي للنموذج من PyTorch:

python
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:

python
import coremltools as ct

mlmodel = ct.convert(
    "saved_model_dir",
    source="tensorflow",
    @minimum_deployment_target=ct.target.iOS16
)
mlmodel.save("MyTFModel.mlmodel")

مراحل تحويل النموذج

تتكون عملية التحويل من أربع مراحل. في المرحلة الأولى، يقوم coremltools بتحميل النموذج المصدر وإجراء التتبع (tracing) أو مسح الرسم البياني. بالنسبة لـ 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 بدون معايرة أو تخطَّ الكمية تمامًا.

أمثلة تحويل من PyTorch وTensorFlow

مثال على تحويل نموذج MobileNetV3 من PyTorch مع تحديد نوع الإدخال والحد الأدنى لإصدار iOS. استخدم ct.ImageType للتوحيد التلقائي للصور:

python
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
)

# الحفظ في .mlmodel للتجميع اللاحق في Xcode
mlmodel.save("MobileNetV3.mlmodel")

مثال على التحويل من TensorFlow Keras مع كمية FP16. حدد minimum_deployment_target لتمكين دعم FP16 على الأجهزة المزودة بـ Apple A13 والأحدث:

python
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
)

# كمية الأوزان إلى FP16 لتقليص الحجم 2 مرات
mlmodel_fp16 = ct.models.neural_network.quantization_utils.quantize_weights(
    mlmodel, 16
)
mlmodel_fp16.save("EfficientNetB0_fp16.mlmodel")

الأسئلة الشائعة

هل يمكنني تحويل نموذج دون الوصول إلى الكود المصدري؟

نعم، إذا كان النموذج محفوظًا بتنسيق TorchScript أو SavedModel أو ONNX. يقوم coremltools بتحميل هذه التنسيقات دون الحاجة إلى الكود المصدري ويؤدي التحويل بناءً على الرسم البياني للحساب.

كيف أعرف أي العمليات غير مدعومة في Core ML؟

يخرج coremltools قائمة العمليات غير المدعومة في السجل أثناء التحويل. استخدم ct.utils.get_coreml_operations() للحصول على القائمة الكاملة لعوامل Core ML المتاحة.

ما هي لوحة الكمية في coremltools؟

لوحة الكمية هي مجموعة من المعلمات لضغط أوزان النموذج: fp16 أو int8 أو التلوين. يدعم coremltools لوحة 8 بت و16 بت وكمية LUT بأعماق بت مختلفة.

هل هناك حاجة إلى التجميع بعد التحويل؟

نعم، يجب تجميع .mlmodel إلى mlmodelc قبل التنفيذ على الجهاز. يتم التجميع تلقائيًا في Xcode أثناء البناء أو على الجهاز عبر MLModel.compile(at:).

كيف أتحقق من دقة النموذج المحول؟

استخدم ct.models.CompiledModel لمقارنة مخرجات النموذج الأصلي والمحول. قدم نفس بيانات الإدخال وقارن النتائج باستخدام مقاييس MSE أو cosine similarity.

الملخص

  • Core ML Model Conversion هو عملية تحويل نماذج ML إلى تنسيق .mlmodel للتنفيذ على أجهزة Apple.
  • الأداة الرئيسية هي coremltools، التي تدعم PyTorch وTensorFlow وKeras وONNX وscikit-learn.
  • يتضمن التحويل تتبع الرسم البياني وتعيين العوامل والتحسين والتسلسل.
  • يتم استبدال العمليات غير المدعومة بمزيج مكافئ أو تنفيذها عبر API الطبقات المخصصة.
  • بعد التحويل، تتوفر كمية FP16 وINT8 لتقليل الحجم وتسريع الاستدلال.
  • قبل النشر، تحقق من دقة النموذج عبر ct.models.CompiledModel.
  • خطط لخط أنابيب التحويل كجزء من CI/CD للتحديثات التلقائية للنماذج في التطبيق.

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا