Розробка машинного навчання (Core ML) в iOS-додатку

Чому Core ML замість хмарного інференсу? Конвертуєте модель з Python-середовища в мобільний продакшн — і одразу стикаєтеся з несумісністю форматів, латентністю інференсу та відсутністю механізму оновлення без релізу в App Store. Core ML вирішує ці проблеми нативно, але тільки якщо його правильно

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

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

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

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Розробка машинного навчання (Core ML) в iOS-додатку
Складний
~1-2 тижні

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

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

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

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    895
  • 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

Чому Core ML замість хмарного інференсу?

Конвертуєте модель з Python-середовища в мобільний продакшн — і одразу стикаєтеся з несумісністю форматів, латентністю інференсу та відсутністю механізму оновлення без релізу в App Store. Core ML вирішує ці проблеми нативно, але тільки якщо його правильно вбудувати в архітектуру додатку. Ми вже виконали понад 50 інтеграцій Core ML і гарантуємо стабільну роботу на пристроях починаючи з iPhone 8. On-device inference виключає затримки мережі та зберігає конфіденційність даних користувача. Докладніше про можливості Core ML читайте в офіційній документації Apple.

Як уникнути типових помилок при інтеграції Core ML?

Найпоширеніша помилка — конвертація моделі без урахування цільового заліза. coremltools дозволяє вказати minimum_deployment_target і тип compute unit: cpuOnly, cpuAndGPU, cpuAndNeuralEngine. Якщо не вказати cpuAndNeuralEngine для A12+, модель не потрапить на Neural Engine і буде працювати на CPU, що в 5–10 разів повільніше для згорткових мереж. Наші інженери сертифіковані Apple і завжди обирають оптимальну конфігурацію.

Другий момент — вхідний формат. Core ML очікує CVPixelBuffer з конкретним kCVPixelFormatType. Якщо додаток отримує UIImage з камери через AVCapturePhotoOutput, потрібна проміжна конвертація через CIImageCVPixelBuffer. Робити це на main thread — вірний шлях до dropped frames. Уся ланка захоплення та інференсу має йти через DispatchQueue з QoS .userInteractive або через Vision framework, який сам керує буферами.

Vision + CoreML — правильна комбінація для більшості завдань: VNCoreMLRequest бере на себе масштабування, нормалізацію та керування буфером. Але якщо потрібна послідовність інференсів на відеопотоці, краще використовувати VNSequenceRequestHandler — він кешує стан між кадрами.

Як ми гарантуємо швидкість інференсу?

Починаємо з аудиту вихідної моделі: формат (ONNX, TensorFlow SavedModel, PyTorch TorchScript), розмір ваг, кількість операцій. Для конвертації використовуємо coremltools 7.x, для кількісних моделей — ct.optimize.coreml з LinearQuantizer або PalettizationConfig. Квантизація в 8-bit знижує розмір моделі в 4 рази без помітної втрати точності на більшості класифікаторів.

Приклад з практики: фінтех-клієнт хотів детекцію підробки документів на пристрої. Вихідна TFLite-модель (MobileNetV3, 12 MB) давала 280 ms на iPhone 12. Після конвертації в .mlpackage з computeUnits = .cpuAndNeuralEngine та Float16-компресією — 34 ms на тому ж пристрої. Додатково загорнули інференс в MLModelConfiguration з allowLowPrecisionAccumulationOnGPU = true. Економія на серверній інфраструктурі склала до 70%.

Параметр До оптимізації Після оптимізації
Розмір моделі 12 MB 3 MB (Float16)
Час інференсу 280 ms 34 ms
Використовуваний процесор CPU Neural Engine

Дані з офіційного семпла Apple Core ML Optimization Guide Якщо ви хочете таку ж оптимізацію, зв'яжіться з нами для аудиту вашої моделі.

Технічні деталі конвертації

Окрім квантизації, ми застосовуємо прунінг та профілювання через Xcode Instruments (Core ML Instrument). Для моделей з динамічними розмірами входів використовуємо MLMultiArrayConstraint з shapeFlexibility. Весь ML-шар ізолюємо в окремий Swift Package з протоколом MLInferenceService.

Що дає квантизація моделі?

Квантизація в 8-bit за допомогою LinearQuantizer скорочує розмір моделі в 4 рази і пришвидшує інференс до 2 разів на підтримуваному залізі. Для задач класифікації точність падає менш ніж на 1%. Якщо потрібна максимальна точність, використовуємо половинну точність (Float16) — розмір зменшується вдвічі без втрати точності. Наш досвід показує, що більшість моделей можна безпечно квантизувати в 8-bit.

Як ми оновлюємо моделі без релізу?

Для оновлення моделей без релізу налаштовуємо завантаження через CloudKit або власний S3-сумісний storage. MLModel(contentsOf:) приймає локальний URL — модель завантажується у фоновому режимі, верифікується за SHA-256, підмінюється атомарно через FileManager.replaceItem. Стара версія зберігається як fallback.

Архітектурно весь ML-шар ізолюємо в окремий модуль (Swift Package) з протоколом MLInferenceService. Це дозволяє підміняти реалізацію в тестах і перевикористовувати між кількома таргетами.

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

  1. Аудит вихідної моделі та вибір шляху конвертації.
  2. Конвертація в .mlmodel / .mlpackage через coremltools.
  3. Оптимізація: квантизація, прунінг, вибір compute units.
  4. Інтеграція через Vision або прямий MLModel API.
  5. Налаштування OTA-оновлення моделей (CloudKit / S3).
  6. Unit-тести інференсу з еталонними входами/виходами.
  7. Профілювання через Xcode Instruments (Core ML Instrument).

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

Терміни

Інтеграція готової сконвертованої моделі в існуючий додаток — від 3 до 5 робочих днів. Якщо потрібна конвертація, оптимізація та налаштування OTA-оновлення з нуля — 1–2 тижні. Вартість розраховується індивідуально після аналізу вимог та вихідної моделі.