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 формат за съвместимост с Core ML API.

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 се зарежда 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 framework.

Каква е разликата между 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%.
  • Развърнянето е възможно чрез статичен пакет, изтегляне от мрежата с компилиране или On-Demand Resources.
  • mlmodelc подкрепя изпълнение на Apple Neural Engine, GPU и CPU чрез Core ML Runtime.
  • За зареждане използвайте MLModel.load(contentsOf:) на заден план с обработка на грешки.
  • Мониторинг на производителността на моделите се извършва чрез Instruments с Core ML шаблон.

Ще разработим мобилно приложение под ключ

IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също