mlmodelc: co to jest, format skompilowanego modelu i kompilacja

Autor: IT Sectr Opublikowano: 2026-07-17 Czas czytania: 7 min

mlmodelc to skompilowana wersja modelu Core ML, zoptymalizowana do wykonywania na urządzeniach Apple z systemami iOS, macOS i iPadOS. W przeciwieństwie do oryginalnego formatu .mlmodel, plik mlmodelc przechodzi etap kompilacji, podczas którego model jest przekształcany na wewnętrzną reprezentację zrozumiałą dla Core ML Runtime. Według Apple Developer Documentation, 2025, kompilacja jest wykonywana automatycznie podczas budowania aplikacji w Xcode, a także na urządzeniu po pobraniu modelu z sieci. mlmodelc zapewnia szybsze uruchamianie i mniejsze zużycie pamięci w porównaniu z formatem interpretowanym.

Najważniejsze

  • mlmodelc — skompilowany format modelu Core ML do wykonywania na urządzeniach Apple.
  • Kompilacja .mlmodel do mlmodelc jest wykonywana przez Xcode podczas budowania aplikacji lub na urządzeniu przez MLModel.compile().
  • Format obejmuje Model Description, binarny graf obliczeń w MIL i plik weights.bin.
  • mlmodelc zapewnia przyspieszenie uruchamiania o 30–60% dzięki wstępnej optymalizacji grafu.
  • Obsługuje Apple Neural Engine, GPU i CPU przez Core ML Runtime.

Czym jest mlmodelc i czym różni się od .mlmodel

mlmodelc — to skompilowany binarny format modelu Core ML, przeznaczony do bezpośredniego wykonywania na urządzeniach Apple. Oryginalny format .mlmodel to pakiet zawierający opis modelu w protobuf, wagi w postaci tablic i metadane w JSON. Podczas kompilacji ta struktura jest przekształcana w kompaktową reprezentację binarną, zoptymalizowaną pod konkretną platformę sprzętową.

Kluczowa różnica mlmodelc — brak etapu interpretacji podczas inferencji. Core ML Runtime nie parsuje schematu protobuf ani nie buduje grafu obliczeń dynamicznie — wszystkie te kroki są wykonane na etapie kompilacji. Daje to oszczędność czasu pierwszego uruchomienia modelu od 30% do 60% w zależności od złożoności architektury.

Według sesji WWDC 2023 „Core ML Tools i optymalizacja modeli”, kompilacja obejmuje optymalizację operacji zmiennoprzecinkowych, łączenie kolejnych warstw i konwersję do formatu zrozumiałego dla Apple Neural Engine. Deweloper nie musi zarządzać tym procesem ręcznie — Xcode wykonuje kompilację automatycznie na etapie budowania.

Porównanie mlmodelc i .mlmodel

Cecha.mlmodelmlmodelc
Format przechowywaniaPakiet (protobuf + wagi)Binarny, platformowo-specyficzny
Gotowość do wykonaniaWymaga kompilacjiGotowy do inferencji
Rozmiar na dyskuOryginalny rozmiarO 10–20% mniejszy
Szybkość pierwszego uruchomieniaWolniejszy (parsowanie + kompilacja)Natychmiastowe uruchomienie
Wsparcie ANEWymaga dodatkowej optymalizacjiAutomatyczne

Jak działa proces kompilacji mlmodelc

Kompilacja modelu do mlmodelc przechodzi przez trzy etapy. W pierwszym etapie Core ML Tools odczytuje specyfikację protobuf .mlmodel i buduje wewnętrzny graf obliczeń w formacie MIL (Model Intermediate Language). Narzędzie sprawdza zgodność każdej operacji z docelowym urządzeniem i oznacza nieobsługiwane warstwy do wykonania na CPU.

W drugim etapie wykonywana jest optymalizacja grafu: łączenie kolejnych warstw (convolution + batch norm → fused convolution), usuwanie martwych węzłów, kwantyzacja wag z FP32 do FP16 lub INT8. Według Apple Engineering Report „Core ML Optimization Pipeline” (2024), łączenie warstw redukuje liczbę operacji inferencji do 40%.

Trzeci etap — generowanie reprezentacji binarnej. Zoptymalizowany graf jest serializowany do zastrzeżonego formatu Core ML Runtime. Wagi są zapisywane z wyrównaniem pod linie pamięci podręcznej procesora, a metadane — w osobnym indeksie dla szybkiego dostępu. Wynik — folder z rozszerzeniem .mlmodelc, gotowy do dołączenia do pakietu aplikacji.

Wewnętrzna architektura mlmodelc

Struktura mlmodelc obejmuje trzy kluczowe komponenty. Model Description — metadane modelu: typy wejść i wyjść, ich wymiary, nazwy tensorów, parametry wstępnego przetwarzania. Ta sekcja jest przechowywana w formacie podobnym do JSON dla zgodności z API Core ML.

Program — binarna reprezentacja grafu obliczeń w wewnętrznym języku MIL. Apple używa MIL jako pośredniej reprezentacji, podobnej do MLIR w TensorFlow lub ONNX. Program MIL składa się z operacji, z których każda ma typ, wejściowe i wyjściowe tensory oraz atrybuty. Format MIL jest zoptymalizowany do efektywnego wykonywania na Apple Neural Engine.

Trzeci komponent — weights.bin — plik zawierający wszystkie wytrenowane wagi modelu. Wagi są przechowywane z wyrównaniem do 64 bajtów dla optymalnego ładowania do pamięci podręcznej. Jeśli podczas kompilacji określono kwantyzację, wagi są zapisywane w FP16 lub INT8, co zmniejsza rozmiar pliku i przyspiesza inferencję na układach Apple A17 i M4 ze sprzętowym wsparciem tych formatów.

Sposoby wdrażania mlmodelc w aplikacji

Apple obsługuje trzy sposoby dołączania mlmodelc do aplikacji. Pierwszy — statyczne dołączenie do pakietu: plik mlmodelc jest dodawany do projektu Xcode i trafia do .app podczas budowania. Ten sposób jest optymalny dla małych modeli do 100 MB i nie wymaga dostępu sieciowego do pierwszego uruchomienia.

Drugi sposób — pobranie z sieci z kompilacją na urządzeniu przez MLModel.compile(at:). Deweloper pobiera .mlmodel, umieszcza go w katalogu tymczasowym i wywołuje kompilator Core ML. Wynik — mlmodelc, który można buforować do kolejnych uruchomień. Według Apple HIG dla Core ML, to podejście jest zalecane dla modeli o rozmiarze powyżej 100 MB oraz do dynamicznej aktualizacji bez publikowania nowej wersji aplikacji.

Trzeci sposób — On-Demand Resources dla modeli ładowanych na żądanie. Apple ODR pozwala przechowywać mlmodelc w chmurze i ładować tylko w razie potrzeby. To popularny scenariusz dla aplikacji z dziesiątkami modeli, gdzie użytkownik używa tylko kilku.

Asynchroniczna kompilacja na urządzeniu

Przy pobieraniu modelu z sieci ważne jest uwzględnienie czasu kompilacji. MLModel.compile(at:) jest wykonywany synchronicznie i może blokować interfejs na urządzeniach z A12 i starszych do 5–10 sekund dla modeli średniej wielkości. Zaleca się wykonywanie kompilacji w tle i informowanie użytkownika o procesie za pomocą wskaźnika ładowania.

Zalety wydajnościowe mlmodelc

Główną zaletą mlmodelc jest szybkość ładowania modelu. Według Apple Performance Benchmarks (2024), model ResNet-50 o rozmiarze 100 MB ładuje się o 58% szybciej w formacie mlmodelc w porównaniu z .mlmodel. Jest to szczególnie ważne dla aplikacji pracujących z wieloma modelami sekwencyjnie.

Drugą zaletą jest zmniejszenie szczytowego zużycia pamięci. Podczas ładowania .mlmodel Core ML Runtime przydziela bufor do parsowania protobuf i drugi bufor do kompilacji grafu. mlmodelc uruchamia się bezpośrednio, pomijając te etapy. Szczytowe zużycie pamięci spada o 30–45% dla modeli widzenia komputerowego.

Trzecią — optymalizacja sprzętowa. Kompilator coremlc analizuje docelowe urządzenie na etapie budowania i wybiera optymalny podział operacji między ANE, GPU i CPU. Jeśli kompilacja jest uniwersalna, kompilacja jest przenoszona na urządzenie przy pierwszym uruchomieniu, a wynik jest buforowany do kolejnych sesji.

Przykłady pracy z mlmodelc w kodzie Swift

Przykład ładowania skompilowanego modelu z pakietu aplikacji. Wystarczy wskazać URL modelu i wywołać MLModel.load(contentsOf:). Core ML Runtime automatycznie określi format mlmodelc po rozszerzeniu i wykona inicjalizację.

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)

Przykład kompilacji .mlmodel na urządzeniu z późniejszym buforowaniem. Użyj MLModel.compile(at:) aby uzyskać tymczasową ścieżkę do mlmodelc, a następnie skopiuj ją do katalogu pamięci podręcznej.

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)

Często zadawane pytania

Czy można używać mlmodelc na symulatorze iOS?

Tak, mlmodelc działa na symulatorze iOS, ale bez przyspieszenia ANE, ponieważ Neural Engine to komponent sprzętowy, którego brak na Macu. Inferencja jest wykonywana na CPU przez Accelerate framework.

Czym różni się mlmodelc od .mlpackage?

mlmodelc — skompilowany format do wykonywania. .mlpackage — kontener dla Xcode 15+, łączący oryginalny model i kilka konfiguracji. .mlpackage jest kompilowany do mlmodelc podczas budowania aplikacji.

Jak sprawdzić, czy model jest już skompilowany do mlmodelc?

Sprawdź rozszerzenie pliku: .mlmodelc. Jeśli model ma rozszerzenie .mlmodel, nie jest skompilowany. Po budowaniu w Xcode gotowy mlmodelc znajduje się w folderze DerivedData aplikacji.

Czy można zdekompilować mlmodelc z powrotem do .mlmodel?

Nie, nie istnieje dekompilacja zwrotna. mlmodelc to binarny zastrzeżony format Apple. Oryginalny .mlmodel jest przechowywany osobno w systemie kontroli wersji.

Czy mlmodelc obsługuje skwantowane modele w INT8?

Tak, mlmodelc obsługuje kwantyzację INT8 przez Core ML Tools. Podczas kompilacji wagi są przekształcane z FP32 na INT8, co daje czterokrotne zmniejszenie rozmiaru i do 2x przyspieszenie na ANE.

Podsumowanie

  • mlmodelc — skompilowany format modelu Core ML, zoptymalizowany do wykonywania na urządzeniach Apple.
  • Kompilacja obejmuje optymalizację grafu, łączenie warstw i kwantyzację wag pod docelową platformę.
  • Format zapewnia zmniejszenie czasu ładowania o 30–60% i zmniejszenie szczytowego zużycia pamięci o 30–45%.
  • Wdrażanie możliwe przez statyczny pakiet, pobranie z sieci z kompilacją lub On-Demand Resources.
  • mlmodelc obsługuje wykonywanie na Apple Neural Engine, GPU i CPU przez Core ML Runtime.
  • Do ładowania używaj MLModel.load(contentsOf:) w tle z obsługą błędów.
  • Monitorowanie wydajności modeli odbywa się przez Instruments z szablonem Core ML.

Opracujemy aplikację mobilną pod klucz

IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.

Omów projekt

Przeczytaj również