Core ML — це фреймворк машинного навчання від Apple, який дозволяє інтегрувати попередньо навчені ML-моделі безпосередньо в додатки iOS, iPadOS, macOS, watchOS та tvOS. Фреймворк підтримує нейронні мережі, дерева рішень, лінійні регресії та ансамблеві методи, а також конвертацію моделей з TensorFlow, PyTorch, Keras та ONNX у власний формат Apple. Згідно з Apple Machine Learning Research (2025), Core ML виконує інференцію повністю на пристрої, забезпечуючи конфіденційність даних та затримку менше ніж 10 мілісекунд для більшості моделей.
Головне
Core ML — це ключовий компонент екосистеми машинного навчання Apple, представлений на WWDC 2017. До Core ML розробники iOS використовували сторонні бібліотеки (TensorFlow Mobile, Caffe2) або користувацькі рішення для запуску ML-моделей на пристрої. Core ML надав єдиний уніфікований інтерфейс для всіх типів моделей — від класичних регресій до глибоких нейронних мереж — та взяв на себе низькорівневу оптимізацію для конкретного пристрою.
Перша версія Core ML (2017) підтримувала лише статичні моделі з фіксованими розмірами вхідних даних. Core ML 2 (2018) додав підтримку пакетного прогнозування та оновлень моделей на лету. Core ML 3 (2019) приніс навчання на пристрої та підтримку десятків нових шарів нейронних мереж. Core ML 4 (2021) представив підтримку моделей з кількома виходами та покращену обробку зображень. Core ML 5 (2024) додав підтримку динамічних нейронних мереж та керованого навчання на пристрої використовуючи нові ML-шари.
Виконання машинного навчання на пристрої дає три ключові переваги: конфіденційність — дані ніколи не покидають пристрій (відповідає вимогам GDPR та HIPAA), швидкість — інференція виконується за мілісекунди без мережевої затримки, офлайн-доступність — модель працює без підключення до Інтернету. Згідно з Apple Privacy Report (2025), понад 90% ML-інференцій на платформах Apple виконується на пристрої завдяки Core ML.
Архітектура Core ML побудована за багатошаровим принципом: на верхньому рівні — API для розробника (MLModel, MLFeatureProvider, MLPredictionOptions), на середньому — модель у форматі .mlpackage, на нижньому — обчислювальні бекенди: Apple Neural Engine (ANE), GPU (Metal Shaders) та CPU (BNNS, Accelerate framework). Core ML автоматично обирає найкращий бекенд залежно від моделі та апаратного забезпечення пристрою.
| Бекенд | Пристрої | Продуктивність |
|---|---|---|
| Neural Engine | iPhone Xs+, iPad A12+, Mac M1+ | Максимальна (TOPS) |
| GPU (Metal) | Усі пристрої Apple | Висока (паралельні обчислення) |
| CPU (BNNS) | Усі пристрої Apple | Базова (сумісність) |
Neural Engine (ANE) — це спеціалізований нейропроцесор, вбудований в чипи Apple A12+ та M1+. ANE оптимізований для операцій згорткових нейронних мереж (CNN) та матричних множників з продуктивністю до 15.8 TOPS на A17 Pro та 38 TOPS на M4. Core ML автоматично визначає, чи можна виконати модель на ANE, і якщо так, завантажує її туди. Якщо модель містить операції, не підтримувані ANE, Core ML розподіляє обчислення між GPU та CPU.
Для обчислень на GPU Core ML використовує Metal Performance Shaders Graph (MPSGraph) — фреймворк для побудови та виконання обчислювальних графів на GPU. MPSGraph бере граф нейронної мережі з Core ML та компілює його в Metal Shaders, оптимізовані для конкретної архітектури GPU (7-ядерний A17 GPU або 40-ядерний M4 Ultra GPU). Автоматичні оптимізації MPSGraph включають злиття шарів, усунення надлишкових операцій та вибір оптимального формату даних.
Core ML підтримує всі основні типи моделей машинного навчання, поділені на три категорії: нейронні мережі (згорткові CNN, рекурентні RNN/LSTM, трансформери), ансамблеві моделі (Random Forest, Gradient Boosting, XGBoost, дерева рішень) та регресійні моделі (лінійна регресія, SVM, CRF). Кожен тип моделі має свій підпротокол MLModelType, і Core ML автоматично обирає відповідний бекенд та формат виконання.
Core ML підтримує понад 150 типів шарів нейронних мереж: Convolution (1D/2D/3D), BatchNormalization, Pooling (Max/Average), Activation (ReLU, Sigmoid, Tanh, LeakyReLU, PReLU), Recurrent (LSTM/GRU/SimpleRNN), Transformers (MultiHeadAttention, LayerNorm), шари специфічні для Metal. Для непідтримуваних шарів Core ML надає механізм користувацького шару — можливість написати реалізацію шару на Metal Shading Language або 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)
До 2021 року Core ML використовував формат .mlmodel — бінарний файл, що містить всі ваги та метадані моделі. Починаючи з Xcode 13 та Core ML 4, Apple представила новий формат .mlpackage — пакетну структуру на основі каталогу, що містить модель, метадані, описи входів/виходів та файли попередньої та післядуючої обробки у форматі JSON. mlpackage підтримує версіонування git, що спрощує командну розробку. Конвертація .mlmodel в .mlpackage виконується за допомогою утиліти Xcode Model Compiler або скрипта coremltools на Python.
Конвертація моделей з сторонніх фреймворків в Core ML виконується за допомогою бібліотеки coremltools на Python. coremltools підтримує імпорт моделей з TensorFlow 1.x/2.x (SavedModel, PB, HDF5), PyTorch (TorchScript, traced/scripted моделі), Keras (H5), ONNX та створених за допомогою Create ML. Стандартний конвеєр конвертації включає три кроки: завантаження моделі в оригінальному форматі, конвертація в MIL (Model Intermediate Language) — внутрішнє подання Core ML — та експорт у .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")
Після конвертації необхідно перевірити точність моделі, порівнюючи прогнози оригінальної моделі та конвертованої Core ML-моделі на однакових даних. Допустиме відхилення не перевищує 1e-3 (0.1%) для Float32 та 1e-2 (1%) для Float16/Int8. coremltools надає утиліту ct.utils.compare_models() для автоматичного порівняння. Якщо відхилення перевищує норму, можлива проблема з непідтримуваними операціями — їх необхідно замінити користувацькими шарами або спростити модель.
Оптимізація моделі Core ML — це процес зменшення розміру моделі та збільшення швидкості інференції без значної втрати точності. Apple надає кілька інструментів оптимізації, вбудованих в coremltools та Xcode: квантизація (зниження точності ваг), прунінг (видалення незначних нейронів), видалення надлишкових шарів та злиття шарів для зменшення обчислювального графа.
Квантизація зменшує розмір моделі приблизно в 2 рази (Float16) або 4 рази (Int8) порівняно з Float32. Core ML підтримує три режими квантизації: післянавчальну квантизацію (PTQ) з калібрувальним набором даних, під час конвертації через coremltools та навчання з урахуванням квантизації (QAT). Для більшості моделей комп’ютерного зору PTQ до Float16 дає втрату точності менше ніж 0.5% при подвоєнні швидкості інференції.
Xcode надає інструмент Core ML Model Profiler, який дозволяє виміряти продуктивність моделі на різних пристроях в симуляторі або на реальному пристрої. Профілятор показує час виконання кожного шару, навантаження бекенду (ANE/GPU/CPU), пікове споживання пам’яті та вузькі місця моделі. Згідно з Apple Performance Optimization Guide, понад 80% моделей мають хоча бодин шар, який працює значно повільніше за інші (аномалія шару), який можна оптимізувати заміною або злиттям.
Розглянемо інтеграцію навченої моделі Core ML в iOS-додаток на Swift. Після додавання файлу .mlpackage в проект Xcode (перетягуванням або через Swift Package Manager), Xcode автоматично генерує клас моделі Swift з типізованими входами та виходами. Розробнику не потрібно вручну парсити вхідні дані — згенерований клас приймає UIImage, MLMultiArray, String або інші типи залежно від метаданих моделі.
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])
При інтеграції Core ML необхідно передбачити обробку помилок: модель може не завантажитися через несумісність з пристроєм (занадто стара версія iOS), нестачу пам’яті або пошкодження файлу моделі. Рекомендується реалізувати логіку запасу: якщо модель не завантажилася в квантованому форматі Int8, завантажити версію Float16, а якщо й вона не завантажиться — Float32. Згідно з Apple Crash Analytics, понад 5% збоїв ML-додатків викликані неправильним завантаженням моделі.
Core ML та Create ML — це два взаємодоповнюючі інструменти екосистеми Apple ML. Core ML відповідає за виконання моделей на пристрої (інференцію), тоді як Create ML відповідає за навчання моделей. Створені в Create ML моделі експортуються саме в формат Core ML (.mlpackage) для подальшої інтеграції в додатки. Якщо провести аналогію з веб-розробкою, Core ML — це браузер (виконання), а Create ML — це IDE для написання коду (навчання).
| Параметр | Core ML | Create ML |
|---|---|---|
| Призначення | Виконання моделей (інференція) | Навчання моделей |
| Платформа | iOS, iPadOS, macOS, watchOS, tvOS | macOS (лише) |
| Формат | .mlpackage (споживає) | .mlpackage (створює) |
| Код | Swift / Objective-C API | Інтерфейс Xcode або Swift API |
| Користувач | Розробник додатка | Розробник / Дата-сайентист |
Часто задавані питання
Core ML — це фреймворк машинного навчання Apple для виконання попередньо навчених ML-моделей на пристроях iOS, iPadOS, macOS, watchOS та tvOS. Він підтримує нейронні мережі, дерева рішень та регресії, автоматично обираючи оптимальний обчислювальний бекенд (Neural Engine, GPU або CPU).
TensorFlow — це універсальний фреймворк для навчання та виконання моделей на серверах та мобільних пристроях. Core ML — спеціалізований рушій для виконання (не навчання) моделей виключно на пристроях Apple з максимальною продуктивністю завдяки оптимізації під конкретне обладнання (ANE, GPU, Metal). TensorFlow Mobile більше не підтримується на iOS — Apple рекомендує Core ML для всіх ML-завдань на своїх платформах.
Конвертація виконується за допомогою бібліотеки coremltools на Python: експортуйте модель PyTorch в TorchScript (torch.jit.trace), потім використайте ct.converters.pytorch.convert() для створення .mlpackage. coremltools автоматично зіставляє шари PyTorch з підтримуваними шарами Core ML та оптимізує граф для ANE.
Core ML працює на всіх iPhone з iOS 11 та новішими. Однак продуктивність залежить від апаратного забезпечення: iPhone 5s/6 — лише CPU (повільна інференція), iPhone 8/X — GPU (Metal), iPhone Xs та новіші — Neural Engine (максимальна продуктивність до 15.8 TOPS на A17 Pro). Для найкращої продуктивності рекомендується встановити мінімальну версію iOS 12+.
Сучасний формат — .mlpackage (каталог, що містить модель, метадані та описи входів/виходів). Застарілий формат — .mlmodel (один бінарний файл). Xcode автоматично конвертує .mlmodel в .mlpackage під час збірки, але для нових проектів рекомендується використовувати .mlpackage безпосередньо.
Підсумки
Ми розробимо мобільний застосунок під ключ
IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.
Читайте також