Оптимізація 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 dataset
Representative 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.
Покроковий план конвертації
- Профілювання — заміряємо розмір, latency, power на цільових пристроях.
- Вибір стратегії — post-training або QAT, INT8 або float16.
- Калібрування — готуємо representative dataset (мінімум 200–500 зразків).
- Конвертація — використовуємо
tf.lite.TFLiteConverterз оптимізаціями. - Валідація — порівнюємо точність та продуктивність на реальних девайсах.
- Документація — готуємо код інтеграції та рекомендації щодо деплою.
# 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.export → onnx-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 тижні) та вартість під ваші вимоги. Замовте консультацію безкоштовно.







