mlmodelc је компилирана верзија Core ML модела, оптимизована за извршавање на Apple уређајима под контролом iOS-а, macOS-а и iPadOS-а. За разлику од изворног формата .mlmodel, датотека mlmodelc пролази кроз фазу компилације у којој се модел претвара у унутрашњу представу разумљиву Core ML Runtime-у. Према Apple Developer Documentation, 2025, компилација се автоматски обавља приликом изградње апликације у Xcode-у, као и на уређају након преузимања модела из мреже. mlmodelc обезбеђује бржи покретање и мању потрошњу меморије у поређењу са интерпретираним форматом.
Главно
mlmodelc је компилирани бинарни формат Core ML модела, намењен за директно извршавање на Apple уређајима. Изворни формат .mlmodel је пакет који садржи опис модела у protobuf-у, тежине у облику низова и метаподатке у JSON-у. Приликом компилације ова структура се претвара у компактну бинарну репрезентацију, оптимизовану за одређену хардверску платформу.
Кључна разлика mlmodelc-а је изостанак фазе интерпретације током инференције. Core ML Runtime не парсира protobuf шему и не гради граф израчунавања динамички — сви ови кораци су обављени у фази компилације. Ово даје уштеду времена првог покретања модела од 30% до 60% у зависности од сложености архитектуре.
Према сесији WWDC 2023 „Core ML Tools и оптимизација модела”, компилација укључује оптимизацију операција са покретним запетом, спајање узастопних слојева и конверзију у формат разумљив Apple Neural Engine-у. Програмер не мора да управља овим процесом ручно — Xcode автоматски обавља компилацију у фази изградње.
| Карактеристика | .mlmodel | mlmodelc |
|---|---|---|
| Формат складиштења | Пакет (protobuf + тежине) | Бинарни, платформски специфичан |
| Спремност за извршавање | Захтева компилацију | Спреман за инференцију |
| Величина на диску | Изворна величина | За 10–20% мањи |
| Брзина првог покретања | Спорији (парсирање + компилација) | Тренутно покретање |
| Подршка ANE-а | Захтева додатну оптимизацију | Автоматска |
Компилација модела у 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-а укључује три кључне компоненте. 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 чиповима са хардверском подршком ових формата.
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-а је брзина учитавања модела. Према Apple Performance Benchmarks (2024), модел ResNet-50 величине 100 MB се учитава 58% брже у mlmodelc формату у поређењу са .mlmodel-ом. Ово је посебно важно за апликације које раде са више модела секвенцијално.
Друга предност — смањење вршног коришћења меморије. Приликом учитавања .mlmodel-а, Core ML Runtime додељује буфер за парсирање protobuf-а и други буфер за компилацију графа. mlmodelc покреће директно, заобилазећи ове фазе. Вршно коришћење меморије се смањује за 30–45% код модела компјутерског вида.
Трећа — хардверска оптимизација. Компилатор coremlc анализира циљни уређај у фази изградње и бира оптималну поделу операција између ANE-а, GPU-а и CPU-а. Ако је изградња универзална, компилација се преноси на уређај при првом покретању, а резултат се кешира за касније сесије.
Пример учитавања компилираног модела из пакета апликације. Довољно је навести URL модела и позвати MLModel.load(contentsOf:). Core ML Runtime ће автоматски препознати mlmodelc формат по екстензији и извршити иницијализацију.
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-а, затим је копирајте у кеш директоријум.
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 симулатору, али без ANE убрзања, јер Neural Engine није доступан на Mac-у. Инференција се извршава на CPU-у путем Accelerate framework-а.
mlmodelc — компилирани формат за извршавање. .mlpackage — контејнер за Xcode 15+ који обједињује изворни модел и више конфигурација. .mlpackage се компилира у mlmodelc приликом изградње апликације.
Проверите екстензију датотеке: .mlmodelc. Ако модел има екстензију .mlmodel, није компилиран. Након изградње у Xcode-у, готов mlmodelc се налази у DerivedData фолдеру апликације.
Не, повратна декомпилација не постоји. mlmodelc је бинарни пропријетарни Apple формат. Изворни .mlmodel се чува одвојено у систему контроле верзија.
Да, mlmodelc подржава INT8 квантизацију путем Core ML Tools-а. Приликом компилације, тежине се претварају из FP32 у INT8, што даје четвороструко смањење величине и до 2x убрзање на ANE-у.
Закључак
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође