mlmodelc je zkompilovaná verze modelu Core ML, optimalizovaná pro provádění na zařízeních Apple s iOS, macOS a iPadOS. Na rozdíl od původního formátu .mlmodel prochází soubor mlmodelc fází kompilace, během které je model pŞeveden do interní reprezentace srozumitelné pro Core ML Runtime. Podle Apple Developer Documentation, 2025 se kompilace provádí automaticky při sestavení aplikace v Xcode, stejně jako na zařízení po stažení modelu ze sítě. mlmodelc zajišťuje rychlejší spuštění a nižší spotřebu paměti ve srovnání s interpretovaným formátem.
Hlavní body
mlmodelc je zkompilovaný binární formát modelu Core ML, určený pro přímé provádění na zařízeních Apple. Původní formát .mlmodel je balíček obsahující popis modelu v protobuf, váhy ve formě polí a metadata v JSON. Při kompilaci se tato struktura převádí do kompaktní binární reprezentace, optimalizované pro konkrétní hardwarovou platformu.
Klíčový rozdíl mlmodelc je absence fáze interpretace během inference. Core ML Runtime neparsuje protobuf schéma a nestaví výpočetní graf dynamicky — všechny tyto kroky byly provedeny ve fázi kompilace. To přináší úspory času prvního spuštění modelu od 30 % do 60 % v závislosti na složitosti architektury.
Podle zasedání WWDC 2023 „Core ML Tools a optimalizace modelů” zahrnuje kompilace optimalizaci operací s plovoucí čárkou, slučování po sobě jdoucích vrstev a převod do formátu srozumitelného pro Apple Neural Engine. Vývojář nemusí tento proces řídit ručně — Xcode provádí kompilaci automaticky ve fázi sestavení.
| Charakteristika | .mlmodel | mlmodelc |
|---|---|---|
| Formát uložení | Balíček (protobuf + váhy) | Binární, platformově specifický |
| Připravenost k provedení | Vyžaduje kompilaci | Připraven k inferenci |
| Velikost na disku | Původní velikost | O 10–20 % menší |
| Rychlost prvního spuštění | Pomalejší (parsování + kompilace) | Ihned spustitelné |
| Podpora ANE | Vyžaduje další optimalizaci | Automatická |
Kompilace modelu do mlmodelc prochází třemi fázemi. V první fázi Core ML Tools čte protobuf specifikaci .mlmodel a vytváří interní výpočetní graf ve formátu MIL (Model Intermediate Language). Nástroj kontroluje kompatibilitu každé operace s cílovým zařízením a označuje nepodporované vrstvy pro provedení na CPU.
Ve druhé fázi se provádí optimalizace grafu: slučování po sobě jdoucích vrstev (convolution + batch norm → fused convolution), odstraňování mrtvých uzlů, kvantizace vah z FP32 na FP16 nebo INT8. Podle Apple Engineering Report „Core ML Optimization Pipeline” (2024) snížuje slučování vrstev počet inferenčních operací až o 40 %.
Třetí fáze — generování binární reprezentace. Optimalizovaný graf je serializován do proprietárního formátu Core ML Runtime. Váhy jsou uloženy s zarovnáním na řádky mezipaměti procesoru a metadata v samostatném indexu pro rychlý přístup. Výsledek — složka s příponou .mlmodelc, připravená k začlenění do balíčku aplikace.
Struktura mlmodelc zahrnuje tři klíčové komponenty. Model Description — metadata modelu: typy vstupů a výstupů, jejich rozměry, názvy tenzorů, parametry předzpracování. Tato sekce je uložena ve formátu podobném JSON pro kompatibilitu s API Core ML.
Program — binární reprezentace výpočetního grafu ve vnitřním jazyce MIL. Apple používá MIL jako mezikrok, podobný MLIR v TensorFlow nebo ONNX. Program MIL se skládá z operací, z nichž každá má typ, vstupní a výstupní tenzory a atributy. Formát MIL je optimalizován pro efektivní provádění na Apple Neural Engine.
Třetí komponent — weights.bin — soubor obsahující všechny natrénované váhy modelu. Váhy jsou uloženy s zarovnáním na 64 bajtů pro optimální načtení do mezipaměti. Pokud je při kompilaci uvedena kvantizace, váhy se ukládají v FP16 nebo INT8, což snižuje velikost souboru a zrychluje inferenci na /ipech Apple A17 a M4 s hardwarovou podporou těchto formátů.
Apple podporuje tři způsoby začlenění mlmodelc do aplikace. První — statické začlenění do balíčku: soubor mlmodelc se přidá do projektu Xcode a při sestavení se dostane do .app. Tento způsob je optimální pro malé modely do 100 MB a nevyžaduje přístup k síti pro první spuštění.
Druhý způsob — stažení ze sítě s kompilací na zařízení prostřednictvím MLModel.compile(at:). Vývojář stáhne .mlmodel, umístí jej do dočasného adresáře a zavolá kompilátor Core ML. Výsledek — mlmodelc, který lze ukládat do mezipaměti pro následná spuštění. Podle Apple HIG pro Core ML se tento přístup doporučuje pro modely větší než 100 MB a pro dynamické aktualizace bez publikování nové verze aplikace.
Třetí způsob — On-Demand Resources pro modely načítané na požádání. Apple ODR umožňuje ukládat mlmodelc v cloudu a načítat jej pouze v př edpadě potřeby. To je oblíbený scénář pro aplikace s desítkami modelů, kde uživatel používá jen několik.
Při stahování modelu ze sítě je důležité zohlednit čas kompilace. MLModel.compile(at:) se provádí synchronně a může blokovat rozhraní na zařízeních s A12 a starších až na 5–10 sekund pro modely střední velikosti. Doporučuje se provádět kompilaci na pozadí a informovat uživatele o průběhu pomocí indikátoru načítání.
Hlavní výhodou mlmodelc je rychlost načtení modelu. Podle Apple Performance Benchmarks (2024) se model ResNet-50 o velikosti 100 MB načítá o 58 % rychleji ve formátu mlmodelc ve srovnání s .mlmodel. To je důležité zejména pro aplikace pracující s několika modely sekvenčně.
Druhou výhodou je snižení špičkové spotřeby paměti. Při načítání .mlmodel alokuje Core ML Runtime buffer pro parsování protobuf a druhý buffer pro kompilaci grafu. mlmodelc se spouští přímo a tyto fáze přeskakuje. Špičková spotřeba paměti klesá o 30–45 % u modelů počítačového vidění.
Třetí — hardwarová optimalizace. Kompilátor coremlc analyzuje cílové zařízení ve fázi sestavení a vybírá optimální rozdělení operací mezi ANE, GPU a CPU. Pokud je sestavení univerzální, kompilace se přenáší na zařízení při prvním spuštění a výsledek se ukládá do mezipaměti pro následná sezení.
Příklad načtení zkompilovaného modelu z balíčku aplikace. Staāí zadat URL modelu a zavolat MLModel.load(contentsOf:). Core ML Runtime automaticky rozpozná formát mlmodelc podle přípony a provede inicializaci.
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)
Příklad kompilace .mlmodel na zařízení s následným ukládáním do mezipaměti. Použijte MLModel.compile(at:) k získání dočasné cesty k mlmodelc, poté ji zkopírujte do adresáře mezipaměti.
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)
Často kladené otázky
Ano, mlmodelc funguje na iOS simulátoru, ale bez zrychlení ANE, protože Neural Engine je hardwarová součástka, která na Macu chybí. Inference se provádí na CPU prostřednictvím Accelerate framework.
mlmodelc — zkompilovaný formát pro provádění. .mlpackage — kontejner pro Xcode 15+, který kombinuje původní model a více konfigurací. .mlpackage se zkompiluje do mlmodelc při sestavení aplikace.
Zkontrolujte příponu souboru: .mlmodelc. Pokud má model příponu .mlmodel, není zkompilován. Po sestavení v Xcode se hotový mlmodelc nachází ve složce DerivedData aplikace.
Ne, zpětná dekompilace neexistuje. mlmodelc je binární proprietární formát Apple. Původní .mlmodel je uchováván samostatně v systému pro správu verzí.
Ano, mlmodelc podporuje kvantizaci INT8 prostřednictvím Core ML Tools. Při kompilaci jsou váhy převedeny z FP32 na INT8, což přináší čtyřnásobné snížení velikosti a až 2násobné zrychlení na ANE.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také