mlmodelc: ما هو، تنسيق النموذج المجمع والتجميع

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

mlmodelc هو إصدار مُجمّع من نموذج Core ML، محسّن للتنفيذ على أجهزة Apple التي تعمل بنظام iOS و macOS و iPadOS. على عكس التنسيق الأصلي .mlmodel، يمر ملف mlmodelc بمرحلة تجميع يتم خلالها تحويل النموذج إلى تمثيل داخلي يفهمه Core ML Runtime. وفقًا لـ وثائق مطوري Apple، 2025، يتم التجميع تلقائيًا عند بناء التطبيق في Xcode، وكذلك على الجهاز بعد تنزيل النموذج من الشبكة. mlmodelc يوفر تشغيلًا أسرع واستهلاكًا أقل للذاكرة مقارنة بالتنسيق القابل للتفسير.

النقاط الرئيسية

  • mlmodelc هو تنسيق نموذج Core ML مُجمّع للتنفيذ على أجهزة Apple.
  • يتم تجميع .mlmodel إلى mlmodelc بواسطة Xcode أثناء بناء التطبيق أو على الجهاز عبر MLModel.compile().
  • يتضمن التنسيق Model Description، رسم بياني حسابي ثنائي في MIL وملف weights.bin.
  • يوفر mlmodelc تسريع التشغيل بنسبة 30–60% بفضل التحسين المسبق للرسم البياني.
  • يدعم Apple Neural Engine و GPU و CPU عبر Core ML Runtime.

ما هو mlmodelc وكيف يختلف عن .mlmodel

mlmodelc هو تنسيق نموذج Core ML ثنائي مُجمّع، مصمم للتنفيذ المباشر على أجهزة Apple. التنسيق الأصلي .mlmodel هو حزمة تحتوي على وصف النموذج بتنسيق protobuf، والأوزان كمصفوفات وبيانات وصفية بتنسيق JSON. أثناء التجميع، يتم تحويل هذه البنية إلى تمثيل ثنائي مضغوط محسّن لمنصة الأجهزة المحددة.

الفرق الرئيسي لـ mlmodelc هو غياب مرحلة التفسير أثناء الاستدلال. Core ML Runtime لا يحلل مخطط protobuf ولا يبني الرسم البياني للحساب ديناميكيًا — يتم تنفيذ كل هذه الخطوات في وقت التجميع. وهذا يحقق تحسنًا في وقت التحميل الأول للنموذج بنسبة 30% إلى 60% اعتمادًا على تعقيد البنية.

وفقًا لجلسة WWDC 2023 «Core ML Tools وتحسين النماذج»، يتضمن التجميع تحسين عمليات الفاصلة العائمة، ودمج الطبقات المتتالية، والتحويل إلى تنسيق تفهمه Apple Neural Engine. لا يحتاج المطور إلى إدارة هذه العملية يدويًا — يقوم Xcode بالتجميع تلقائيًا في وقت البناء.

مقارنة mlmodelc و .mlmodel

الخاصية.mlmodelmlmodelc
تنسيق التخزينحزمة (protobuf + أوزان)ثنائي، خاص بالمنصة
الجاهزية للتنفيذيتطلب تجميعًاجاهز للاستدلال
الحجم على القرصالحجم الأصليأصغر بنسبة 10–20%
سرعة التشغيل الأولىأبطأ (تحليل + تجميع)تشغيل فوري
دعم ANEيتطلب تحسينًا إضافيًاتلقائي

كيف تعمل عملية تجميع mlmodelc

يمر تجميع النموذج إلى mlmodelc عبر ثلاث مراحل. في المرحلة الأولى، يقرأ Core ML Tools مواصفات protobuf لـ .mlmodel ويبني رسمًا بيانيًا حسابيًا داخليًا بتنسيق MIL (Model Intermediate Language). تتحقق الأداة من توافق كل عملية مع الجهاز المستهدف وتحدد الطبقات غير المدعومة للتنفيذ على CPU.

في المرحلة الثانية، يتم تنفيذ تحسين الرسم البياني: دمج الطبقات المتتالية (convolution + batch norm ← convolution مدمجة)، وإزالة العقد الميتة، وكمية الأوزان من FP32 إلى FP16 أو INT8. وفقًا لتقرير هندسة Apple «Core ML Optimization Pipeline» (2024)، يقلل دمج الطبقات من عدد عمليات الاستدلال بنسبة تصل إلى 40%.

المرحلة الثالثة هي توليد التمثيل الثنائي. يتم تسلسل الرسم البياني المُحسّن إلى تنسيق Core ML Runtime الخاص. يتم حفظ الأوزان بمحاذاة خطوط ذاكرة التخزين المؤقت لوحدة المعالجة المركزية، ويتم تخزين البيانات الوصفية في فهرس منفصل للوصول السريع. النتيجة هي مجلد بامتداد .mlmodelc، جاهز للتضمين في حزمة التطبيق.

الهندسة الداخلية لـ mlmodelc

يتضمن هيكل mlmodelc ثلاثة مكونات رئيسية. Model Description يحتوي على بيانات وصفية للنموذج: أنواع المدخلات والمخرجات، أبعادها، أسماء الموترات ومعلمات المعالجة المسبقة. يتم تخزين هذا القسم بتنسيق شبيه بـ JSON للتوافق مع API الخاص بـ Core ML.

Program هو التمثيل الثنائي للرسم البياني الحسابي بلغة MIL الداخلية. تستخدم Apple MIL كتمثيل وسيط مشابه لـ MLIR في TensorFlow أو ONNX. يتكون برنامج MIL من عمليات، كل منها لها نوع وموترات إدخال وإخراج وسمات. تنسيق MIL محسّن للتنفيذ الفعال على Apple Neural Engine.

المكون الثالث هو weights.bin — ملف يحتوي على جميع أوزان النموذج المدربة. يتم تخزين الأوزان بمحاذاة 64 بايت للتحميل الأمثل في ذاكرة التخزين المؤقت. إذا تم تحديد كمية الأوزان أثناء التجميع، يتم حفظ الأوزان بتنسيق FP16 أو INT8، مما يقلل حجم الملف ويسرع الاستدلال على رقائق Apple A17 و M4 ذات الدعم المادي لهذه التنسيقات.

طرق نشر mlmodelc في التطبيق

تدعم Apple ثلاث طرق لتضمين mlmodelc في التطبيق. الطريقة الأولى هي التضمين الثابت في الحزمة: يتم إضافة ملف mlmodelc إلى مشروع Xcode وينتهي به المطاف في .app عند البناء. هذا النهج مثالي للنماذج الصغيرة حتى 100 ميجابايت ولا يتطلب وصولاً إلى الشبكة للتشغيل الأول.

الطريقة الثانية هي التنزيل من الشبكة مع التجميع على الجهاز عبر MLModel.compile(at:). يقوم المطور بتنزيل .mlmodel، ويضعه في دليل مؤقت، ويستدعي مترجم Core ML. النتيجة هي mlmodelc يمكن تخزينه مؤقتًا للتشغيلات اللاحقة. وفقًا لـ إرشادات Apple HIG لـ Core ML، يُوصى بهذا النهج للنماذج التي يزيد حجمها عن 100 ميجابايت وللتحديثات الديناميكية دون نشر إصدار جديد من التطبيق.

الطريقة الثالثة هي الموارد عند الطلب (On-Demand Resources) للنماذج التي يتم تنزيلها حسب الحاجة. يتيح ODR من Apple تخزين mlmodelc في السحابة وتنزيله فقط عند الحاجة. هذا سيناريو شائع للتطبيقات التي تحتوي على عشرات النماذج حيث يستخدم المستخدم عددًا قليلاً منها فقط.

التجميع غير المتزامن على الجهاز

عند تنزيل نموذج من الشبكة، من المهم مراعاة وقت التجميع. يتم تنفيذ MLModel.compile(at:) بشكل متزامن وقد يحظر واجهة المستخدم على الأجهزة المزودة بـ A12 والإصدارات الأقدم لمدة تصل إلى 5–10 ثوانٍ للنماذج متوسطة الحجم. يُوصى بإجراء التجميع في خلفية الخيط وإخطار المستخدم بالتقدم عبر مؤشر التحميل.

مزايا أداء mlmodelc

الفائدة الرئيسية لـ mlmodelc هي سرعة تحميل النموذج. وفقًا لمعايير أداء Apple (2024)، يتم تحميل نموذج ResNet-50 بحجم 100 ميجابايت أسرع بنسبة 58% بتنسيق mlmodelc مقارنة بـ .mlmodel. هذا مهم بشكل خاص للتطبيقات التي تعمل مع نماذج متعددة بشكل تسلسلي.

الميزة الثانية هي تقليل استهلاك الذروة للذاكرة. عند تحميل .mlmodel، يخصص Core ML Runtime مخزنًا مؤقتًا لتحليل protobuf ومخزنًا مؤقتًا ثانيًا لتجميع الرسم البياني. يبدأ mlmodelc مباشرة، متجاوزًا هذه المراحل. ينخفض استهلاك الذروة للذاكرة بنسبة 30–45% لنماذج رؤية الكمبيوتر.

الميزة الثالثة هي تحسين الأجهزة. يحلل المترجم coremlc الجهاز المستهدف في وقت البناء ويختار التقسيم الأمثل للعمليات بين ANE و GPU و CPU. إذا كان البناء عالميًا، يتم تأجيل التجميع إلى الجهاز عند التشغيل الأول، ويتم تخزين النتيجة مؤقتًا للجلسات اللاحقة.

أمثلة برمجية للعمل مع mlmodelc في Swift

مثال لتحميل نموذج مُجمّع من حزمة التطبيق. ببساطة حدد URL للنموذج واستدعي MLModel.load(contentsOf:). سيكتشف Core ML Runtime تلقائيًا تنسيق mlmodelc من الامتداد ويقوم بالتهيئة.

swift
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 على الجهاز مع التخزين المؤقت اللاحق. استخدم MLModel.compile(at:) للحصول على المسار المؤقت لـ mlmodelc، ثم انسخه إلى دليل التخزين المؤقت.

swift
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؟

نعم، يعمل mlmodelc على محاكي iOS، ولكن بدون تسريع ANE، لأن Neural Engine هو مكون مادي غير موجود على Mac. يتم الاستدلال على CPU عبر إطار Accelerate.

كيف يختلف mlmodelc عن .mlpackage؟

mlmodelc هو تنسيق مُجمّع للتنفيذ. .mlpackage هو حاوية لـ Xcode 15+ تجمع النموذج الأصلي وتكوينات متعددة. يتم تجميع .mlpackage إلى mlmodelc عند بناء التطبيق.

كيف تتحقق من أن النموذج قد تم تجميعه بالفعل إلى mlmodelc؟

تحقق من امتداد الملف: .mlmodelc. إذا كان امتداد النموذج .mlmodel، فهو غير مُجمّع. بعد البناء في Xcode، يوجد mlmodelc الجاهز في مجلد DerivedData للتطبيق.

هل يمكن فك تجميع mlmodelc مرة أخرى إلى .mlmodel؟

لا، لا توجد عملية فك تجميع عكسية. mlmodelc هو تنسيق ثنائي خاص بـ Apple. يتم حفظ .mlmodel الأصلي بشكل منفصل في نظام التحكم في الإصدارات.

هل يدعم mlmodelc النماذج المكممة في INT8؟

نعم، يدعم mlmodelc تكميم INT8 عبر Core ML Tools. أثناء التجميع، يتم تحويل الأوزان من FP32 إلى INT8، مما يقلل الحجم أربع مرات ويسرع حتى 2x على ANE.

الخلاصة

  • mlmodelc هو تنسيق نموذج Core ML مُجمّع، محسّن للتنفيذ على أجهزة Apple.
  • يتضمن التجميع تحسين الرسم البياني، دمج الطبقات وكمية الأوزان للمنصة المستهدفة.
  • يوفر التنسيق تقليل وقت التحميل بنسبة 30–60% وتقليل استهلاك الذروة للذاكرة بنسبة 30–45%.
  • النشر ممكن عبر حزمة ثابتة، تنزيل من الشبكة مع تجميع أو موارد عند الطلب.
  • يدعم mlmodelc التنفيذ على Apple Neural Engine و GPU و CPU عبر Core ML Runtime.
  • للتحميل، استخدم MLModel.load(contentsOf:) في خلفية الخيط مع معالجة الأخطاء.
  • يتم مراقبة أداء النماذج عبر Instruments باستخدام قالب Core ML.

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

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

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

اقرأ أيضًا