mlmodelc: این چیست، فرمت مدل کامپایل‌شده و کامپایل

نویسنده: IT Sectr منتشر شده: 2026-07-17 زمان مطالعه: 7 دقیقه

mlmodelc — نسخه کامپایل‌شده مدل Core ML است که برای اجرا در دستگاه‌های Apple با سیستم‌های iOS، macOS و iPadOS بهینه‌سازی شده است. بر خلاف فرمت اصلی .mlmodel، فایل mlmodelc مرحله کامپایل را طی می‌کند که در آن مدل به نمایش داخلی قابل فهم برای Core ML Runtime تبدیل می‌شود. به استناد به Apple Developer Documentation, 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 → fused convolution)، حذف گره‌های مرده، کوانتیزاسیون وزن‌ها از FP32 به FP16 یا INT8. به استناد به Apple Engineering Report «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 MB بهینه است و برای اولین راه‌اندازی نیازی به دسترسی شبکه ندارد.

روش دوم — دانلود از شبکه با کامپایل روی دستگاه از طریق MLModel.compile(at:). توسعه‌دهنده .mlmodel را دانلود می‌کند، آن را در یک دیرکتوری موقت قرار می‌دهد و کامپایلر Core ML را فراخوان می‌کند. نتیجه — mlmodelcی است که می‌توان آن را برای اجراهای بعدی ذخیره کرد. به استناد به Apple HIG برای Core ML، این رویکرد برای مدل‌های بالای 100 MB و بروزرسانی پویا بدون منتشر کردن نسخه جدید برنامه توصیه می‌شود.

روش سوم — On-Demand Resources برای مدل‌هایی که بر اساس درخواست بارگیری می‌شوند. Apple ODR امکان ذخیره mlmodelc در ابر و بارگیری تنها در صورت نیاز را فراهم می‌کند. این یک سناریو محبوب برای برنامه‌هایی با دهها مدل است که کاربر تنها از چند تایی استفاده می‌کند.

کامپایل ناهمزمان روی دستگاه

هنگام دانلود مدل از شبکه، در نظر گرفتن زمان کامپایل مهم است. MLModel.compile(at:) به صورت همزمان اجرا می‌شود و می‌تواند رابط کاربر را در دستگاه‌های A12 و بالاتر تا 5–10 ثانیه برای مدل‌های اندازه متوسط مسدود کند. توصیه می‌شود کامپایل را در پش‌زمینه انجام دهید و از طریق نماینده بارگیری کاربر را در جریان قرار دهید.

مزایای کارایی mlmodelc

مزیت اصلی mlmodelc سرعت بارگیری مدل است. به استناد به Apple Performance Benchmarks (2024)، مدل ResNet-50 با اندازه 100 MB در فرمات mlmodelc در مقایسه با .mlmodel 58% سریع‌تر بارگیری می‌شود. این به ویژه برای برنامه‌هایی که با چندین مدل به صورت پیاپی کار می‌کنند مهم است.

مزیت دوم — کاهش مصرف حافظه اوج. هنگام بارگیری .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 وجود ندارد. استنتاج از طریق Accelerate framework در CPU انجام می‌شود.

تفاوت mlmodelc با .mlpackage چیست؟

mlmodelc — فرمات کامپایل‌شده برای اجراست. .mlpackage — کانتینری برای Xcode 15+ است که مدل اصلی و چند تنظیمات را ترکیب می‌کند. .mlpackage در طول ساخت برنامه به mlmodelc کامپایل می‌شود.

چگونه تشخیص دهیم که مدل به mlmodelc کامپایل شده است؟

پسوند فایل را بررسی کنید: .mlmodelc. اگر مدل پسوند .mlmodel داشته باشد، کامپایل نشده است. پس از ساخت در Xcode، mlmodelc حاضر در پوشه DerivedData برنامه قرار می‌گیرد.

آیا می‌توان mlmodelc را به .mlmodel برگردانید؟

خیر، بازگردانی به عکس وجود ندارد. mlmodelc یک فرمت دودویی انحصاری Apple است. .mlmodel اصلی به طور جداگانه در سیستم کنترل نسخه ذخیره می‌شود.

آیا mlmodelc از مدل‌های کوانتیزه شده در INT8 پشتیبانی می‌کند؟

بله، mlmodelc از طریق Core ML Tools از کوانتیزاسیون INT8 پشتیبانی می‌کند. در طول کامپایل، وزن‌ها از FP32 به INT8 تبدیل می‌شوند که منجر به کاهش چهاربرابری اندازه و تا 2x تسریع در ANE می‌شود.

نتیجه‌گیری

  • mlmodelc — فرمات کامپایل‌شده مدل Core ML برای اجرا در دستگاه‌های Apple.
  • کامپایل شامل بهینه‌سازی گراف، ادغام لایه‌ها و کوانتیزاسیون وزن‌ها برای سطح سخت‌افزار مقصد است.
  • فرمات زمان بارگیری را 30–60% کاهش و مصرف حافظه اوج را 30–45% کاهش می‌دهد.
  • استقرار از طریق بندل استاتیک، دانلود از شبکه با کامپایل یا On-Demand Resources ممکن است.
  • mlmodelc از اجرا در Apple Neural Engine، GPU و CPU از طریق Core ML Runtime پشتیبانی می‌کند.
  • برای بارگیری از MLModel.load(contentsOf:) در پش‌زمینه با مدیریت خطا استفاده کنید.
  • نظارت بر کارایی مدل‌ها از طریق Instruments با الگوی Core ML انجام می‌شود.

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید