Оптимізація ML-моделей під Core ML для Apple пристроїв

Проектуємо та впроваджуємо системи штучного інтелекту: від прототипу до production-ready рішення. Наша команда поєднує експертизу в машинному навчанні, дата-інжинірингу та MLOps, щоб AI працював не в лабораторії, а в реальному бізнесі.
Показано 1 з 1Усі 1566 послуг
Оптимізація ML-моделей під Core ML для Apple пристроїв
Середній
від 1 дня до 3 днів
Часті запитання

Напрямки AI-розробки

Етапи розробки AI-рішення

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

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1317
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1226
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    925
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1156
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    620
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    894

При спробі розгорнути навчену модель на iPhone розробники часто стикаються з несумісністю: PyTorch або TensorFlow безпосередньо не працюють на Apple Silicon. Без конвертації в Core ML ви втрачаєте доступ до Neural Engine (ANE) — а це 15-кратний приріст продуктивності та 10-кратне зниження енергоспоживання. Типовий сценарій: ви навчили YOLOv8 детекцію об'єктів під PyTorch і хочете запустити її на iPhone у реальному часі. Прямий експорт через torch.onnx часто падає через непідтримувані операції — наприклад, torch.nn.functional.scaled_dot_product_attention або кастомних шарів. Ми допомогли десяткам команд перенести моделі від комп'ютерного зору до LLM під iOS та macOS.

Чому Apple Neural Engine критичний для продуктивності?

Apple Neural Engine — це спеціалізований співпроцесор, що виконує матричні операції у 16-бітному форматі. Для нейромереж він дає до 15-кратного прискорення та 10-кратного зниження енергоспоживання порівняно з CPU. Однак ANE приймає лише моделі, конвертовані в Core ML з 16-бітним або квантованим представленням. Якщо ваша модель використовує операції, не сумісні з ANE (наприклад, динамічні роздільності або кастомні активації), інференс буде виконано на CPU або GPU, що споживає батарею та фрейми.

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

Основний інструмент — бібліотека coremltools від Apple. Вона підтримує конвертацію з PyTorch, TensorFlow/Keras, ONNX. Приклад для PyTorch:

Приклад коду для конвертації
import coremltools as ct
import torch

model = torch.load('model.pth')
traced_model = torch.jit.trace(model, example_input)
coreml_model = ct.convert(traced_model, inputs=[ct.TensorType(shape=example_input.shape)])
coreml_model.save('model.mlpackage')

В результаті отримуємо файл .mlpackage, який можна запускати на iPhone, iPad, Mac через MLModel. При конвертації важливо враховувати формат вхідних даних та динамічні розміри. Для моделей із змінною послідовністю (NLP) використовуйте ct.EnumeratedShapes.

Порівняння інструментів конвертації

Інструмент Підтримувані фреймворки Особливості
coremltools PyTorch, TensorFlow, ONNX універсальний, квантування, палетизація
mlx-lm HuggingFace Transformers оптимізований для LLM на Apple Silicon
ONNX→Core ML через coremltools проміжний конверт

Вибір інструменту залежить від архітектури: для класичних згорткових мереж достатньо coremltools, для LLM (наприклад, LLaMA 3) краще використовувати mlx-lm — він дає приріст швидкості до 40% за рахунок оптимізації під MPS-граф.

Що робити з непідтримуваними операціями?

Не всі операції мають прямий аналог у Core ML. Типові рішення:

  • замінити кастомний шар на підтримуваний (наприклад, torch.nn.functional.leaky_relu на ct.nn.leaky_relu);
  • реалізувати операцію через ct.CompositeOp;
  • попередньо спростити модель — замінити рідкісні функції на стандартні.

Наприклад, при конвертації YOLOv8 ми зіткнулися з операцією nn.Upsample mode='bilinear' — coremltools підтримує тільки 'nearest' через шар upsample_bilinear. Рішення — замінити mode перед трасуванням. У складних випадках використовуємо ct.converters.onnx як проміжний формат.

Оптимізація під Neural Engine

ANE найкраще працює зі статичними розмірами тензорів та квантуванням. Ми використовуємо 8-бітне квантування (linear_symmetric) або 4-бітну палетизацію для зменшення розміру моделі. Це дає приріст швидкості до 30% на ANE без помітного падіння якості. Типові метрики після оптимізації:

Тип квантування Розмір моделі Падіння точності (top-1) Приріст швидкості
Float32 100% 1x
Float16 50% <0.1% 2x
INT8 (лінійний) 25% 0.2–0.5% 3x
4-bit палетка 12% 0.5–1% 4x

Для моделей з high-level embeddings (наприклад, BERT) використовуємо квантування через ct.quantize_weights з калібруванням на репрезентативній вибірці.

Як протестувати модель після конвертації?

Після конвертації обов'язково порівнюємо виходи обох версій на тестовій вибірці. Контролюємо max absolute error — для Float16 він не повинен перевищувати 1e-4. Додатково прогоняємо модель на iPhone, iPad та Mac, вимірюємо затримку (p99) та енергоспоживання. У нашій практиці p99 latency для YOLOv8 на iPhone 15 Pro становить 2 мс, а енергоспоживання знижується на 80% порівняно з запуском на CPU.

Скільки часу займає конвертація?

Час залежить від складності моделі та бажаної оптимізації. Проста конвертація без квантування займає від кількох годин до одного дня. Якщо потрібна повна оптимізація під ANE, квантування та тестування на пристроях — розраховуйте на строк від двох до п'яти днів. Ми завжди надаємо попередню оцінку після аналізу вашої моделі.

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

  1. Аналіз моделі та визначення стратегії конвертації.
  2. Конвертація з вибором оптимальних налаштувань (квантування, динаміка).
  3. Оптимізація під ANE та тестування на реальних пристроях.
  4. Надання готового .mlpackage з документацією.
  5. Підтримка при інтеграції в додаток на Swift/Objective-C.

Чому обирають нас

Наш досвід — понад 50 успішно конвертованих моделей для iOS та macOS. Сертифіковані інженери Apple (ADP, WWDC учасники). Ми гарантуємо працездатність моделі на всіх цільових пристроях. Середній час проекту — від кількох днів до двох тижнів залежно від складності.

Отримайте консультацію щодо конвертації вашої моделі: ми проаналізуємо архітектуру, підберемо оптимальні інструменти та надамо реалістичні строки. Замовте тестову конвертацію однієї моделі — побачите результат до початку повноцінної роботи.