mlmodelc: mi ez, a lefordított modell formátuma és a fordítás

Szerző: IT Sectr Megjelenés: 2026-07-17 Olvasási idő: 7 perc

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 formátuma Apple eszközökön történő végrehajtáshoz.
  • A .mlmodel mlmodelc-vé fordítását az Xcode végzi az alkalmazás építésekor vagy az eszközön az MLModel.compile()-n keresztül.
  • A formátum tartalmazza a Model Description-t, a bináris számítási gráfot MIL-ben és a weights.bin fájlt.
  • Az mlmodelc 30–60%-os indítási gyorsulást biztosít a gráf előzetes optimalizálásának köszönhetően.
  • Támogatja az Apple Neural Engine-t, a GPU-t és a CPU-t a Core ML Runtime-on keresztül.

Mi az mlmodelc és miben különbözik a .mlmodel-től

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.

Az mlmodelc és a .mlmodel összehasonlítása

Jellemző.mlmodelmlmodelc
Tárolási formátumCsomag (protobuf + súlyok)Bináris, platform-specifikus
Végrehajtásra készségFordítást igényelKész az inferenciára
Méret a lemezenEredeti méret10–20%-kal kisebb
Első indítás sebességeLassabb (elemzés + fordítás)Azonnali indítás
ANE támogatásTovábbi optimalizálást igényelAutomatikus

Hogyan működik az mlmodelc fordítási folyamata

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 belső architektúrája

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 mlmodelc alkalmazásba történő telepítésének módszerei

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.

Aszinkron fordítás az eszközön

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 teljesítménybeli előnyei

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éldák az mlmodelc-vel való munkára Swift kódban

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.

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)

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.

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)

Gyakran Ismételt Kérdések

Használható az mlmodelc iOS szimulátoron?

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.

Miben különbözik az mlmodelc a .mlpackage-től?

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.

Hogyan ellenőrizhető, hogy a modell már mlmodelc-vé van-e fordítva?

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ó.

Visszafordítható-e az mlmodelc .mlmodel formátumba?

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.

Támogatja az mlmodelc a kvantált modelleket INT8-ban?

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

  • mlmodelc — a Core ML modell lefordított formátuma, optimalizálva Apple eszközökön történő végrehajtásra.
  • A fordítás magában foglalja a gráf optimalizálását, a rétegek összevonását és a súlyok kvantálását a célplatformhoz.
  • A formátum 30–60%-os betöltési idő csökkenést és 30–45%-os csúcs memóriahasználat csökkenést biztosít.
  • A telepítés történhet statikus csomag, hálózatról történő letöltés fordítással vagy On-Demand Resources segítségével.
  • Az mlmodelc támogatja a végrehajtást Apple Neural Engine-en, GPU-n és CPU-n a Core ML Runtime-on keresztül.
  • A betöltéshez használja az MLModel.load(contentsOf:) függvényt háttérben hiba kezeléssel.
  • A modellek teljesítményfigyelése az Instruments segítségével történik a Core ML sablon használatával.

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.

Projekt megbeszélése

Olvassa el is