Чому 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, потрібна проміжна конвертація через CIImage → CVPixelBuffer. Робити це на 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. Це дозволяє підміняти реалізацію в тестах і перевикористовувати між кількома таргетами.
Що входить в роботу
- Аудит вихідної моделі та вибір шляху конвертації.
- Конвертація в
.mlmodel/.mlpackageчерезcoremltools. - Оптимізація: квантизація, прунінг, вибір compute units.
- Інтеграція через
Visionабо прямийMLModelAPI. - Налаштування OTA-оновлення моделей (CloudKit / S3).
- Unit-тести інференсу з еталонними входами/виходами.
- Профілювання через Xcode Instruments (Core ML Instrument).
Отримайте консультацію з інтеграції Core ML вже сьогодні. Зв'яжіться з нами для аудиту вашої моделі — ми розрахуємо терміни та вартість.
Терміни
Інтеграція готової сконвертованої моделі в існуючий додаток — від 3 до 5 робочих днів. Якщо потрібна конвертація, оптимізація та налаштування OTA-оновлення з нуля — 1–2 тижні. Вартість розраховується індивідуально після аналізу вимог та вихідної моделі.







