Оптимізація ML-моделі (квантизація) для мобільного пристрою

TRUETECH займається розробкою, підтримкою та обслуговуванням мобільних додатків iOS, Android, PWA. Маємо великий досвід та експертизу для публікації мобільних додатків до популярних маркетів Google Play, App Store, Amazon, AppGallery та інші.

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Оптимізація ML-моделі (квантизація) для мобільного пристрою
Складний
~3-5 днів
Часті запитання

Наші компетенції:

Етапи розробки

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

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    858
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    745
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1162
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    1034
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    968
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    563

Оптимізація ML-моделі (квантизація) для мобільного пристрою

Ми стикалися з задачею: модель детекції об'єктів займає 100 МБ і працює 200 мс на пристрої користувача. Після квантизації — 25 МБ і 50 мс. Але іноді точність падає непередбачувано. Ділимося досвідом: як обирати метод, аналізувати шари та верифікувати результат. Нижче — перевірені підходи для iOS та Android з кодом і конкретними метриками.

Квантизація — це переведення ваг та активацій моделі з float32 у формат з меншою розрядністю: float16, int8, int4. Квантизація використовує техніки масштабування (scale factor) та зміщення (zero point) для відображення діапазону float32 у цілочисельний діапазон int8 ([-128, 127] або [0, 255]). Формула: real_value = scale * (quantized_value - zero_point). Вибір scale та zero_point мінімізує похибки обрізання та округлення, які виникають через обмежену розрядність. Модель ResNet-50 важить 98 МБ у FP32. Після int8 квантизації — 25 МБ. Швидкість інференсу на мобільному CPU зростає в 2–4× за рахунок зменшення об'єму даних та використання цілочисельних інструкцій ARM NEON/SVE. Але проста квантизація часто знижує точність сильніше, ніж хотілося б. Правильна квантизація — це підбір методу, аналіз чутливих шарів та верифікація деградації.

Наші показники: понад 5 років досвіду в мобільній оптимізації, 15+ успішних проєктів з квантизації для клієнтів з e-commerce, fintech та IoT. Гарантуємо збереження точності в межах обговорених допусків. Замовте оптимізацію моделі — отримайте консультацію по вашому проєкту. Вартість PTQ для однієї моделі від $500, QAT — від $2000, залежно від складності.

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

Post-Training Quantization (PTQ) — квантизуємо вже навчену модель без донавчання. Два варіанти:

  • Dynamic quantization — ваги в int8, активації обчислюються в float32 у рантаймі. Не потребує калібрувальних даних. Для RNN/Transformer (BERT, LLM) дає хороший приріст. Для CNN менш ефективний.
  • Static quantization — і ваги, і активації в int8. Потребує calibration dataset (100–500 репрезентативних прикладів) для визначення діапазону активацій через KL-дивергенцію або гістограмний метод (MinMax, Entropy). Швидший за dynamic, але потрібна калібровка.

Quantization-Aware Training (QAT) — модель донавчається з «симульованою» квантизацією (використання straight-through estimator). Ваги адаптуються до зниженої точності. Найкраща якість, але потребує доступу до навчального датасету та GPU-часу.

Метод Дані Точність Швидкість Складність
Dynamic PTQ Не потрібні Середня Висока Низька
Static PTQ 100–500 прикладів Висока Дуже висока Середня
QAT Повний датасет Дуже висока Висока Висока
Код Static PTQ в PyTorch
import torch
from torch.quantization import quantize_static, get_default_qconfig

model.eval()
model.qconfig = get_default_qconfig('qnnpack')  # для ARM
torch.quantization.prepare(model, inplace=True)

with torch.no_grad():
    for batch in calibration_loader:
        model(batch)

torch.quantization.convert(model, inplace=True)

TFLite квантизація: full integer

Код TFLite full int8 конвертації
converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS_INT8]
converter.inference_input_type = tf.int8
converter.inference_output_type = tf.int8

def representative_dataset():
    for sample in calibration_data[:500]:
        yield [sample.astype(np.float32)]

converter.representative_dataset = representative_dataset
tflite_model = converter.convert()

Full int8 модель працює на NNAPI та Hexagon DSP — там, де FP16 не підтримується. NNAPI delegation дозволяє виконувати квантизовані моделі на спеціалізованих апаратних прискорювачах (DSP, NPU) з мінімальним споживанням енергії. На Snapdragon 778G через Hexagon — 5–8× швидше CPU при правильній INT8 квантизації. Порівняно з FP32, INT8 модель в 4 рази менше за розміром. За швидкістю INT8 квантизація краще за FP16 у 2 рази на Android.

Core ML квантизація на iOS

import coremltools as ct
from coremltools.optimize.coreml import (
    OptimizationConfig,
    OpLinearQuantizerConfig,
    linearly_quantize_weights
)

mlmodel = ct.models.MLModel("model_fp32.mlpackage")

config = OptimizationConfig(
    global_config=OpLinearQuantizerConfig(
        mode="linear_symmetric",
        dtype=np.int8,
        granularity="per_channel"
    )
)

compressed_model = linearly_quantize_weights(mlmodel, config)
compressed_model.save("model_int8.mlpackage")

per_channel квантизація — окремий scale factor для кожного вихідного каналу згорткового шару. Значно точніше per_tensor (один scale на весь шар). Для CNN зазвичай виправдано, хоча трохи повільніше.

Характеристика Core ML TensorFlow Lite
Формат ваг FP16/INT8 (weight-only) INT8 (full integer)
Калібровка Не потрібна для weight-only Потрібна для static
Підтримка NNAPI Немає (iOS) Так (Android)
Інструмент coremltools TFLiteConverter
Performance ~2× на iPhone ~3-4× на Android з DSP

Як компенсувати втрату точності?

Не всі шари однаково переносять квантизацію. Перший і останній шари мережі, а також шари attention у трансформерах — часто найчутливіші. Інструмент: per-layer sensitivity analysis.

baseline_accuracy = evaluate(float_model, test_loader)

for layer_name in get_all_quantizable_layers(model):
    single_layer_model = quantize_single_layer(model, layer_name)
    layer_accuracy = evaluate(single_layer_model, test_loader)
    sensitivity = baseline_accuracy - layer_accuracy
    print(f"{layer_name}: sensitivity={sensitivity:.4f}")

Шари з високою чутливістю залишаємо у FP32 — це mixed precision quantization. Решту переводимо в INT8. 5–10% «важких» шарів залишаються у FP32, модель втрачає тільки 20–30% об'єму замість 75%, але точність зберігається.

Критерії коректної квантизації

Після квантизації обов'язково:

  1. Точність на тестовому датасеті — порівнюємо top-1/top-5 accuracy з оригіналом. Допустима деградація: FP16 — <0.5%, INT8 — <2%. Якщо більше — переходимо до QAT або mixed precision.

  2. Числова похибка — на однакових входах порівнюємо виходи float та quantized моделі. MSE < 0.01 зазвичай прийнятно.

  3. Швидкість на реальних пристроях — не на симуляторі. Xcode Instruments → Core ML Profiler для iOS, adb shell am instrument + TFLite Benchmark Tool для Android.

  4. Краш-тест — різні входи, edge cases (чорне зображення, дуже яскраве, нестандартний aspect ratio). INT8 моделі іноді overflow на екстремальних входах.

Практичний кейс з нашої практики (наш клієнт)

У нашій практиці ми оптимізували модель детекції об'єктів YOLOv8n для нашого клієнта з e-commerce. У FP32 — 6.3 МБ, 45 мс на iPhone 13. Після Core ML INT8 квантизації — 1.8 МБ, 12 мс. mAP впав з 37.3 до 36.1 — в межах допустимого для задачі. На Snapdragon 8 Gen 1 через TFLite INT8 + NNAPI — 8 мс. Економія на хмарних обчисленнях становить до 75%, що при типових витратах $2000/міс дає $1500 економії щомісяця.

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

  • Аудит вихідної моделі та вибір методу (PTQ/QAT, INT8/FP16).
  • Підготовка калібрувального датасету та налаштування calibration.
  • Аналіз чутливих шарів та налаштування mixed precision.
  • Повна квантизація з верифікацією точності.
  • Вимірювання швидкості на цільових пристроях (iOS/Android).
  • Звіт по деградації та рекомендації.
  • Інтеграція квантизованої моделі у ваш пайплайн.

Згідно з PyTorch documentation (https://pytorch.org/docs/stable/quantization.html), PTQ може зменшити розмір моделі до 4 разів. Для детального вивчення також рекомендуємо TensorFlow Lite post-training quantization guide (https://www.tensorflow.org/lite/performance/post_training_quantization).

Орієнтири за строками та вартістю

PTQ для однієї моделі з верифікацією — 1–2 тижні, вартість від $500. QAT з повним циклом донавчання та тестуванням — 3–6 тижнів залежно від розміру датасету, вартість від $2000. Квантизація знижує витрати на зберігання моделі до 75%.

Зв'яжіться з нами, щоб оцінити ваш проєкт. Ми допоможемо підібрати оптимальний метод і гарантуємо результат.

Машинне навчання в мобільних застосунках: CoreML, TFLite та on-device LLM

Ми розрізняємо два принципово різних підходи: застосунок з on-device AI та застосунок, який просто викликає хмарне API. Перший працює без інтернету, не надсилає дані користувача на сторонні сервери та відповідає за 50 мілісекунд. Другий залежить від затримки мережі та тарифного плану. Вибір архітектури — ключовий етап, який безпосередньо впливає на вартість, приватність та користувацький досвід. Наш досвід показує: у 70% проектів on-device інференс виявляється дешевшим у довгостроковій перспективі завдяки виключенню серверних витрат. Економія може сягати 40% щомісячних витрат — отримайте консультацію, ми порахуємо для вашого кейсу.

Як вибрати між CoreML та TFLite для on-device інференсу?

CoreML — нативний фреймворк Apple для запуску ML-моделей на пристрої, описаний у документації Apple. Підтримує Neural Engine (A11 Bionic та новіші), GPU та CPU як fallback. Моделі конвертуються у формат .mlmodel через coremltools з PyTorch, ONNX або TensorFlow. Конвертація — не завжди тривіальна: кастомні шари вимагають реалізації MLCustomLayer, а квантизація до INT8 іноді помітно знижує точність на специфічних даних. Ми гарантуємо, що підсумкова модель проходить валідацію на реальних даних до та після конвертації.

TensorFlow Lite — крос-платформна альтернатива для Android та Flutter відповідно до специфікації Google. На Android використовує NNAPI (Neural Networks API) для апаратного прискорення — з Android 10+ NNAPI стабільніший, до цього краще явно використовувати GPU delegate через GpuDelegate. Типова помилка: модель навчена на нормалізованих даних у діапазоні [0,1], а в застосунку на вхід подається [0,255] — інференс працює, але з безглуздими результатами без помилки. Ми включаємо модуль автоматичної валідації вхідних даних у SDK.

Для задач класифікації зображень, детекції об'єктів та сегментації доступні готові оптимізовані моделі. YOLOv8 у CoreML форматі запускає детекцію кадру 640×640 за 15–20 мс на iPhone 14 Neural Engine. MobileNetV3 на TFLite з GPU delegate — близько 8 мс на Pixel 7 при класифікації.

Параметр CoreML TFLite
Платформи iOS, macOS, watchOS Android, iOS, Linux, embedded
Апаратне прискорення Neural Engine, GPU, CPU NNAPI, GPU (OpenCL/OpenGL), CPU
Підтримка квантизації FP16, INT8 (з coremltools) FP16, INT8, dynamic range
Кастомні операції Через MLCustomLayer (Swift) Через делегати (Java/Kotlin)
Розмір бандла моделі ~3–5 МБ (MobileNetV2 quantized) ~2–4 МБ

Що робити, якщо потрібна генерація тексту на пристрої?

Запуск невеликих мовних моделей на пристрої став реальністю за останні роки. Apple Intelligence використовує власні моделі через Private Cloud Compute, але для сторонніх розробників доступні інші шляхи.

llama.cpp з Metal backend на iOS — робочий підхід для phi-3-mini (3.8B параметрів, 4-bit квантизація, ~2.3 ГБ). Інференс: 15–25 токенів/секунду на iPhone 15 Pro. Для інтеграції в Swift використовуємо Swift Package llama.swift або обгортку через C-інтерфейс llama.h. Бінарник до застосунку не додаємо — модель завантажується при першому запуску та зберігається в Application Support. Наші сертифіковані розробники налаштовують інкрементальне завантаження, щоб не блокувати перший запуск.

На Android аналог — Google AI Edge (колишній MediaPipe LLM Inference API) з підтримкою Gemma-2B. Працює через GPU delegate, на Tensor G3 чіпі Pixel 8 Pro — близько 20 токенів/секунду.

Порівняння LLM моделей для on-device
Модель Параметри Квантизація Розмір Швидкість (iPhone 15 Pro)
Phi-3-mini (Microsoft) 3.8B 4-bit ~2.3 ГБ 15-25 токенів/с
Gemma-2B (Google) 2B 4-bit ~1.2 ГБ 30-40 токенів/с
TinyLlama 1.1B 4-bit ~0.7 ГБ 60+ токенів/с

Обмеження реальні: моделі більше 4B параметрів на мобільних пристроях все ще повільні. Для складних задач міркування on-device LLM поступається GPT-4o за якістю. Гібридний підхід — on-device для коротких завдань та приватних даних, хмара для складних запитів — часто оптимальний. Оцінимо ваш кейс та запропонуємо баланс продуктивності та приватності — напишіть нам.

Інтеграція OpenAI API та інших хмарних моделей

Для сценаріїв, де cloud inference допустимий, інтеграція OpenAI, Anthropic або Google Gemini — це HTTP клієнт + streaming SSE. У Swift зручно через AsyncThrowingStream для стрімінгових відповідей. У Kotlin — через Flow.

Критично важливо: API-ключі ніколи не зберігаються в бандлі застосунку. Навіть обфускований ключ витягується з IPA за 10 хвилин через strings або frida. Правильна архітектура: мобільний застосунок → власний backend → OpenAI API. Backend контролює rate limiting, логує запити, захищає ключ.

Що входить у роботу (результати)

  • Навчена та квантизована модель під цільовий пристрій (документація за метриками)
  • SDK для інтеграції (Swift/Kotlin/Flutter) з прикладами виклику
  • Тести продуктивності на 3–5 реальних пристроях
  • Інструкція з оновлення моделі OTA
  • Підтримка при проходженні модерації App Store / Google Play (перевірка відповідності Guidelines 4.2, 5.1)
  • 2 тижні технічної підтримки після релізу

Типовий пайплайн проекту

  1. Аналіз завдання — вимірюємо latency, privacy, size, підтримувані пристрої.
  2. Прототипування моделі — в Python, оцінка accuracy на цільових даних.
  3. Конвертація та квантизація — під CoreML/TFLite з валідацією.
  4. Інтеграція в застосунок — модель обгортається в сервісний шар (легко замінювати CoreML → TFLite → хмара).
  5. Тестування — на реальних пристроях, вимір FPS, RAM, батареї.
  6. Деплой — через TestFlight / Firebase App Distribution, моніторинг метрик.

Терміни: інтеграція готової CoreML/TFLite моделі — 1–2 тижні, розробка кастомної моделі з мобільною оптимізацією — від 6 тижнів, on-device LLM чат з персоналізацією — 4–8 тижнів.

Чому ми беремося за складні кейси?

10+ років досвіду в мобільній розробці, 50+ впроваджених AI/ML рішень, гарантія сумісності з актуальними версіями iOS та Android. Всі проекти проходять code review та навантажувальне тестування. У вартість вже входить підготовка документації для модерації та навчання вашої команди.

Зв'яжіться з нами — ми допоможемо вибрати архітектуру та впровадити ML у ваш застосунок під ключ. Замовте аудит наявного рішення — безкоштовно оцінимо потенціал економії серверних витрат. Отримайте консультацію експерта — напишіть нам сьогодні.