mlmodel — co to jest, struktura pliku i konwersja do mlpackage

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

mlmodel — to format pliku modelu uczenia maszynowego dla frameworka Core ML od Apple, używany do przechowywania wytrenowanych modeli przed pojawieniem się formatu .mlpackage. Plik .mlmodel był binarnym pakietem w formacie protobuf, zawierającym opis modelu, wagi sieci neuronowej, metadane oraz informacje o wejściach/wyjściach. Według Apple Core ML Release Notes (2025), począwszy od Xcode 13 i Core ML 4 stary format .mlmodel został uznany za przestarzały na rzecz .mlpackage, który zapewnia lepsze wersjonowanie i czytelność metadanych.

Najważniejsze

  • mlmodel — przestarzały format pliku Core ML do przechowywania wytrenowanych modeli ML w binarnym formacie protobuf.
  • Zawierał wagi modelu, metadane, opis danych wejściowych/wyjściowych oraz konfigurację pre- i postprocessingu.
  • Plik .mlmodel był automatycznie konwertowany przez Xcode na .mlpackage podczas kompilacji aplikacji.
  • Począwszy od Xcode 13 (2021) Apple zaleca używanie formatu .mlpackage jako bardziej nowoczesnego i wygodnego do wersjonowania.
  • Konwersja .mlmodel na .mlpackage jest wykonywana przez Xcode Model Compiler lub skryptem coremltools w Pythonie.

Co to jest mlmodel?

mlmodel — to binarny format pliku, przedstawiony przez Apple w 2017 roku wraz z frameworkiem Core ML na WWDC 2017. Format opiera się na technologii serializacji protobuf (Protocol Buffers) od Google, co zapewniało kompaktowy rozmiar (wagi modeli w Float32) i efektywne ładowanie do pamięci. Plik .mlmodel miał rozszerzenie .mlmodel i typ MIME application/x-Apple-mlmodel.

Historia formatu

Format .mlmodel był jedynym formatem Core ML od 2017 do 2021 roku. W tym czasie przez coremltools przekonwertowano miliony modeli z TensorFlow, Keras, PyTorch, Caffe, scikit-learn i innych bibliotek. Ograniczenia formatu stały się oczywiste wraz ze wzrostem złożoności modeli: protobuf nie obsługuje wygodnego wersjonowania, metadane są przechowywane w formacie binarnym (nieczytelne w git diff), a dodawanie nowych pól wymagało zmiany schematu protobuf.

Główne cechy

Plik mlmodel przechowuje model w kompaktowej reprezentacji binarnej. Rozmiar waha się od kilkudziesięciu kilobajtów (regresja liniowa) do gigabajtów (sieci neuronowe z milionami parametrów). Format obsługuje wszystkie typy modeli Core ML: sieci neuronowe (NeuralNetwork, NeuralNetworkClassifier, NeuralNetworkRegressor), modele ensemble (TreeEnsemble, GradientBoosting), regresje (LinearRegression, SVM) i potoki pre/postprocessingu (OneHotEncoder, FeatureVectorizer).

Cechamlmodel
FormatBinarny (protobuf)
CzytelnośćNieczytelny (tylko przez coremltools)
WersjonowanieNie (jeden plik binarny)
MetadaneW schemacie protobuf
Git-friendlyNie (binary diff nieefektywny)

Struktura pliku mlmodel

Wewnętrzna struktura pliku .mlmodel jest określona przez schemat protobuf opisany w frameworku CoreML.framework. Główne sekcje: modelDescription — opis wejść, wyjść i metadanych modelu; modelParameters — konkretne parametry typu modelu (wagi sieci neuronowej, tree ensembles, współczynniki regresji); preprocessing — konfiguracja preprocessingu (skalowanie, normalizacja obrazów); postprocessing — postprocessing (softmax, argmax, wartości progowe).

Sekcja modelDescription

Sekcja modelDescription (MLModelDescription) zawiera nazwę modelu, autora, wersję, opis, licencję, a także szczegółowy opis wszystkich parametrów wejściowych i wyjściowych: nazwę, typ danych (Float32, Int32, String, Image), wymiarowość, format obrazu (BGR, RGB), opcjonalne ograniczenia (zakres wartości). Ta sekcja była używana przez Xcode do generowania klasy Swift modelu z typowanymi wejściami i wyjściami.

Sekcja modelParameters

Sekcja modelParameters zawiera rzeczywiste wagi i parametry wytrenowanego modelu. Dla sieci neuronowych jest to tablica warstw (NeuralNetworkLayer), z których każda zawiera typ (convolution, pooling, activation, innerProduct), wagi (weights), przesunięcia (bias), parametry (kernelSize, stride, padding). Dla modeli ensemble — drzewa decyzyjne i ich węzły. Dla regresji — współczynniki i intercept. Wagi są przechowywane w Float32 (4 bajty na wartość).

Sekcja preprocessing

Sekcja preprocessing opisuje kroki preprocessingu danych wejściowych przed podaniem do modelu. Core ML obsługuje: skalowanie (Scaler) — normalizacja przez średnią i odchylenie standardowe; przekształcanie obrazów (ImagePreprocessing) — zmiana rozmiaru, crop, normalizacja kanałów kolorów, konwersja BGR→RGB; OneHotEncoder — kodowanie cech kategorycznych; FeatureVectorizer — łączenie wielu cech w jeden wektor.

mlmodel vs mlpackage: analiza porównawcza

mlpackage — to format nowej generacji dla modeli Core ML, przedstawiony na WWDC 2021. W przeciwieństwie do pojedynczego pliku binarnego .mlmodel, .mlpackage jest katalogiem (pakietem) o strukturze plikowej: zawartość modelu jest przechowywana w postaci czytelnych plików JSON (metadane, konfiguracja warstw) i oddzielnych plików binarnych dla wag. To radykalnie zmienia podejście do przechowywania, wersjonowania i współpracy nad modelami ML.

Parametrmlmodelmlpackage
TypPojedynczy plik binarnyKatalog (pakiet)
MetadaneBinarny protobufJSON (czytelny)
Git diffBezużytecznyDziała (oprócz wag)
WersjonowanieRęczneAutomatyczne w JSON
Custom layersNieObsługuje
StatusPrzestarzałyAktualny

Struktura plikowa mlpackage

Pakiet .mlpackage zawiera: ModelCI/ — katalog z wersjonowaną konfiguracją modelu; Data/ — binarne pliki wag (SharedWeights.bin); Metadata.json — nazwa, autor, opis, wersja modelu, data utworzenia; Model.json — opis architektury modelu, wejść/wyjść, typów warstw; Manifests/ — manifesty wersji dla CI/CD. Taka struktura pozwala efektywnie pracować z modelem w git: metadane i konfiguracja są śledzone, a binarne wagi mogą korzystać z Git LFS.

Jak przekonwertować mlmodel na mlpackage

Konwersja .mlmodel na .mlpackage jest wykonywana na dwa sposoby: automatycznie podczas kompilacji w Xcode (Xcode sam konwertuje .mlmodel na .mlpackage w procesie kompilacji) lub ręcznie przez coremltools w Pythonie. Ręczna konwersja daje większą kontrolę i pozwala zaktualizować metadane modelu, dodać opis i ustawić autora. Po konwersji model jest zapisywany w .mlpackage i może być używany zamiast oryginalnego .mlmodel.

python
import coremltools as ct

model = ct.models.MLModel(
    "OldModel.mlmodel"
)
model.author = "IT Sectr"
model.short_description = "Converted from mlmodel"
model.version = "2.0"
model.save("NewModel.mlpackage")

Automatyczna konwersja w Xcode

Po dodaniu pliku .mlmodel do projektu Xcode system automatycznie określa jego format i podczas kompilacji (build) uruchamia Model Compiler — narzędzie, które transluje .mlmodel na .mlpackage. Skompilowany .mlpackage jest umieszczany w katalogu kompilacji (DerivedData). Deweloper nie zauważa tego procesu — wszystkie API Core ML działają z modelem jednolicie niezależnie od oryginalnego formatu. Jednak Xcode wyświetla ostrzeżenie przy dodawaniu .mlmodel z zaleceniem używania .mlpackage.

Weryfikacja po konwersji

Po konwersji należy upewnić się, że model zachował dokładność. coremltools udostępnia narzędzie ct.utils.compare_models() do porównywania przewidywań oryginalnego i przekonwertowanego modelu na tych samych danych wejściowych. Dopuszczalna różnica — nie więcej niż 1e-5 dla Float32. Jeśli różnica jest większa, możliwe, że model zawierał custom layers lub operacje, które nie są obsługiwane w nowym formacie.

Wsteczna kompatybilność i wsparcie

Wsteczna kompatybilność .mlmodel jest zapewniona na wszystkich aktualnych wersjach iOS i macOS. Aplikacja skompilowana z Xcode 12 lub nowszym automatycznie otrzymuje wersję .mlpackage modelu, nawet jeśli oryginalny plik był .mlmodel. Jednak począwszy od Xcode 15 (2023) Apple ogłosiło, że nowe typy modeli (dynamiczne sieci neuronowe, uczenie nadzorowane) będą dostępne tylko w formacie .mlpackage, a .mlmodel nie będzie otrzymywać nowych funkcji.

Wsparcie w iOS 18+ i macOS 15+

Począwszy od iOS 18 i macOS 15 (Sequoia), Core ML nie obsługuje już bezpośredniego ładowania .mlmodel. Wszystkie modele .mlmodel muszą być wcześniej przekonwertowane na .mlpackage lub zostanie użyty Xcode Model Compiler do konwersji podczas kompilacji. Systemowe API MLModel(contentsOf:) wciąż może otwierać pliki .mlmodel, ale tylko jeśli zostały przekonwertowane na .mlpackage na etapie kompilacji projektu.

Terminy zakończenia wsparcia

Apple oficjalnie nie ogłosiło daty całkowitego usunięcia wsparcia dla .mlmodel, ale kontekst historyczny wskazuje na 3-4 lata okresu przejściowego. Format .mlmodel został przedstawiony w 2017, .mlpackage — w 2021. Ostrzeżenia o deprecjacji pojawiły się w Xcode 13 (2021). Przez analogię do aplikacji 32-bitowych (iOS 11 zakończył wsparcie) można oczekiwać, że pełne wsparcie dla .mlmodel zostanie zakończone w iOS 20-21 (2026-2027).

Kiedy mlmodel jest nadal aktualny

Pomimo przestarzałości formatu, .mlmodel wciąż występuje w istniejących projektach i niektórych scenariuszach. Deweloperzy pracujący z Core ML powinni rozumieć, kiedy .mlmodel pozostaje częścią procesu pracy i jak z nim prawidłowo współdziałać bez utraty wydajności.

Dziedzictwo — stare projekty

Istniejące projekty rozpoczęte przed 2021 rokiem mogą zawierać dziesiątki modeli .mlmodel załadowanych przez Swift Package Manager lub bezpośrednio w Xcode. Migracja wszystkich modeli do .mlpackage może być czasochłonna, szczególnie jeśli modele zostały wygenerowane starszą wersją coremltools (przed 5.0). Apple zaleca przeprowadzanie migracji stopniowo, po jednym modelu, przy najbliższej aktualizacji funkcjonalności.

Pipeline CI/CD z coremltools

Niektóre istniejące pipeline'y CI/CD używają coremltools w wersji 4.x do automatycznej konwersji modeli, która domyślnie eksportuje do .mlmodel. Aktualizacja coremltools do wersji 5+ zmienia format eksportu na .mlpackage, co może wymagać aktualizacji skryptów i testów. W takich przypadkach zespoły czasowo pozostawiają eksport do .mlmodel, planując migrację na późniejszy termin.

Biblioteki i Pods

Biblioteki zewnętrzne i CocoaPods opublikowane przed 2021 rokiem mogą zawierać modele w formacie .mlmodel. Na przykład biblioteki do rozpoznawania twarzy, filtrowania obrazów lub filtrów AR. Deweloperzy korzystający z takich bibliotek mogą nadal pracować z .mlmodel, ponieważ Xcode automatycznie konwertuje je podczas kompilacji. Zaleca się jednak sprawdzenie, czy autor nie wydał aktualizacji z .mlpackage.

Typowe problemy z mlmodel

Podczas pracy z przestarzałym formatem .mlmodel deweloperzy napotykają kilka typowych problemów. Znajomość tych problemów i ich rozwiązań pozwala uniknąć straty czasu przy integracji modeli Core ML w nowoczesnych projektach. Omówmy najważniejsze.

Ostrzeżenie Xcode o deprecjacji

Po dodaniu .mlmodel w Xcode 13+ pojawia się ostrzeżenie: „'mlmodel' format is deprecated. Use 'mlpackage' instead.” Ostrzeżenie nie blokuje kompilacji, ale wskazuje na konieczność migracji. Aby usunąć ostrzeżenie, przekonwertuj model przez coremltools lub zaktualizuj narzędzie do tworzenia modeli.

Błąd „Model file is not valid”

Plik .mlmodel utworzony starszą wersją coremltools (przed 3.0) może nie otwierać się na nowych urządzeniach z iOS 16+ z powodu zmian w kodekach protobuf. Rozwiązanie — załaduj model przez Python: model = ct.models.MLModel(„old.mlmodel”), następnie zapisz go ponownie: model.save(„fixed.mlmodel”), lub lepiej od razu przekonwertuj na .mlpackage.

Problemy z warstwami niestandardowymi

Modele .mlmodel zawierające custom layers (niestandardowe warstwy sieci neuronowej) nie poddają się bezpośredniej konwersji na .mlpackage bez dodatkowych kroków. Należy najpierw załadować model w coremltools, sprawdzić, które warstwy nie są obsługiwane przez nowy format, i zaimplementować je dla .mlpackage. Jeśli niestandardowa warstwa nie jest krytyczna, można spróbować usunąć ją z modelu.

Często zadawane pytania

Co to jest mlmodel?

mlmodel — to przestarzały binarny format pliku do przechowywania modeli Core ML, używany od 2017 do 2021 roku. Oparty na serializacji protobuf, zawiera wagi modelu, metadane i opis danych wejściowych/wyjściowych w jednym pliku binarnym z rozszerzeniem .mlmodel.

Czym mlmodel różni się od mlpackage?

mlmodel — to pojedynczy plik binarny, nieczytelny w git i nieobsługujący wersjonowania. mlpackage — to katalog (pakiet) z metadanymi JSON, czytelny w git i obsługujący wersjonowanie. mlpackage obsługuje również custom layers i automatycznie generuje manifesty wersji. Apple zaleca mlpackage dla wszystkich nowych projektów.

Jak otworzyć plik mlmodel?

Plik .mlmodel można otworzyć na trzy sposoby: przez Xcode (dodaj do projektu — model wyświetla się w edytorze z metadanymi), przez coremltools w Pythonie (model = ct.models.MLModel(„model.mlmodel“)), lub przez Netron — darmowy wizualizator modeli obsługujący Core ML, ONNX, TensorFlow i inne formaty.

Czy trzeba konwertować mlmodel na mlpackage?

Zalecane, ale nie konieczne natychmiast. Xcode automatycznie konwertuje .mlmodel na .mlpackage podczas kompilacji projektu. Jednak ostrzeżenie Xcode o deprecjacji będzie się pojawiać, a nowe funkcje Core ML (sieci dynamiczne, iOS 18+) nie będą dostępne dla .mlmodel. Konwertuj modele przy najbliższej aktualizacji funkcjonalności.

Czy mlmodel jest obsługiwany na iOS 18?

iOS 18+ obsługuje .mlmodel tylko w trybie wstecznej kompatybilności: jeśli model został dodany jako .mlmodel w projekcie Xcode, Xcode automatycznie konwertuje go na .mlpackage podczas kompilacji. Bezpośrednie ładowanie .mlmodel przez MLModel(contentsOf:) na urządzeniach z iOS 18+ nie jest gwarantowane — Apple zaleca przechowywanie modeli w .mlpackage.

Podsumowanie

  • mlmodel — przestarzały format binarny (protobuf) do przechowywania modeli Core ML, używany od 2017 do 2021 roku.
  • Zawiera trzy sekcje: modelDescription (metadane i opis wejść/wyjść), modelParameters (wagi i parametry) oraz preprocessing (konfiguracja preprocessingu).
  • Na miejsce .mlmodel przyszedł format .mlpackage — katalog z metadanymi JSON, czytelnymi w git diff i obsługującymi wersjonowanie.
  • Konwersja .mlmodel na .mlpackage jest wykonywana przez Xcode (automatycznie podczas kompilacji) lub przez coremltools w Pythonie (model = ct.models.MLModel(„old.mlmodel”)).
  • iOS 18+ obsługuje .mlmodel tylko przez automatyczną konwersję na .mlpackage na etapie kompilacji Xcode.
  • Główne problemy .mlmodel: ostrzeżenie Xcode o deprecjacji, błędy protobuf na nowych iOS i trudności z custom layers.
  • Apple zaleca migrację wszystkich istniejących .mlmodel do .mlpackage przy najbliższej aktualizacji aplikacji.

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ż