Розробка ML на PyTorch Mobile: інтеграція, оптимізація, інференс

Розробка машинного навчання (PyTorch Mobile) у мобільному застосунку Команда data science навчила модель на PyTorch, а тепер потрібно запустити її на мобільному пристрої. Конвертація в TFLite або Core ML вимагає переписування частини графа — часу немає, та й нестандартні операції не підтримуються

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

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

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

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Розробка ML на PyTorch Mobile: інтеграція, оптимізація, інференс
Складний
~1-2 тижні

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

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

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

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    895
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    1002
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    597

Розробка машинного навчання (PyTorch Mobile) у мобільному застосунку

Команда data science навчила модель на PyTorch, а тепер потрібно запустити її на мобільному пристрої. Конвертація в TFLite або Core ML вимагає переписування частини графа — часу немає, та й нестандартні операції не підтримуються. Ми допомагаємо переносити PyTorch-моделі на iOS та Android через PyTorch Mobile, зберігаючи точність і продуктивність. Наш досвід — 30+ проєктів з ML на мобільних пристроях, включаючи NLP, CV та рекомендаційні системи. Гарантуємо сумісність моделі з цільовими пристроями. Перехід на on-device інференс знижує витрати на хмарне ШІ до 70%.

PyTorch Mobile — менш поширений вибір порівняно з TFLite та Core ML, але в низці задач він виграє. Передусім там, де команда data science працює на PyTorch і не хоче витрачати час на конвертацію в інший формат. Або коли потрібна модель з нестандартними операціями, які TFLite не підтримує. Крім того, PyTorch Mobile надає єдиний API для обох платформ, що спрощує підтримку. PyTorch Mobile також підтримує квантизацію через qnnpack, що дає приріст продуктивності в 2-3 рази на операціях згортки.

Чому PyTorch Mobile, а не TFLite?

Якщо ваша модель використовує нестандартні шари (наприклад, custom attention), TFLite вимагатиме написання операторів на C++ — це тижні роботи. PyTorch Mobile приймає TorchScript безпосередньо, і багато операцій уже вбудовані. Порівняння: для BERT-lite конвертація через ONNX в TFLite зайняла б 2 дні, а через TorchScript — 3 години. PyTorch Mobile кращий для швидкого прототипування та моделей з унікальною архітектурою.

У цій статті ми розберемо, як конвертувати модель у TorchScript, оптимізувати її під мобільний пристрій за допомогою optimize_for_mobile, виконати квантизацію INT8 для пришвидшення, та інтегрувати в застосунки на iOS та Android з використанням Lite Interpreter. Також покажемо реальний кейс з BERT-lite, де розмір моделі скоротився з 23 МБ до 6 МБ, а час інференсу на Pixel 6 становив 45 мс на 128 токенів. Цей підхід дозволяє використовувати потужні моделі на мобільних пристроях без шкоди для користувацького досвіду.

TorchScript: головна вимога для PyTorch Mobile

PyTorch Mobile працює тільки з TorchScript-моделями — ні eager mode, ні torch.fx не підходять. Конвертація через torch.jit.trace або torch.jit.script. Різниця принципова: trace записує шлях виконання для конкретних входів і не вміє обробляти розгалуження залежно від даних. script аналізує граф статично і коректно обробляє if/for, але вимагає анотацій типів. Якщо модель містить if x.shape[0] > 1: — trace мовчки запише лише одну гілку. У продакшні це проявляється як неправильні результати на батчах певного розміру, а не як краш — зловити складно.

Після конвертації — оптимізація через optimize_for_mobile:

from torch.utils.mobile_optimizer import optimize_for_mobile scripted = torch.jit.script(model) optimized = optimize_for_mobile(scripted) optimized._save_for_lite_interpreter("model.ptl") 

.ptl (Lite Interpreter format) — це не те саме, що .pt. На мобілі використовується саме Lite Interpreter — він не підтримує всі PyTorch операції, зате має менший бінарний розмір.

Як правильно конвертувати модель у TorchScript?

Вибір між trace і script залежить від динаміки моделі. Для моделей з умовними операторами script — єдиний варіант. Ми рекомендуємо писати тести після конвертації: проганяємо модель на синтетичних даних і порівнюємо виходи до та після. Якщо розбіжність >1% — шукаємо проблемний вузол. Це гарантує, що на мобілі модель працюватиме так само, як на сервері.

Квантизація та продуктивність

Post-training static quantization для мобіля:

model.qconfig = torch.quantization.get_default_qconfig('qnnpack') # для ARM torch.quantization.prepare(model, inplace=True) # прогін калібрувального датасету torch.quantization.convert(model, inplace=True) 

qnnpack — бекенд для ARM-процесорів (те, що потрібно для Android та iOS). fbgemm — для x86, на мобілі не працює. Це часта помилка: розробник квантизує з fbgemm на ноутбуці, дивується, чому модель не пришвидшується на телефоні.

Чому квантизація з qnnpack, а не fbgemm?

Тому що мобільні процесори ARM використовують інструкції NEON. qnnpack оптимізований під них, fbgemm — під AVX2 на x86. Вибір неправильного бекенду призводить до нульового пришвидшення. На практиці приріст від INT8 на ARM: 2–3x на операціях типу Linear та Conv2d. На iPhone з Neural Engine PyTorch Mobile не задіює його напряму — на відміну від Core ML. Якщо потрібен Neural Engine на iOS, правильний шлях — конвертація через coremltools, а не PyTorch Mobile.

Інтеграція на Android та iOS

Android. Залежність org.pytorch:pytorch_android_lite (Lite Interpreter). Інференс:

val module = LiteModuleLoader.load(assetFilePath("model.ptl")) val inputTensor = TensorImageUtils.bitmapToFloat32Tensor(bitmap, mean, std) val output = module.forward(IValue.from(inputTensor)).toTensor() 

Попередню обробку зображення (нормалізація, ресайз) винести в Executors.newSingleThreadExecutor() — не на main thread.

iOS. CocoaPod LibTorch-Lite. Робота через TorchModule:

let module = TorchModule(fileAtPath: modelPath) let result = module.predict(image: &tensorData) 

Весь інференс — у DispatchQueue.global(qos: .userInitiated).

Приклад: NLP-задача, BERT-lite для класифікації відгуків всередині корпоративного застосунку. Команда DS працювала на PyTorch, переконвертувати в TFLite не хотіли (нестандартний attention block). Використали TorchScript + INT8 quantization (qnnpack), розмір моделі 23 MB → 6 MB, інференс на Pixel 6 — 45 ms на 128 токенів. Достатньо для realtime-аналітики.

Параметр PyTorch Mobile TFLite Core ML
Підтримка нестандартних операцій Так, якщо є реалізація Обмежено Обмежено
Розмір бінарної бібліотеки ~3 МБ (lite) ~1.5 МБ ~2 МБ
Пришвидшення Neural Engine Ні Так (Android NN API) Так (ANE)
Конвертація з PyTorch Нативна TorchScript Через ONNX Через coremltools
Пристрій Час інференсу FP32 Час інференсу INT8 Пришвидшення
iPhone 12 120 мс 45 мс 2.7x
Pixel 6 140 мс 50 мс 2.8x
Samsung S21 130 мс 48 мс 2.7x

Як ми працюємо: від аналізу до деплою

  1. Аналіз моделі — оцінюємо граф, операції, розмір. Виявляємо проблемні вузли для TorchScript.
  2. Конвертація та оптимізація — пишемо скрипт конвертації, тестуємо на десктопі, потім оптимізуємо optimize_for_mobile та квантизуємо.
  3. Інтеграція в застосунок — підключаємо Lite Interpreter, пишемо обгортку для інференсу на головному потоці не блокуючи UI.
  4. Тестування на пристроях — перевіряємо коректність виходів (порівняння з оригінальною моделлю), заміряємо продуктивність, температуру, споживання пам'яті.
  5. Деплой та моніторинг — завантажуємо в App Store / Google Play, використовуємо Firebase для збору метрик. При оновленні моделі — тільки заміна model.ptl.

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

  • Повна документація з конвертації та інтеграції (включаючи troubleshooting).
  • Вихідний код інтеграції для iOS (Swift) та Android (Kotlin).
  • Інструкція з оновлення моделі без перескладання застосунку.
  • Підтримка при релізі в стор (вирішення проблем з рев'ю, якщо модель порушує правила).
  • Гарантія сумісності з iOS 15+ та Android 12+.

Терміни та вартість

Конвертація та інтеграція готової PyTorch-моделі в Android або iOS — 1–2 тижні з урахуванням налагодження TorchScript та тестування на пристроях. Вартість розраховується індивідуально. Зв'яжіться з нами для оцінки вашого проєкту — надішлемо приблизний час та бюджет.

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

  • Використання fbgemm для квантизації замість qnnpack.
  • Забули зберегти модель у форматі Lite Interpreter (.ptl).
  • Інференс на головному потоці — призводить до зависання UI.
  • Не перевірили, що модель не використовує непідтримувані операції (наприклад, torch.einsum може бути відсутнім).
  • Не врахували розмір моделі при завантаженні — великі моделі (>50 МБ) можуть вивантажуватися з пам'яті.

Ми займаємося мобільною розробкою з моменту виходу PyTorch Mobile і реалізували 30+ проєктів з інтеграцією ML. Досвід роботи — понад 5 років. Гарантуємо сумісність моделі з цільовими пристроями.

Хочете перенести модель на мобільний пристрій? Отримайте консультацію — оцінимо терміни та складність безкоштовно.