mlmodelc a Core ML modell lefordított változata, optimalizálva Apple iOS, macOS és iPadOS rendszert futtató eszközökön történő végrehajtásra. Az eredeti .mlmodel formátummal ellentétben az mlmodelc fájl átmegy egy fordítási fázison, amely során a modell a Core ML Runtime által érthető belső reprezentációvá alakul. A Apple Developer Documentation, 2025 szerint a fordítás automatikusan történik az alkalmazás Xcode-ban történő építésekor, valamint az eszközön a modell hálózatról történő letöltése után. mlmodelc gyorsabb indítást és alacsonyabb memóriahasználatot biztosít az értelmezett formátumhoz képest.
Főbb pontok
mlmodelc a Core ML modell lefordított bináris formátuma, amely Apple eszközökön történő közvetlen végrehajtásra szolgál. Az eredeti .mlmodel formátum egy csomag, amely tartalmazza a modell leírását protobuf-ban, a súlyokat tömbök formájában és a metaadatokat JSON-ban. A fordítás során ez a struktúra egy kompakt bináris reprezentációvá alakul, amely egy adott hardverplatformra van optimalizálva.
Az mlmodelc legfőbb különbsége az értelmezési fázis hiánya az inferencia során. A Core ML Runtime nem elemzi a protobuf sémát és nem építi fel a számítási gráfot dinamikusan — mindezek a lépések a fordítási fázisban történnek. Ez időmegtakarítást eredményez a modell első indításakor 30%-tól 60%-ig, az architektúra összetettségétől függően.
A WWDC 2023 „Core ML Tools és modellek optimalizálása” című session szerint a fordítás magában foglalja a lebegőpontos műveletek optimalizálását, az egymást követő rétegek összevonását és az Apple Neural Engine által érthető formátumba való átalakítást. A fejlesztőnek nem kell manuálisan kezelnie ezt a folyamatot — az Xcode automatikusan végrehajtja a fordítást az építési fázisban.
| Jellemző | .mlmodel | mlmodelc |
|---|---|---|
| Tárolási formátum | Csomag (protobuf + súlyok) | Bináris, platform-specifikus |
| Végrehajtásra készség | Fordítást igényel | Kész az inferenciára |
| Méret a lemezen | Eredeti méret | 10–20%-kal kisebb |
| Első indítás sebessége | Lassabb (elemzés + fordítás) | Azonnali indítás |
| ANE támogatás | További optimalizálást igényel | Automatikus |
A modell mlmodelc-vé fordítása három szakaszon megy keresztül. Az első szakaszban a Core ML Tools beolvassa a .mlmodel protobuf specifikációját és felépít egy belső számítási gráfot MIL (Model Intermediate Language) formátumban. Az eszköz ellenőrzi az egyes műveletek kompatibilitását a cél-eszközzel és megjelöli a nem támogatott rétegeket CPU-n történő végrehajtásra.
A második szakaszban a gráf optimalizálása történik: az egymást követő rétegek összevonása (convolution + batch norm → fused convolution), a halott csomópontok eltávolítása, a súlyok kvantálása FP32-ről FP16-ra vagy INT8-ra. Az Apple Engineering Report „Core ML Optimization Pipeline” (2024) szerint a rétegek összevonása akár 40%-kal is csökkentheti az inferencia műveletek számát.
A harmadik szakasz — a bináris reprezentáció generálása. Az optimalizált gráf a Core ML Runtime saját formátumába szerializálódik. A súlyok a processzor gyorsítótár soraihoz igazítva kerülnek tárolásra, a metaadatok pedig egy külön indexben a gyors hozzáférés érdekében. Az eredmény — egy .mlmodelc kiterjesztésű mappa, készen az alkalmazáscsomagba való felvételre.
Az mlmodelc struktúrája három kulcsfontosságú összetevőt tartalmaz. Model Description — a modell metaadatai: a bemenetek és kimenetek típusai, méreteik, a tenzorok nevei, az előfeldolgozás paraméterei. Ez a szakasz JSON-szerű formátumban kerül tárolásra a Core ML API-val való kompatibilitás érdekében.
Program — a számítási gráf bináris reprezentációja a belső MIL nyelven. Az Apple a MIL-t köztes reprezentációként használja, hasonlóan a TensorFlow MLIR-jéhez vagy az ONNX-hez. A MIL program műveletekből áll, amelyek mindegyike rendelkezik típussal, bemeneti és kimeneti tenzorokkal és attribútumokkal. A MIL formátum az Apple Neural Engine-en történő hatékony végrehajtásra van optimalizálva.
A harmadik összetevő — weights.bin — a fájl, amely a modell összes betanított súlyát tartalmazza. A súlyok 64 bájtos igazítással kerülnek tárolásra a gyorsítótárba történő optimális betöltés érdekében. Ha a fordítás során kvantálás van megadva, a súlyok FP16 vagy INT8 formátumban kerülnek mentésre, ami csökkenti a fájlméretet és gyorsítja az inferenciát az Apple A17 és M4 chipeken, amelyek hardveresen támogatják ezeket a formátumokat.
Az Apple három módszert támogat az mlmodelc alkalmazásba történő beépítésére. Az első — statikus beépítés a csomagba: az mlmodelc fájl hozzáadódik az Xcode projekthez és bekerül a .app-ba az építés során. Ez a módszer optimális a 100 MB-ig terjedő kis modellekhez, és nem igényel hálózati hozzáférést az első indításhoz.
A második módszer — letöltés a hálózatról eszközön történő fordítással az MLModel.compile(at:) segítségével. A fejlesztő letölti a .mlmodel-t, egy ideiglenes könyvtárba helyezi és meghívja a Core ML fordítót. Az eredmény — mlmodelc, amely gyorsítótárba helyezhető a későbbi indításokhoz. A Core ML Apple HIG szerint ez a megközelítés a 100 MB-nál nagyobb modellekhez és a dinamikus frissítésekhez ajánlott az alkalmazás új verziójának kiadása nélkül.
A harmadik módszer — On-Demand Resources az igény szerint betöltődő modellekhez. Az Apple ODR lehetővé teszi az mlmodelc felhőben történő tárolását és csak szükség esetén történő betöltését. Ez népszerű forgatókönyv a tucatnyi modellel rendelkező alkalmazásoknál, ahol a felhasználó csak néhányat használ.
A modell hálózatról történő letöltésekor fontos figyelembe venni a fordítási időt. MLModel.compile(at:) szinkron módon fut és az A12 és régebbi eszközökön akár 5–10 másodpercig is blokkolhatja a felületet a közepes méretű modellek esetén. Javasolt a fordítást háttérben végezni és a felhasználót tájékoztatni a folyamatról egy betöltő jelző segítségével.
Az mlmodelc fő előnye a modell betöltési sebessége. Az Apple Performance Benchmarks (2024) szerint a 100 MB méretű ResNet-50 modell 58%-kal gyorsabban töltődik be mlmodelc formátumban, mint .mlmodel-ben. Ez különösen fontos azoknál az alkalmazásoknál, amelyek több modellel egymás után dolgoznak.
A második előny — a csúcs memóriahasználat csökkenése. A .mlmodel betöltésekor a Core ML Runtime egy puffert foglal le a protobuf elemzéséhez és egy második puffert a gráf fordításához. Az mlmodelc közvetlenül indul, kihagyva ezeket a lépéseket. A csúcs memóriahasználat 30–45%-kal csökken a számítógépes látás modellek esetén.
A harmadik — hardveres optimalizálás. A coremlc fordító elemzi a cél-eszközt az építési fázisban és kiválasztja a műveletek optimális megosztását az ANE, GPU és CPU között. Ha az építés univerzális, a fordítás átkerül az eszközre az első indításkor, és az eredmény gyorsítótárba kerül a későbbi munkamenetek számára.
Példa a lefordított modell betöltésére az alkalmazás csomagjából. Elég megadni a modell URL-jét és meghívni az MLModel.load(contentsOf:) függvényt. A Core ML Runtime automatikusan felismeri az mlmodelc formátumot a kiterjesztés alapján és elvégzi az inicializálást.
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élda a .mlmodel eszközön történő fordítására utána annak gyorsítótárba helyezésével. Használja az MLModel.compile(at:) függvényt az mlmodelc ideiglenes útjának megszerzéséhez, majd másolja a gyorsítótár könyvtárba.
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)
Gyakran Ismételt Kérdések
Igen, az mlmodelc működik iOS szimulátoron, de ANE gyorsítás nélkül, mivel a Neural Engine egy hardverkomponens, amely nem található meg a Mac-en. Az inferencia a CPU-n történik az Accelerate framework segítségével.
mlmodelc — lefordított formátum végrehajtáshoz. A .mlpackage — tároló az Xcode 15+ számára, amely egyesíti az eredeti modellt és több konfigurációt. A .mlpackage mlmodelc-vé fordítódik az alkalmazás építésekor.
Ellenőrizze a fájl kiterjesztését: .mlmodelc. Ha a modell kiterjesztése .mlmodel, az nincs lefordítva. Az Xcode-ban történő építés után a kész mlmodelc az alkalmazás DerivedData könyvtárában található.
Nem, visszafordítás nem létezik. Az mlmodelc az Apple saját bináris formátuma. Az eredeti .mlmodel külön kerül tárolásra a verziókezelő rendszerben.
Igen, az mlmodelc támogatja az INT8 kvantálást a Core ML Tools segítségével. A fordítás során a súlyok FP32-ről INT8-ra alakulnak, ami négszeres méretcsökkenést és akár 2-szeres gyorsítást biztosít az ANE-n.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is