Оптимізація ML-моделей для мобільних: квантизація, делегати, деплой

Оптимізація ML-моделей для мобільних: квантизація, делегати, деплой

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

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

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

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

Оптимізація ML-моделей для мобільних: квантизація, делегати, деплой

Уявіть: ваша модель на сервері дає 0.99 F1, але на Android latency 200 мс, 500 МБ RAM. Клієнти скаржаться, uninstall зростає. Ми привозимо такі проекти щотижня. Наша команда — 5 років досвіду, 70+ сконвертованих моделей — допомагає конвертувати модель у TFLite-формат з підбором квантизації та делегатів. Результат: inference під 10 мс, footprint менше 10 МБ. Економія на хмарній інфраструктурі — до 60%. Зниження вартості одного інференсу — до 80%. Оцініть свій проект за 2 дні — просто напишіть нам.

Чому квантизація критична для мобільних застосунків?

На сервері ви можете дозволити FP32, але на пристрої кожен мегабайт і мілісекунда на рахунку. Квантизація зменшує модель у 4 рази (INT8) і прискорює inference у 2–4 рази без спеціального заліза. З делегатами ви вичавлюєте ще 3–10x. Без цього ваш застосунок програє конкурентам за швидкістю та енергоспоживанням. Докладніше про квантизацію нейронних мереж.

Коли потрібна конвертація в TFLite?

Якщо ваш застосунок працює на Android, iOS або embedded Linux (Raspberry Pi, Coral), TFLite — стандартний формат. Він підтримує апаратне прискорення через NNAPI, GPU delegate, Hexagon DSP та Core ML. Без конвертації ви використовуєте тільки CPU — втрачаєте 5–20x продуктивності. TFLite кращий за ONNX Runtime на мобільних платформах завдяки оптимізаціям під ARM та підтримці Edge TPU. Згідно з документацією TensorFlow Lite, GPU delegate може прискорити inference до 10 разів порівняно з CPU.

Як вибрати метод квантизації?

Вибір залежить від вимог до точності та швидкості:

Метод Ваги Активації Втрата точності Прискорення (vs FP32)
Dynamic range INT8 float Мінімальна 2–3x
Full integer INT8 INT8 0.5–2% 3–4x
Float16 float16 float ~0% ~2x (на GPU)
QAT INT8 INT8 <0.5% 3–4x

QAT (Quantization-Aware Training) — найкращий вибір для критичних за точністю завдань. Ми часто використовуємо його на моделях сімейства BERT. Наприклад, fine-tuning з QAT дає падіння <0.3% при прискоренні 4x.

Докладніше про representative datasetRepresentative dataset має містити не менше 200–500 зразків, репрезентативних для продакшену. Неправильний вибір датасету — часта причина втрати точності до 5%.

Що дає використання GPU delegate?

GPU delegate дозволяє виконувати тензорні операції на відеокарті — приріст швидкості 3–10x порівняно з CPU. На Qualcomm Snapdragon з Adreno GPU ми отримували 50 FPS на MobileNet v2. Для iOS Core ML delegate дає до 15x. GPU делегат кращий за CPU у 3–10 разів за throughput, але споживає більше енергії — це компроміс. Вартість одного інференсу знижується в 4 рази порівняно з CPU.

Покроковий план конвертації

  1. Профілювання — заміряємо розмір, latency, power на цільових пристроях.
  2. Вибір стратегії — post-training або QAT, INT8 або float16.
  3. Калібрування — готуємо representative dataset (мінімум 200–500 зразків).
  4. Конвертація — використовуємо tf.lite.TFLiteConverter з оптимізаціями.
  5. Валідація — порівнюємо точність та продуктивність на реальних девайсах.
  6. Документація — готуємо код інтеграції та рекомендації щодо деплою.
# TF/Keras → TFLite converter = tf.lite.TFLiteConverter.from_keras_model(model) converter.optimizations = [tf.lite.Optimize.DEFAULT] # post-training quantization tflite_model = converter.convert() 

PyTorch → ONNX → TFLite: PyTorch не має прямого шляху. Використовуємо torch.onnx.exportonnx-tf → TFLite. Важно ретельно тестувати — подвійна конвертація може внести артефакти. Для PyTorch-моделей рекомендуємо ONNX Runtime для мобільних платформ, якщо точність критична.

Порівняння делегатів

Платформа Delegate Прискорення (vs CPU) Обладнання
Android GPU GPU Delegate 3–10x Adreno, Mali
Qualcomm NNAPI / Hexagon 5–20x Snapdragon (DSP)
iOS Core ML Delegate 5–15x Apple Neural Engine
Edge TPU EdgeTPU Delegate 100x Coral accelerator

Типові помилки при конвертації

  • Невідповідність representative dataset — leads to accuracy drop. Наприклад, якщо датасет складається з JPEG з високою якістю, а в продакшені стиснуті — точність падає на 3–5%.
  • Відсутність перевірки на пристрої: емулятор не показує реальну продуктивність. CPU на емуляторі в 2–3 рази швидший за реальний.
  • Ігнорування power consumption при використанні GPU — на слабких батареях троттлінг знижує FPS.

Приклад: портування YOLOv8 на Android

Клієнт хотів real-time детекцію на Snapdragon 8 Gen 2. Ми обрали full integer quantization з representative dataset з 500 зображень. Після калібрування точність впала на 1.2% — компенсували QAT. Підсумок: 30 FPS при 8 МБ моделі. Весь пайплайн зайняв 5 днів.

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

  • Аналіз архітектури моделі та профілювання (розмір, latency, power).
  • Вибір стратегії квантизації (post-training / QAT, INT8 / float16).
  • Конвертація з калібруванням на representative dataset.
  • Тестування точності та продуктивності на цільових пристроях.
  • Документація щодо інтеграції та підтримка при деплої.

Досвід команди: за 5 років ми сконвертували 70+ моделей — від YOLOv8 до трансформерів. Маємо сертифікати Google ML та досвід роботи з Qualcomm NPU.

Зв'яжіться з нами для оцінки вашого проекту — розрахуємо терміни (зазвичай 1–2 тижні) та вартість під ваші вимоги. Замовте консультацію безкоштовно.