mlmodelc: vad är det, format för kompilerad modell och kompilering

Författare: IT Sectr Publicerad: 2026-07-17 Lästid: 7 min

mlmodelc är den kompilerade versionen av en Core ML-modell, optimerad för exekvering på Apple-enheter som kör iOS, macOS och iPadOS. Till skillnad från det ursprungliga .mlmodel-formatet genomgår mlmodelc-filen en kompileringsfas där modellen omvandlas till en intern representation som är begriplig för Core ML Runtime. Enligt Apple Developer Documentation, 2025 utförs kompilering automatiskt när applikationen byggs i Xcode, samt på enheten efter att modellen har laddats ner från nätverket. mlmodelc ger snabbare start och lägre minnesförbrukning jämfört med det tolkade formatet.

Huvudpunkter

  • mlmodelc — det kompilerade formatet av Core ML-modellen för exekvering på Apple-enheter.
  • Kompilering av .mlmodel till mlmodelc utförs av Xcode när applikationen byggs eller på enheten via MLModel.compile().
  • Formatet inkluderar Model Description, binär beräkningsgraf i MIL och filen weights.bin.
  • mlmodelc ger acceleration av start med 30–60% tack vare föregående optimering av grafen.
  • Stödjer Apple Neural Engine, GPU och CPU via Core ML Runtime.

Vad är mlmodelc och hur skiljer det sig från .mlmodel

mlmodelc är ett kompilerat binärt format av Core ML-modellen, avsett för direkt exekvering på Apple-enheter. Det ursprungliga .mlmodel-formatet är ett paket som innehåller modellbeskrivningen i protobuf, vikter i form av arrayer och metadata i JSON. Vid kompilering omvandlas denna struktur till en kompakt binär representation, optimerad för en specifik hårdvaruplattform.

Den viktigaste skillnaden med mlmodelc är avsaknaden av tolkningsfas under inferens. Core ML Runtime tolkar inte protobuf-schemat och bygger inte beräkningsgrafen dynamiskt — alla dessa steg utförs i kompileringsfasen. Detta ger en tidsbesparing vid första start av modellen på 30% till 60% beroende på arkitekturens komplexitet.

Enligt sessionen WWDC 2023 „Core ML Tools och optimering av modeller” innefattar kompilering optimering av flyttalsoperationer, sammanslagning av på varandra följande lager och konvertering till ett format som är begripligt för Apple Neural Engine. Utvecklaren behöver inte hantera denna process manuellt — Xcode utför kompileringen automatiskt i byggfasen.

Jämförelse mellan mlmodelc och .mlmodel

Egenskap.mlmodelmlmodelc
LagringsformatPaket (protobuf + vikter)Binärt, plattformsspecifikt
Redo för exekveringKräver kompileringRedo för inferens
Storlek på diskUrsprunglig storlek10–20% mindre
Hastighet för första startLångsammare (tolkning + kompilering)Omedelbar start
Stöd för ANEKräver ytterligare optimeringAutomatiskt

Hur fungerar kompileringsprocessen för mlmodelc

Kompilering av modellen till mlmodelc går igenom tre faser. I den första fasen läser Core ML Tools protobuf-specifikationen av .mlmodel och bygger en intern beräkningsgraf i MIL-format (Model Intermediate Language). Verktyget kontrollerar kompatibiliteten för varje operation med målenheten och markerar ej stödda lager för exekvering på CPU.

I den andra fasen utförs optimering av grafen: sammanslagning av på varandra följande lager (convolution + batch norm → fused convolution), borttagning av döda noder, kvantisering av vikter från FP32 till FP16 eller INT8. Enligt Apple Engineering Report „Core ML Optimization Pipeline” (2024) minskar sammanslagning av lager antalet inferensoperationer med upp till 40%.

Den tredje fasen — generering av binär representation. Den optimerade grafen serialiseras till Core ML Runtime:s proprietära format. Vikter sparas med inriktning mot processorcache-linjer och metadata i ett separat index för snabb åtkomst. Resultatet — en mapp med tillägget .mlmodelc, redo att inkluderas i applikationspaketet.

Intern arkitektur för mlmodelc

Strukturen för mlmodelc innefattar tre nyckelkomponenter. Model Description — modellens metadata: typer av in- och utdata, deras dimensioner, tensorernas namn, parametrar för förbehandling. Denna sektion lagras i ett JSON-liknande format för kompatibilitet med Core ML API.

Program — den binära representationen av beräkningsgrafen i det interna MIL-språket. Apple använder MIL som en mellanrepresentation, liknande MLIR i TensorFlow eller ONNX. Ett MIL-program består av operationer, var och en med en typ, in- och utdata-tensorer och attribut. MIL-formatet är optimerat för effektiv exekvering på Apple Neural Engine.

Den tredje komponenten — weights.bin — filen som innehåller alla tränade vikter i modellen. Vikter lagras med 64-byte justering för optimal inläsning i cache. Om kvantisering har angetts vid kompilering sparas vikterna i FP16 eller INT8-format, vilket minskar filstorleken och snabbar upp inferens på Apple A17 och M4-chips med hårdvarustöd för dessa format.

Metoder för att distribuera mlmodelc i applikationen

Apple stödjer tre metoder för att inkludera mlmodelc i applikationen. Den första — statisk inkludering i paketet: mlmodelc-filen läggs till i Xcode-projektet och hamnar i .app vid bygge. Denna metod är optimal för små modeller upp till 100 MB och kräver inte nätverksåtkomst för första start.

Den andra metoden — nedladdning från nätverket med kompilering på enheten via MLModel.compile(at:). Utvecklaren laddar ner .mlmodel, placerar den i en tillfällig katalog och anropar Core ML-kompilatorn. Resultatet — mlmodelc, som kan cachas för efterföljande starter. Enligt Apple HIG för Core ML rekommenderas detta tillvägagångssätt för modeller större än 100 MB och för dynamiska uppdateringar utan att publicera en ny version av applikationen.

Den tredje metoden — On-Demand Resources för modeller som laddas på begäran. Apple ODR gör det möjligt att lagra mlmodelc i molnet och bara ladda när det behövs. Detta är ett populärt scenario för applikationer med dussintals modeller, där användaren bara använder några få.

Asynkron kompilering på enheten

När modellen laddas ner från nätverket är det viktigt att ta hänsyn till kompileringstiden. MLModel.compile(at:) körs synkront och kan blockera gränssnittet på enheter med A12 och äldre i upp till 5–10 sekunder för modeller av medelstorlek. Det rekommenderas att utföra kompileringen i bakgrunden och informera användaren om processen via en laddningsindikator.

Prestandafördelar med mlmodelc

Den största fördelen med mlmodelc är hastigheten på modellinläsning. Enligt Apple Performance Benchmarks (2024) laddas ResNet-50-modellen på 100 MB 58% snabbare i mlmodelc-format jämfört med .mlmodel. Detta är särskilt viktigt för applikationer som arbetar med flera modeller sekventiellt.

Den andra fördelen är minskning av toppminnesanvändning. Vid inläsning av .mlmodel allokerar Core ML Runtime en buffert för tolkning av protobuf och en andra buffert för kompilering av grafen. mlmodelc startar direkt och hoppar över dessa faser. Toppminnesanvändningen minskar med 30–45% för datorseendemodeller.

Den tredje — hårdvaruoptimering. Kompilatorn coremlc analyserar målenheten i byggfasen och väljer den optimala fördelningen av operationer mellan ANE, GPU och CPU. Om bygget är universellt överförs kompileringen till enheten vid första start och resultatet cachas för efterföljande sessioner.

Exempel på arbete med mlmodelc i Swift-kod

Exempel på inläsning av en kompilerad modell från applikationspaketet. Det räcker att ange modellens URL och anropa MLModel.load(contentsOf:). Core ML Runtime kommer automatiskt att identifiera mlmodelc-formatet baserat på filändelsen och utföra initieringen.

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)

Exempel på kompilering av .mlmodel på enheten med efterföljande cachning. Använd MLModel.compile(at:) för att få den tillfälliga sökvägen till mlmodelc, kopiera den sedan till cachekatalogen.

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)

Vanliga frågor

Kan mlmodelc användas på iOS-simulatorn?

Ja, mlmodelc fungerar på iOS-simulatorn, men utan ANE-acceleration, eftersom Neural Engine är en hårdvarukomponent som saknas på Mac. Inferens utförs på CPU via Accelerate framework.

Hur skiljer sig mlmodelc från .mlpackage?

mlmodelc — kompilerat format för exekvering. .mlpackage — container för Xcode 15+ som kombinerar originalmodellen och flera konfigurationer. .mlpackage kompileras till mlmodelc när applikationen byggs.

Hur kontrollerar jag om modellen redan är kompilerad till mlmodelc?

Kontrollera filändelsen: .mlmodelc. Om modellen har ändelsen .mlmodel är den inte kompilerad. Efter bygge i Xcode finns den färdiga mlmodelc i applikationens DerivedData-mapp.

Kan mlmodelc dekompileras tillbaka till .mlmodel?

Nej, bakåtdkompilering finns inte. mlmodelc är ett binärt proprietärt format från Apple. Den ursprungliga .mlmodel förvaras separat i versionshanteringssystemet.

Stödjer mlmodelc kvantiserade modeller i INT8?

Ja, mlmodelc stödjer INT8-kvantisering via Core ML Tools. Vid kompilering omvandlas vikter från FP32 till INT8, vilket ger en fyrfaldig storleksminskning och upp till 2x acceleration på ANE.

Sammanfattning

  • mlmodelc — det kompilerade formatet av Core ML-modellen, optimerat för exekvering på Apple-enheter.
  • Kompilering innefattar optimering av grafen, sammanslagning av lager och kvantisering av vikter för målplattformen.
  • Formatet ger minskning av laddningstiden med 30–60% och minskning av toppminnesanvändningen med 30–45%.
  • Distribution är möjlig via statiskt paket, nedladdning från nätverket med kompilering eller On-Demand Resources.
  • mlmodelc stödjer exekvering på Apple Neural Engine, GPU och CPU via Core ML Runtime.
  • För inläsning, använd MLModel.load(contentsOf:) i bakgrunden med felhantering.
  • Prestandaövervakning av modeller görs via Instruments med Core ML-mallen.

Vi utvecklar en mobil applikation nyckelfärdigt

IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.

Diskutera projektet

Läs också