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. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође