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) добавил поддержку batch prediction и обновления моделей "на лету". Core ML 3 (2019) принёс on-device обучение и поддержку десятков новых слоёв нейронных сетей. 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, Decision Trees) и регрессионные модели (линейная регрессия, 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 предоставляет механизм custom layer — возможность написать реализацию слоя на 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() для автоматического сравнения. Если расхождение превышает норму, возможно проблема в неподдерживаемых операциях — их необходимо заменить custom layers или упростить модель.
Оптимизация модели Core ML — это процесс уменьшения размера модели и увеличения скорости инференса без значительной потери точности. Apple предоставляет несколько инструментов оптимизации, встроенных в coremltools и Xcode: квантизация (снижение точности весов), прунинг (удаление малозначимых нейронов), палеонтология (удаление избыточных слоёв) и слияние слоёв (fusion) для уменьшения вычислительного графа.
Квантизация уменьшает размер модели примерно в 2 раза (Float16) или 4 раза (Int8) по сравнению с Float32. Core ML поддерживает три режима квантизации: послеобучающая квантизация (PTQ — Post-Training Quantization) с калибровочным набором данных, во время конвертации через 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), недостатка памяти или повреждения файла модели. Рекомендуется реализовать fallback-логику: если модель не загрузилась в квантизированном 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 | UI (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 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также