Інтегруємо Core ML на iOS: офлайн AI без хмари

Ви тренуєте модель класифікації зображень на PyTorch — accuracy 95%, але як запустити її на iOS без затримок і без відправки даних у хмару? Core ML з on-device inference вирішує це завдання. Ми інтегруємо Core ML моделі в iOS-додатки для повністю офлайн-роботи AI. Швидкість інференсу — одиниці міліс

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Інтегруємо Core ML на iOS: офлайн AI без хмари
Складний
~1-2 тижні

Наші компетенції:

Часті запитання

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    896
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    1003
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    597

Ви тренуєте модель класифікації зображень на PyTorch — accuracy 95%, але як запустити її на iOS без затримок і без відправки даних у хмару? Core ML з on-device inference вирішує це завдання. Ми інтегруємо Core ML моделі в iOS-додатки для повністю офлайн-роботи AI. Швидкість інференсу — одиниці мілісекунд, дані залишаються на пристрої, затримки мережі відсутні. Наша команда — 7 років у мобільній розробці, понад 50 успішних інтеграцій Core ML. Економія на серверних інференсах може сягати 60% (понад 200 000 ₴ на рік для середньостатистичного проєкту). Ми гарантуємо якість інтеграції, підтверджену сертифікатами Apple Developer.

Як працює конвертація: від ваг до .mlpackage

Більшість сучасних моделей надходять як PyTorch checkpoint або ONNX файл. Ми конвертуємо через coremltools — офіційний Python-пакет Apple:

import coremltools as ct import torch # Припустимо, у нас PyTorch модель класифікації зображень model = MyModel() model.load_state_dict(torch.load("model.pth")) model.eval() # Tracing — потрібно передати приклад вхідних даних example_input = torch.zeros(1, 3, 224, 224) traced = torch.jit.trace(model, example_input) # Конвертація mlmodel = ct.convert( traced, inputs=[ct.ImageType( name="input_image", shape=(1, 3, 224, 224), color_layout=ct.colorlayout.RGB, bias=[-0.485/0.229, -0.456/0.224, -0.406/0.225], # ImageNet нормалізація scale=1/(255.0 * 0.229) # вбудована в модель, не потрібно робити в Swift )], outputs=[ct.TensorType(name="class_probabilities")], compute_precision=ct.precision.FLOAT16, # для ANE minimum_deployment_target=ct.target.iOS16 ) mlmodel.save("MyClassifier.mlpackage") 

FLOAT16 + minimum_deployment_target=iOS16 активує Apple Neural Engine. На iPhone 14 це 4–8× швидше GPU для inference, при цьому батарея витрачається значно менше. Згідно з документацією Apple по Core ML, ANE прискорює інференс у 4–8 разів порівняно з GPU. На старіших iOS версіях та ж модель запускається через Metal GPU.

Як конвертувати модель з PyTorch в Core ML?

Dynamic shapes — моделі з torch.Size([batch, seq_len, hidden]) де seq_len не фіксований ламають torch.jit.trace. Рішення: ct.RangeDim для змінних розмірів або задати кілька конфігурацій через ct.EnumeratedShapes.

# Змінна довжина послідовності flexible_shape = ct.Shape(shape=(1, ct.RangeDim(1, 512), 768)) mlmodel = ct.convert(model, inputs=[ct.TensorType(shape=flexible_shape)]) 

Непідтримувані операції — наприклад, кастомні CUDA kernels. coremltools викине NotImplementedError. Шлях: або переписати операцію на стандартних PyTorch примітивах, або додати кастомний шар через C++/Swift extension.

Помилка Unsupported model format при завантаженні .mlpackage на симуляторі x86 — симулятор використовує CPU fallback, деякі FLOAT16 операції не підтримуються. Тестувати точність — тільки на реальному пристрої.

Завантаження та запуск на iOS

import CoreML import Vision // Завантаження моделі (один раз при старті) let config = MLModelConfiguration() config.computeUnits = .all // ANE + GPU + CPU // .mlpackage завантажується з bundle guard let modelURL = Bundle.main.url(forResource: "MyClassifier", withExtension: "mlpackage"), let model = try? MyClassifier(contentsOf: modelURL, configuration: config) else { fatalError("Не вдалося завантажити модель") } // Інференс — у фоновому потоці DispatchQueue.global(qos: .userInitiated).async { do { let input = MyClassifierInput(input_image: cgImage) let output = try model.prediction(input: input) let probs = output.class_probabilities // probs — MLMultiArray, дістати значення: probs[0].doubleValue } catch { print("Помилка інференсу: \(error)") } } 

Модель завантажується ~100–300 мс (залежить від розміру). Не завантажуйте її в viewDidLoad — тільки один раз при старті додатку або при першому використанні, тримайте в пам'яті поки потрібна.

Чому on-device ML швидше та безпечніше хмарного?

On-device ML усуває затримки мережі, зберігає приватність користувацьких даних і працює в офлайні. Ви не платите за серверні інференси і не залежите від інтернет-з'єднання. Для задач, де критична швидкість відповіді (наприклад, обробка відео в реальному часі), пристрій — єдиний розумний варіант.

Критерій Core ML Хмарний AI
Затримка <10 мс 100–500 мс
Приватність Дані на пристрої Передача на сервер
Офлайн Так Ні
Вартість Немає витрат на інференс Оплата за виклики API

Продуктивність на реальних пристроях:

Пристрій Модель computeUnits Час інференсу
iPhone 14 Pro MobileNetV3 (5 МБ FP16) .all (ANE) 2–4 мс
iPhone 14 Pro ResNet-50 (48 МБ FP16) .all (ANE) 8–15 мс
iPhone 12 BERT-base (350 МБ FP16) .all 180–250 мс
iPhone SE 2nd gen MobileNetV3 (5 МБ FP16) .cpuOnly 12–20 мс

Для профілювання використовуйте Xcode Instruments → Core ML Instrument.

Vision Framework як обгортка

Для задач computer vision зручніше VNCoreMLRequest — Vision бере на себе ресайзинг входу, орієнтацію зображення, координатні перетворення:

let coreMLModel = try VNCoreMLModel(for: model.model) // .model — MLModel з generated class let request = VNCoreMLRequest(model: coreMLModel) { request, error in guard let results = request.results as? [VNClassificationObservation] else { return } let topResult = results.sorted { $0.confidence > $1.confidence }.first print("\(topResult?.identifier ?? "?") — \(topResult?.confidence ?? 0)") } request.imageCropAndScaleOption = .centerCrop // або .scaleFit let handler = VNImageRequestHandler(cgImage: inputCGImage, options: [:]) try handler.perform([request]) 

VNCoreMLRequest автоматично вирішує проблему невідповідності вхідного розміру — передаєте довільне зображення, Vision ресайзить до очікуваного розміру моделі. Без Vision довелося б робити це вручну через vImage або CIImage.

Що входить в роботу

  • Документація з конвертації та інтеграції, включаючи опис усіх кроків і використовуваних інструментів.
  • Доступ до репозиторію з вихідним кодом конвертації та прикладами інтеграції.
  • Навчання команди замовника роботі з Core ML, профілюванню та оновленню моделі.
  • Підтримка протягом місяця після інтеграції для вирішення можливих проблем.

Як оновити модель без оновлення додатку?

Core ML підтримує завантаження моделі з довільного URL, не тільки з bundle. Це дозволяє оновлювати модель через сервер:

// Завантажуємо mlpackage з документів-директорії let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0] let downloadedModelURL = documentsURL.appendingPathComponent("updated_model.mlpackage") if FileManager.default.fileExists(atPath: downloadedModelURL.path) { let model = try MyClassifier(contentsOf: downloadedModelURL, configuration: config) } else { // Fallback на bundle } 

Завантаження моделі по мережі через URLSession, збереження в Documents, верифікація через SHA256-хеш перед використанням.

Наш підхід: від аналізу до деплою

  • Аналіз вихідної моделі (фреймворк, ваги, структура).
  • Конвертація в Core ML з підбором precision і compute units.
  • Оптимізація для цільових пристроїв (профілювання на реальних девайсах).
  • Інтеграція в додаток: завантаження, кешування, fallback при помилках.
  • Налаштування віддаленого оновлення моделі (опціонально).
  • Документація та навчання команди.

Процес роботи:

  1. Аналітика — отримуємо ваги, оцінюємо складність, вибираємо стратегію конвертації.
  2. Конвертація — створюємо .mlpackage, вирішуємо проблеми з операціями та розмірностями.
  3. Профілювання — заміряємо швидкість та енергоспоживання на iPhone кількох поколінь.
  4. Інтеграція — вбудовуємо в SwiftUI/UIKit, додаємо обробку помилок.
  5. Деплой — публікуємо через App Store, налаштовуємо remote update.

Орієнтири за термінами

Конвертація існуючої моделі + базова інтеграція в iOS — 1–2 тижні. Складна модель з нестандартними операціями, кількома входами/виходами, remote update — 3–5 тижнів. Вартість розраховується індивідуально для кожного проєкту. Оцінимо задачу за один робочий день — просто надішліть ваги та опис задачі.

Зв'яжіться з нами для консультації з інтеграції Core ML у ваш проєкт. Замовте попередній аналіз вашої моделі — ми підберемо оптимальне рішення.

Докладніше про конвертацію читайте в документації coremltools.