mlmodelc este versiunea compilată a modelului Core ML, optimizată pentru execuție pe dispozitivele Apple care rulează iOS, macOS și iPadOS. Spre deosebire de formatul original .mlmodel, fișierul mlmodelc trece printr-un proces de compilare în care modelul este transformat într-o reprezentare internă inteligibilă pentru Core ML Runtime. Conform Apple Developer Documentation, 2025, compilarea se execută automat la asamblarea aplicației în Xcode, precum și pe dispozitiv după descărcarea modelului din rețea. mlmodelc asigură o pornire mai rapidă și un consum redus de memorie în comparație cu formatul interpretat.
Principalele puncte
mlmodelc este un format binar compilat al modelului Core ML, destinat execuției directe pe dispozitivele Apple. Formatul original .mlmodel este un pachet ce conține descrierea modelului în protobuf, greutățile sub formă de tablouri și metadate în JSON. La compilare, această structură este transformată într-o reprezentare binară compactă, optimizată pentru o platformă hardware specifică.
Diferența cheie a mlmodelc — absența etapei de interpretare în timpul inferenței. Core ML Runtime nu parsează schema protobuf și nu construiește graful de calcul dinamic — toți acești pași sunt efectuați în etapa de compilare. Acest lucru aduce un câștig de timp la prima pornire a modelului de la 30% la 60%, în funcție de complexitatea arhitecturii.
Conform sesiunii WWDC 2023 „Core ML Tools și optimizarea modelelor”, compilarea include optimizarea operațiilor cu virgulă mobilă, îmbinarea straturilor consecutive și conversia într-un format inteligibil pentru Apple Neural Engine. Dezvoltatorul nu trebuie să gestioneze manual acest proces — Xcode execută compilarea automat în etapa de asamblare.
| Caracteristică | .mlmodel | mlmodelc |
|---|---|---|
| Format de stocare | Pachet (protobuf + greutăți) | Binar, specific platformei |
| Pregătire pentru execuție | Necesită compilare | Pregătit pentru inferență |
| Dimensiune pe disc | Dimensiune originală | Cu 10–20% mai mic |
| Viteza primei porniri | Mai lent (parsare + compilare) | Pornire instantanee |
| Suport ANE | Necesită optimizare suplimentară | Automat |
Compilarea modelului în mlmodelc trece prin trei etape. În prima etapă, Core ML Tools citește specificația protobuf a .mlmodel și construiește un graf intern de calcul în formatul MIL (Model Intermediate Language). Instrumentul verifică compatibilitatea fiecărei operații cu dispozitivul țintă și marchează straturile nesuportate pentru execuție pe CPU.
în a doua etapă se realizează optimizarea grafului: îmbinarea straturilor consecutive (convolution + batch norm → fused convolution), eliminarea nodurilor moarte, cuantizarea greutăților din FP32 în FP16 sau INT8. Conform Apple Engineering Report „Core ML Optimization Pipeline” (2024), îmbinarea straturilor reduce numărul de operații de inferență cu până la 40%.
A treia etapă — generarea reprezentării binare. Graful optimizat este serializat în formatul proprietar Core ML Runtime. Greutățile sunt salvate cu aliniere la liniile de cache ale procesorului, iar metadatele — într-un index separat pentru acces rapid. Rezultatul — un folder cu extensia .mlmodelc, gata de includere în pachetul aplicației.
Structura mlmodelc include trei componente cheie. Model Description — metadatele modelului: tipurile de intrări și ieșiri, dimensiunile acestora, numele tensorilor, parametrii de preprocesare. Această secțiune este stocată într-un format asemănător JSON pentru compatibilitate cu API-ul Core ML.
Program — reprezentarea binară a grafului de calcul în limbajul intern MIL. Apple folosește MIL ca reprezentare intermediară, similară cu MLIR în TensorFlow sau ONNX. Programul MIL constă din operații, fiecare având un tip, tensori de intrare și ieșire și atribute. Formatul MIL este optimizat pentru execuție eficientă pe Apple Neural Engine.
Al treilea component — weights.bin — fișierul care conține toate greutățile învățate ale modelului. Greutățile sunt stocate cu aliniere la 64 de octeți pentru încărcare optimă în cache. Dacă la compilare este specificată cuantizarea, greutățile sunt salvate în FP16 sau INT8, ceea ce reduce dimensiunea fișierului și accelerează inferența pe cipurile Apple A17 și M4 cu suport hardware pentru aceste formate.
Apple suportă trei metode de includere a mlmodelc în aplicație. Prima — includerea statică în pachet: fișierul mlmodelc este adăugat în proiectul Xcode și ajunge în .app la asamblare. Această metodă este optimă pentru modele mici de până la 100 MB și nu necesită acces la rețea pentru prima pornire.
A doua metodă — descărcarea din rețea cu compilare pe dispozitiv prin MLModel.compile(at:). Dezvoltatorul descarcă .mlmodel, îl plasează într-un director temporar și apelează compilatorul Core ML. Rezultatul — mlmodelc, care poate fi stocat în cache pentru rulări ulterioare. Conform Apple HIG pentru Core ML, această abordare este recomandată pentru modele mai mari de 100 MB și pentru actualizări dinamice fără publicarea unei noi versiuni a aplicației.
A treia metodă — On-Demand Resources pentru modele încărcate la cerere. Apple ODR permite stocarea mlmodelc în cloud și încărcarea doar la nevoie. Acesta este un scenariu popular pentru aplicațiile cu zeci de modele, unde utilizatorul folosește doar câteva.
La descărcarea modelului din rețea, este important să se țină cont de timpul de compilare. MLModel.compile(at:) se execută sincron și poate bloca interfața pe dispozitivele cu A12 și mai vechi timp de 5–10 secunde pentru modele de dimensiune medie. Se recomandă executarea compilării în fundal și informarea utilizatorului despre proces printr-un indicator de încărcare.
Principalul avantaj al mlmodelc este viteza de încărcare a modelului. Conform Apple Performance Benchmarks (2024), modelul ResNet-50 de 100 MB se încarcă cu 58% mai rapid în formatul mlmodelc comparativ cu .mlmodel. Acest lucru este deosebit de important pentru aplicațiile care lucrează cu mai multe modele în mod secvențial.
Al doilea avantaj — reducerea consumului maxim de memorie. La încărcarea .mlmodel, Core ML Runtime alocă un buffer pentru parsarea protobuf și un al doilea buffer pentru compilarea grafului. mlmodelc pornește direct, ocolind aceste etape. Consumul maxim de memorie scade cu 30–45% pentru modelele de viziune computerizată.
Al treilea — optimizarea hardware. Compilatorul coremlc analizează dispozitivul țintă în etapa de asamblare și selectează partiționarea optimă a operațiilor între ANE, GPU și CPU. Dacă asamblarea este universală, compilarea este transferată pe dispozitiv la prima pornire, iar rezultatul este stocat în cache pentru sesiunile ulterioare.
Exemplu de încărcare a modelului compilat din pachetul aplicației. Este suficient să indicați URL-ul modelului și să apelați MLModel.load(contentsOf:). Core ML Runtime va determina automat formatul mlmodelc după extensie și va efectua inițializarea.
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)
Exemplu de compilare .mlmodel pe dispozitiv cu stocare ulterioară în cache. Folosiți MLModel.compile(at:) pentru a obține calea temporară către mlmodelc, apoi copiați-o în directorul cache.
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)
întrebări frecvente
Da, mlmodelc funcționează pe simulatorul iOS, dar fără accelerarea ANE, deoarece Neural Engine este o componentă hardware care lipsește pe Mac. Inferența se execută pe CPU prin Accelerate framework.
mlmodelc — format compilat pentru execuție. .mlpackage — container pentru Xcode 15+, care combină modelul original și mai multe configurații. .mlpackage este compilat în mlmodelc la asamblarea aplicației.
Verificați extensia fișierului: .mlmodelc. Dacă modelul are extensia .mlmodel, nu este compilat. După asamblare în Xcode, mlmodelc gata se află în folderul DerivedData al aplicației.
Nu, decompilarea inversă nu există. mlmodelc este un format binar proprietar Apple. .mlmodel original este păstrat separat în sistemul de control al versiunilor.
Da, mlmodelc suportă cuantizarea INT8 prin Core ML Tools. La compilare, greutățile sunt transformate din FP32 în INT8, ceea ce oferă o reducere de patru ori a dimensiunii și o accelerare de până la 2x pe ANE.
Concluzii
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și