Оптимизация 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 недели) и стоимость под ваши требования. Закажите консультацию бесплатно.







