mlmodelc: wat is het, formaat van het gecompileerde model en compilatie

Auteur: IT Sectr Gepubliceerd: 2026-07-17 Leestijd: 7 min

mlmodelc is de gecompileerde versie van een Core ML-model, geoptimaliseerd voor uitvoering op Apple-apparaten met iOS, macOS en iPadOS. In tegenstelling tot het originele .mlmodel-formaat doorloopt het mlmodelc-bestand een compilatiefase waarin het model wordt omgezet naar een interne representatie die begrijpelijk is voor Core ML Runtime. Volgens Apple Developer Documentation, 2025 wordt compilatie automatisch uitgevoerd tijdens het bouwen van de app in Xcode, en ook op het apparaat na het downloaden van het model via het netwerk. mlmodelc zorgt voor een snellere start en lager geheugengebruik vergeleken met het geïnterpreteerde formaat.

Belangrijkste punten

  • mlmodelc — het gecompileerde formaat van een Core ML-model voor uitvoering op Apple-apparaten.
  • Compilatie van .mlmodel naar mlmodelc wordt door Xcode uitgevoerd tijdens het bouwen van de app of op het apparaat via MLModel.compile().
  • Het formaat omvat Model Description, een binaire rekenkundige graaf in MIL en het weights.bin-bestand.
  • mlmodelc biedt versnelling van het opstarten met 30–60% dankzij voorafgaande optimalisatie van de graaf.
  • Ondersteunt Apple Neural Engine, GPU en CPU via Core ML Runtime.

Wat is mlmodelc en hoe verschilt het van .mlmodel

mlmodelc is een gecompileerd binair formaat van het Core ML-model, bedoeld voor directe uitvoering op Apple-apparaten. Het originele .mlmodel-formaat is een pakket met de modelbeschrijving in protobuf, gewichten in de vorm van arrays en metadata in JSON. Tijdens compilatie wordt deze structuur omgezet naar een compacte binaire representatie, geoptimaliseerd voor een specifiek hardwareplatform.

Het belangrijkste verschil van mlmodelc is het ontbreken van een interpretatiefase tijdens inferentie. Core ML Runtime parseert geen protobuf-schema en bouwt geen rekenkundige graaf dynamisch — al deze stappen zijn uitgevoerd tijdens de compilatiefase. Dit levert een tijdwinst op bij de eerste start van het model van 30% tot 60%, afhankelijk van de complexiteit van de architectuur.

Volgens de sessie WWDC 2023 „Core ML Tools en optimalisatie van modellen” omvat compilatie optimalisatie van drijvende-kommabewerkingen, samensmelting van opeenvolgende lagen en conversie naar een formaat dat begrijpelijk is voor Apple Neural Engine. De ontwikkelaar hoeft dit proces niet handmatig te beheren — Xcode voert de compilatie automatisch uit tijdens de bouwfase.

Vergelijking van mlmodelc en .mlmodel

Kenmerk.mlmodelmlmodelc
OpslagformaatPakket (protobuf + gewichten)Binair, platformspecifiek
Gereed voor uitvoeringVereist compilatieKlaar voor inferentie
Omvang op schijfOriginele omvang10–20% kleiner
Snelheid eerste startLangzamer (parsen + compilatie)Direct opstarten
Ondersteuning ANEVereist extra optimalisatieAutomatisch

Hoe werkt het compilatieproces van mlmodelc

Compilatie van het model naar mlmodelc doorloopt drie fasen. In de eerste fase leest Core ML Tools de protobuf-specificatie van .mlmodel en bouwt een interne rekenkundige graaf in MIL-formaat (Model Intermediate Language). Het hulpmiddel controleert de compatibiliteit van elke bewerking met het doelapparaat en markeert niet-ondersteunde lagen voor uitvoering op de CPU.

In de tweede fase wordt optimalisatie van de graaf uitgevoerd: samensmelting van opeenvolgende lagen (convolution + batch norm → fused convolution), verwijdering van dode knooppunten, kwantisatie van gewichten van FP32 naar FP16 of INT8. Volgens Apple Engineering Report „Core ML Optimization Pipeline” (2024) vermindert het samensmelten van lagen het aantal inferentiebewerkingen met tot 40%.

De derde fase — generatie van de binaire representatie. De geoptimaliseerde graaf wordt geserialiseerd naar het eigen formaat van Core ML Runtime. Gewichten worden opgeslagen met uitlijning op de cacheregels van de processor, en metadata in een aparte index voor snelle toegang. Het resultaat — een map met de extensie .mlmodelc, klaar voor opname in het app-pakket.

Interne architectuur van mlmodelc

De structuur van mlmodelc omvat drie belangrijke componenten. Model Description — de metadata van het model: typen invoer en uitvoer, hun afmetingen, namen van tensoren, parameters voor voorbewerking. Deze sectie wordt opgeslagen in een JSON-achtig formaat voor compatibiliteit met de Core ML API.

Program — de binaire representatie van de rekenkundige graaf in de interne MIL-taal. Apple gebruikt MIL als tussenliggende representatie, vergelijkbaar met MLIR in TensorFlow of ONNX. Een MIL-programma bestaat uit bewerkingen, elk met een type, invoer- en uitvoertensoren en attributen. Het MIL-formaat is geoptimaliseerd voor efficiënte uitvoering op Apple Neural Engine.

De derde component — weights.bin — het bestand dat alle getrainde gewichten van het model bevat. Gewichten worden opgeslagen met uitlijning op 64 bytes voor optimaal laden in de cache. Als bij compilatie kwantisatie is gespecificeerd, worden gewichten opgeslagen in FP16 of INT8, wat de bestandsgrootte verkleint en inferentie versnelt op Apple A17- en M4-chips met hardware-ondersteuning voor deze formaten.

Methoden voor implementatie van mlmodelc in de app

Apple ondersteunt drie methoden voor het opnemen van mlmodelc in de app. De eerste — statische opname in het pakket: het mlmodelc-bestand wordt toegevoegd aan het Xcode-project en komt bij het bouwen in .app terecht. Deze methode is optimaal voor kleine modellen tot 100 MB en vereist geen netwerktoegang voor de eerste start.

De tweede methode — downloaden via het netwerk met compilatie op het apparaat via MLModel.compile(at:). De ontwikkelaar downloadt .mlmodel, plaatst het in een tijdelijke map en roept de Core ML-compiler aan. Het resultaat — mlmodelc, dat kan worden gecachet voor volgende starts. Volgens Apple HIG voor Core ML wordt deze aanpak aanbevolen voor modellen groter dan 100 MB en voor dynamische updates zonder het publiceren van een nieuwe app-versie.

De derde methode — On-Demand Resources voor modellen die op aanvraag worden geladen. Apple ODR maakt het mogelijk mlmodelc in de cloud op te slaan en alleen te laden wanneer nodig. Dit is een populair scenario voor apps met tientallen modellen, waarbij de gebruiker er slechts een paar gebruikt.

Asynchrone compilatie op het apparaat

Bij het downloaden van een model via het netwerk is het belangrijk rekening te houden met de compilatietijd. MLModel.compile(at:) wordt synchroon uitgevoerd en kan de interface op apparaten met A12 en ouder tot 5–10 seconden blokkeren voor modellen van gemiddelde grootte. Het wordt aanbevolen compilatie op de achtergrond uit te voeren en de gebruiker op de hoogte te stellen via een laadindicator.

Prestatievoordelen van mlmodelc

Het belangrijkste voordeel van mlmodelc is de snelheid van het laden van het model. Volgens Apple Performance Benchmarks (2024) wordt het ResNet-50-model van 100 MB 58% sneller geladen in mlmodelc-formaat vergeleken met .mlmodel. Dit is vooral belangrijk voor apps die met meerdere modellen sequentieel werken.

Het tweede voordeel — vermindering van het piekgeheugengebruik. Bij het laden van .mlmodel wijst Core ML Runtime een buffer toe voor het parsen van protobuf en een tweede buffer voor compilatie van de graaf. mlmodelc start direct op en slaat deze fasen over. Het piekgeheugengebruik daalt met 30–45% voor computervisiemodellen.

Het derde — hardware-optimalisatie. De coremlc-compiler analyseert het doelapparaat tijdens de bouwfase en selecteert de optimale verdeling van bewerkingen tussen ANE, GPU en CPU. Als de build universeel is, wordt compilatie overgedragen naar het apparaat bij de eerste start en wordt het resultaat gecachet voor volgende sessies.

Voorbeelden van werken met mlmodelc in Swift-code

Voorbeeld van het laden van een gecompileerd model uit het app-pakket. Het is voldoende om de URL van het model aan te geven en MLModel.load(contentsOf:) aan te roepen. Core ML Runtime bepaalt automatisch het mlmodelc-formaat aan de hand van de extensie en voert de initialisatie uit.

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)

Voorbeeld van compilatie van .mlmodel op het apparaat met daaropvolgende caching. Gebruik MLModel.compile(at:) om het tijdelijke pad naar mlmodelc te verkrijgen, kopieer het vervolgens naar de cachemap.

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)

Veelgestelde vragen

Kan mlmodelc worden gebruikt op de iOS-simulator?

Ja, mlmodelc werkt op de iOS-simulator, maar zonder ANE-versnelling, omdat Neural Engine een hardwarecomponent is die ontbreekt op de Mac. Inferentie wordt uitgevoerd op de CPU via Accelerate framework.

Waarin verschilt mlmodelc van .mlpackage?

mlmodelc — gecompileerd formaat voor uitvoering. .mlpackage — container voor Xcode 15+ die het originele model en meerdere configuraties combineert. .mlpackage wordt gecompileerd naar mlmodelc tijdens het bouwen van de app.

Hoe controleer ik of het model al is gecompileerd naar mlmodelc?

Controleer de bestandsextensie: .mlmodelc. Als het model de extensie .mlmodel heeft, is het niet gecompileerd. Na het bouwen in Xcode bevindt de voltooide mlmodelc zich in de DerivedData-map van de app.

Kan mlmodelc worden gedecompileerd terug naar .mlmodel?

Nee, terugdecompilatie bestaat niet. mlmodelc is een binair eigen formaat van Apple. Het originele .mlmodel wordt apart bewaard in het versiebeheersysteem.

Ondersteunt mlmodelc gekwantiseerde modellen in INT8?

Ja, mlmodelc ondersteunt INT8-kwantisatie via Core ML Tools. Tijdens compilatie worden gewichten omgezet van FP32 naar INT8, wat een viervoudige vermindering van de omvang en tot 2x versnelling op ANE oplevert.

Samenvatting

  • mlmodelc — het gecompileerde formaat van het Core ML-model, geoptimaliseerd voor uitvoering op Apple-apparaten.
  • Compilatie omvat optimalisatie van de graaf, samensmelting van lagen en kwantisatie van gewichten voor het doelplatform.
  • Het formaat zorgt voor vermindering van de laadtijd met 30–60% en vermindering van het piekgeheugengebruik met 30–45%.
  • Implementatie is mogelijk via statisch pakket, download via netwerk met compilatie of On-Demand Resources.
  • mlmodelc ondersteunt uitvoering op Apple Neural Engine, GPU en CPU via Core ML Runtime.
  • Gebruik voor het laden MLModel.load(contentsOf:) op de achtergrond met foutafhandeling.
  • Prestatiebewaking van modellen gebeurt via Instruments met het Core ML-sjabloon.

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook