Core ML — to framework uczenia maszynowego od Apple, umożliwiający integrację wstępnie wytrenowanych modeli ML bezpośrednio w aplikacjach iOS, iPadOS, macOS, watchOS i tvOS. Framework wspiera sieci neuronowe, drzewa decyzyjne, regresje liniowe i metody ensemble, a także konwersję modeli z TensorFlow, PyTorch, Keras i ONNX do własnego formatu Apple. Według Apple Machine Learning Research (2025), Core ML wykonuje inferencję w całości na urządzeniu, zapewniając poufność danych i opóźnienie poniżej 10 milisekund dla większości modeli.
Najważniejsze
Core ML — to kluczowy komponent ekosystemu uczenia maszynowego Apple, zaprezentowany na WWDC 2017. Przed Core ML programiści iOS używali bibliotek stron trzecich (TensorFlow Mobile, Caffe2) lub własnych rozwiązań do uruchamiania modeli ML na urządzeniu. Core ML zapewnił jednolity, ujednolicony interfejs dla wszystkich typów modeli — od klasycznych regresji po głębokie sieci neuronowe — i przejął niskopoziomową optymalizację pod konkretne urządzenie.
Pierwsza wersja Core ML (2017) obsługiwała tylko modele statyczne o stałym rozmiarze danych wejściowych. Core ML 2 (2018) dodał obsługę batch prediction i aktualizacji modeli „na gorąco”. Core ML 3 (2019) przyniósł uczenie na urządzeniu i obsługę dziesiątków nowych warstw sieci neuronowych. Core ML 4 (2021) wprowadził obsługę modeli z wieloma wyjściami i ulepszone przetwarzanie obrazów. Core ML 5 (2024) dodał obsługę dynamicznych sieci neuronowych i uczenia nadzorowanego na urządzeniu z wykorzystaniem nowych warstw ML.
Wykonywanie uczenia maszynowego na urządzeniu daje trzy kluczowe zalety: poufność — dane nie opuszczają urządzenia (spełnia wymagania GDPR i HIPAA), szybkość — inferencja wykonywana jest w milisekundach bez opóźnienia na transmisję danych przez sieć, dostępność offline — model działa bez połączenia z internetem. Według Apple Privacy Report (2025), ponad 90% inferencji ML na platformach Apple wykonywanych jest na urządzeniu dzięki Core ML.
Architektura Core ML jest zbudowana na zasadzie wielowarstwowej: na górnym poziomie — API dla programisty (MLModel, MLFeatureProvider, MLPredictionOptions), na środkowym — model w formacie .mlpackage, na dolnym — silniki obliczeniowe: Apple Neural Engine (ANE), GPU (Metal Shaders) i CPU (BNNS, Accelerate framework). Core ML automatycznie wybiera najlepszy silnik w zależności od modelu i sprzętu urządzenia.
| Silnik | Urządzenia | Wydajność |
|---|---|---|
| Neural Engine | iPhone Xs+, iPad A12+, Mac M1+ | Maksymalna (TOPS) |
| GPU (Metal) | Wszystkie urządzenia Apple | Wysoka (obliczenia równoległe) |
| CPU (BNNS) | Wszystkie urządzenia Apple | Podstawowa (zgodność) |
Neural Engine (ANE) — to wyspecjalizowany neuroprocesor wbudowany w chipy Apple A12+ i M1+. ANE jest zoptymalizowany do wykonywania operacji konwolucyjnych sieci neuronowych (CNN) i mnożenia macierzy z wydajnością do 15.8 TOPS na A17 Pro i 38 TOPS na M4. Core ML automatycznie określa, czy model można wykonać na ANE, a jeśli tak — ładuje go tam. Jeśli model zawiera operacje nieobsługiwane przez ANE, Core ML rozdziela obliczenia między GPU a CPU.
Do obliczeń na GPU Core ML używa Metal Performance Shaders Graph (MPSGraph), frameworku do budowania i wykonywania grafów obliczeniowych na GPU. MPSGraph pobiera graf sieci neuronowej z Core ML i kompiluje go do Metal Shaders, zoptymalizowanych pod konkretną architekturę GPU (7-rdzeniowy A17 GPU lub 40-rdzeniowy M4 Ultra GPU). Automatyczne optymalizacje MPSGraph obejmują łączenie warstw, eliminację zbędnych operacji i wybór optymalnego formatu danych.
Core ML obsługuje wszystkie główne typy modeli uczenia maszynowego, podzielone na trzy kategorie: sieci neuronowe (konwolucyjne CNN, rekurencyjne RNN/LSTM, transformery), modele ensemble (Random Forest, Gradient Boosting, XGBoost, Decision Trees) i modele regresyjne (regresja liniowa, SVM, CRF). Każdy typ modelu ma swój podprotokół MLModelType, a Core ML automatycznie wybiera odpowiedni silnik i format wykonania.
Core ML obsługuje ponad 150 typów warstw sieci neuronowych: Convolution (1D/2D/3D), BatchNormalization, Pooling (Max/Average), Activation (ReLU, Sigmoid, Tanh, LeakyReLU, PReLU), Recurrent (LSTM/GRU/SimpleRNN), Transformers (MultiHeadAttention, LayerNorm), warstwy specyficzne dla Metal. Dla nieobsługiwanych warstw Core ML zapewnia mechanizm custom layer — możliwość napisania implementacji warstwy w Metal Shading Language lub Swift.
let model = try MLModel(contentsOf: modelURL)
let input = try MLMultiArray(shape: [1, 224, 224, 3], dataType: .float32)
let prediction = try model.prediction(from: input)
Do 2021 roku Core ML używał formatu .mlmodel — pliku binarnego zawierającego wszystkie wagi i metadane modelu. Od Xcode 13 i Core ML 4, Apple wprowadziła nowy format .mlpackage — strukturę pakietową opartą na katalogu, zawierającą model, metadane, opis wejść/wyjść oraz pliki pre- i post-processingu w formacie JSON. mlpackage obsługuje wersjonowanie git, co ułatwia pracę zespołową. Konwersja .mlmodel do .mlpackage jest wykonywana przez Xcode Model Compiler lub skrypt coremltools w Pythonie.
Konwersja modeli z frameworków stron trzecich do Core ML jest wykonywana za pomocą biblioteki coremltools w Pythonie. coremltools obsługuje import modeli z TensorFlow 1.x/2.x (SavedModel, PB, HDF5), PyTorch (TorchScript, modele traced/scripted), Keras (H5), ONNX oraz utworzonych za pomocą Create ML. Standardowy potok konwersji obejmuje trzy kroki: załadowanie modelu w oryginalnym formacie, konwersję do MIL (Model Intermediate Language) — wewnętrznej reprezentacji Core ML, i eksport do .mlpackage.
import coremltools as ct
model = ct.converters.pytorch.convert(
source = "model.pt",
inputs = [ct.TensorType(shape=(1, 3, 224, 224))]
)
model.author = "IT Sectr"
model.short_description = "Image classifier"
model.save("MyModel.mlpackage")
Po konwersji należy sprawdzić dokładność modelu, porównując predykcje oryginalnego modelu i przekonwertowanego modelu Core ML na tych samych danych. Dopuszczalna różnica — nie więcej niż 1e-3 (0,1%) dla Float32 i 1e-2 (1%) dla Float16/Int8. coremltools udostępnia narzędzie ct.utils.compare_models() do automatycznego porównania. Jeśli różnica przekracza normę, problem może leżeć w nieobsługiwanych operacjach — należy je zastąpić custom layers lub uprościć model.
Optymalizacja modelu Core ML to proces zmniejszania rozmiaru modelu i zwiększania szybkości inferencji bez znaczącej utraty dokładności. Apple udostępnia kilka narzędzi optymalizacji wbudowanych w coremltools i Xcode: kwantyzacja (zmniejszenie precyzji wag), pruning (usuwanie mało znaczących neuronów), paleontologia (usuwanie zbędnych warstw) i łączenie warstw (fusion) w celu zmniejszenia grafu obliczeniowego.
Kwantyzacja zmniejsza rozmiar modelu około 2 razy (Float16) lub 4 razy (Int8) w porównaniu do Float32. Core ML obsługuje trzy tryby kwantyzacji: kwantyzacja po treningu (PTQ — Post-Training Quantization) z zestawem kalibracyjnym, podczas konwersji przez coremltools oraz uczenie z uwzględnieniem kwantyzacji (QAT). Dla większości modeli wizji komputerowej PTQ do Float16 daje stratę dokładności poniżej 0,5% przy podwojeniu szybkości inferencji.
Xcode udostępnia narzędzie Core ML Model Profiler, umożliwiające pomiar wydajności modelu na różnych urządzeniach w symulatorze lub na rzeczywistym urządzeniu. Profiler pokazuje czas wykonania każdej warstwy, obciążenie silnika (ANE/GPU/CPU), szczytowe zużycie pamięci i wąskie gardła modelu. Według Apple Performance Optimization Guide, ponad 80% modeli ma co najmniej jedną warstwę działającą znacznie wolniej od pozostałych (anomalia warstwy), którą można zoptymalizować przez wymianę lub łączenie.
Rozwaźmy integrację wytrenowanego modelu Core ML w aplikacji iOS w języku Swift. Po dodaniu pliku .mlpackage do projektu Xcode (przeciągnięcie lub przez Swift Package Manager), Xcode automatycznie generuje klasę modelu w Swift, zawierającą typowane wejścia i wyjścia. Programista nie musi ręcznie parsować danych wejściowych — wygenerowana klasa przyjmuje UIImage, MLMultiArray, String lub inne typy w zależności od metadanych modelu.
import CoreML
import Vision
guard let model = try? VNCoreMLModel(
for: MyImageClassifier().model
) else { return }
let request = VNCoreMLRequest(model: model) { request, error in
guard let results = request.results
as? [VNClassificationObservation]
else { return }
if let topResult = results.first {
print("Class: \(topResult.identifier)")
print("Confidence: \(topResult.confidence)")
}
}
let handler = VNImageRequestHandler(
cgImage: image.cgImage!,
options: [:]
)
try handler.perform([request])
Podczas integracji Core ML należy przewidzieć obsługę błędów: model może nie załadować się z powodu niezgodności z urządzeniem (zbyt stara wersja iOS), braku pamięci lub uszkodzenia pliku modelu. Zaleca się zaimplementowanie logiki fallback: jeśli model nie załadował się w skwantowanym formacie Int8, załaduj wersję Float16, a jeśli i ona się nie załaduje — Float32. Według Apple Crash Analytics, ponad 5% awarii aplikacji ML jest spowodowanych nieprawidłowym ładowaniem modelu.
Core ML i Create ML — to dwa uzupełniające się narzędzia ekosystemu Apple ML. Core ML odpowiada za wykonywanie modeli na urządzeniu (inferencja), podczas gdy Create ML — za uczenie modeli (trenowanie). Modele utworzone w Create ML są eksportowane właśnie do formatu Core ML (.mlpackage) w celu późniejszej integracji z aplikacjami. Jeśli porównać do programowania webowego, Core ML to przeglądarka (wykonywanie), a Create ML to IDE do pisania kodu (uczenie).
| Parametr | Core ML | Create ML |
|---|---|---|
| Przeznaczenie | Wykonywanie modeli (inferencja) | Uczenie modeli (trenowanie) |
| Platforma | iOS, iPadOS, macOS, watchOS, tvOS | macOS (tylko) |
| Format | .mlpackage (konsumuje) | .mlpackage (tworzy) |
| Kod | Swift / Objective-C API | UI (Xcode) lub Swift API |
| Użytkownik | Programista aplikacji | Programista / Data scientist |
Często zadawane pytania
Core ML — to framework uczenia maszynowego od Apple do wykonywania wstępnie wytrenowanych modeli ML na urządzeniach iOS, iPadOS, macOS, watchOS i tvOS. Obsługuje sieci neuronowe, drzewa decyzyjne i regresje, automatycznie wybierając optymalny silnik obliczeniowy (Neural Engine, GPU lub CPU).
TensorFlow — to uniwersalny framework do uczenia i wykonywania modeli na serwerach i urządzeniach mobilnych. Core ML — to wyspecjalizowany silnik do wykonywania (nie uczenia) modeli wyłącznie na urządzeniach Apple z maksymalną wydajnością dzięki optymalizacji pod konkretny sprzęt (ANE, GPU, Metal). TensorFlow Mobile nie jest już wspierany na iOS — Apple zaleca Core ML dla wszystkich zadań ML na swoich platformach.
Konwersja jest wykonywana za pomocą biblioteki coremltools w Pythonie: wyeksportuj model PyTorch do TorchScript (torch.jit.trace), następnie użyj ct.converters.pytorch.convert() do utworzenia .mlpackage. coremltools automatycznie mapuje warstwy PyTorch na obsługiwane warstwy Core ML i optymalizuje graf dla ANE.
Core ML działa na wszystkich iPhone z iOS 11 i nowszym. Jednak wydajność zależy od sprzętu: iPhone 5s/6 — tylko CPU (wolna inferencja), iPhone 8/X — GPU (Metal), iPhone Xs i nowsze — Neural Engine (maksymalna wydajność do 15,8 TOPS na A17 Pro). Aby osiągnąć najlepszą wydajność, zaleca się określenie minimalnej wersji iOS 12+.
Nowoczesny format — .mlpackage (katalog zawierający model, metadane i opis wejść/wyjść). Przestarzały format — .mlmodel (pojedynczy plik binarny). Xcode automatycznie konwertuje .mlmodel na .mlpackage podczas kompilacji, ale dla nowych projektów zaleca się bezpośrednie używanie .mlpackage.
Podsumowanie
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.
Przeczytaj również