mlmodelc: ce este, formatul modelului compilat și compilarea

Autor: IT Sectr Publicat: 2026-07-17 Timp de citire: 7 min

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 — formatul compilat al modelului Core ML pentru execuție pe dispozitivele Apple.
  • Compilarea .mlmodel în mlmodelc este realizată de Xcode la asamblarea aplicației sau pe dispozitiv prin MLModel.compile().
  • Formatul include Model Description, graful binar de calcul în MIL și fișierul weights.bin.
  • mlmodelc asigură accelerarea pornirii cu 30–60% datorită optimizării prealabile a grafului.
  • Suportă Apple Neural Engine, GPU și CPU prin Core ML Runtime.

Ce este mlmodelc și cum se deosebește de .mlmodel

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.

Comparație între mlmodelc și .mlmodel

Caracteristică.mlmodelmlmodelc
Format de stocarePachet (protobuf + greutăți)Binar, specific platformei
Pregătire pentru execuțieNecesită compilarePregătit pentru inferență
Dimensiune pe discDimensiune originalăCu 10–20% mai mic
Viteza primei porniriMai lent (parsare + compilare)Pornire instantanee
Suport ANENecesită optimizare suplimentarăAutomat

Cum funcționează procesul de compilare mlmodelc

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.

Arhitectura internă mlmodelc

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.

Metode de implementare mlmodelc în aplicație

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.

Compilare asincronă pe dispozitiv

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.

Avantaje de performanță mlmodelc

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.

Exemple de lucru cu mlmodelc în cod Swift

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.

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)

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.

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)

întrebări frecvente

Se poate folosi mlmodelc pe simulatorul iOS?

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.

Cu ce se deosebește mlmodelc de .mlpackage?

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.

Cum verific dacă modelul este deja compilat în mlmodelc?

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.

Se poate decompila mlmodelc înapoi în .mlmodel?

Nu, decompilarea inversă nu există. mlmodelc este un format binar proprietar Apple. .mlmodel original este păstrat separat în sistemul de control al versiunilor.

Suportă mlmodelc modele cuantizate în INT8?

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

  • mlmodelc — formatul compilat al modelului Core ML, optimizat pentru execuție pe dispozitivele Apple.
  • Compilarea include optimizarea grafului, îmbinarea straturilor și cuantizarea greutăților pentru platforma țintă.
  • Formatul asigură reducerea timpului de încărcare cu 30–60% și a consumului maxim de memorie cu 30–45%.
  • Implementarea este posibilă prin pachet static, descărcare din rețea cu compilare sau On-Demand Resources.
  • mlmodelc suportă execuția pe Apple Neural Engine, GPU și CPU prin Core ML Runtime.
  • Pentru încărcare, utilizați MLModel.load(contentsOf:) în fundal cu gestionarea erorilor.
  • Monitorizarea performanței modelelor se realizează prin Instruments cu șablonul Core ML.

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.

Discutați proiectul

Citiți și