On-Device ML: навчання та інференс на пристрої без хмари

Локальний інференс моделі потрібен там, де зв'язок із хмарою нестабільний або дані не можна виносити за периметр. Ми проєктуємо та впроваджуємо on-device ML під ключ: від підбору сценаріїв до передачі робочого рішення з регламентами. Інференс моделі на пристрої скорочує час відгуку та усуває залежність від каналу зв'язку.
Часті запитання

Чому on-device ML не доходить до впровадження

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

Реальний парк — це десятки моделей пристроїв різного класу: те, що впевнено проходить на еталоні, на половині парку або не запускається, або втрачає якість.

Перше вузьке місце — обмеження пам'яті. Ваги, проміжні тензори й сам інтерфейс застосунку ділять один бюджет, тому локальний вивід моделі витісняє сусідні процеси або витісняється сам.

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

Друге — затримка відгуку. На пристрої модель працює не сама: вона конкурує за обчислювач і ділить бюджет з основним застосунком, а під навантаженням відгук зростає непередбачувано.

Користувач бачить «підвисає», команда — невиконану вимогу щодо часу реакції, хоча на стенді все вкладалося із запасом.

Третє — різнорідність парку разом із роботою без мережі. Одна й та сама збірка поводиться по-різному на різних моделях пристроїв, а оновити модель там, де зв'язку не буває тижнями, неможливо: не надходить ні телеметрія про деградацію, ні відкат у разі невдалої заміни ваг. Підтримка розповзається, а автономність перетворюється на сліпу зону.

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

Що дає локальний вивід моделі на пристрої

Локальний інференс означає, що ваги моделі лежать усередині застосунку, а обчислення відбувається на самому пристрої — нейропроцесорі, графічному ядрі або центральному процесорі.

Модель один раз компілюється під цільову платформу та квантується: вага артефакту скорочується в рази, а точність на типових задачах залишається прийнятною.

Відгук перестає залежати від каналу зв'язку. Невелика модель відповідає за десятки мілісекунд, і цей час однаковий як за доброго, так і за поганого сигналу — частка відмов через зв'язок прямує до нуля, інтерфейс поводиться передбачувано.

Робота офлайн стає не окремим режимом, а звичайним станом: склад, виїзд за місто, підвал без покриття.

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

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

Різні прискорювачі закриває TensorFlow Lite: один інтерфейс виводу на кількох платформах, тому зміна моделі або пристрою не потребує переписування шару інференсу.

Варіанти запуску ML-моделі: порівняння підходів

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

Варіант Коли підходить Обмеження
Готова модель без змін Один клас пристроїв, помірні вимоги до якості, потрібен швидкий старт Архітектура не враховує слабкі місця конкретного заліза: частина шарів працює вхолосту, пам'ять витрачається із запасом
Адаптація під пристрій: стиснення та квантування Модель упирається в пам'ять або в час відгуку, важлива витрата батареї Потрібне калібрування на реальних даних: квантування без втрати якості підтверджується прогоном контрольного набору, а не налаштуванням за замовчуванням
Гібридна схема виводу з періодичною синхронізацією Модель донавчається на даних пристрою або оновлюється централізовано Складніша експлуатація: версіонування ваг, розв'язання конфліктів між пристроями, відкат невдалого оновлення

На практиці режими комбінують: стиснена модель закриває базовий інференс, а рідкісні важкі випадки йдуть у гібридну схему. Загальне проміжне представлення на кшталт ONNX дає змогу переносити ту саму модель між середовищами виконання, не перенавчаючи її під кожну платформу заново.

Критерій вибору рахується за двома числами: розмір парку пристроїв і частота оновлення ваг.

Поки модель стабільна, достатньо готового варіанта; щойно з'являється регулярне донавчання або жорсткі обмеження щодо пам'яті, адаптація та гібридна схема окупаються за рахунок меншої кількості відмов на пристроях.

Етапи впровадження: від аудиту сценаріїв до передачі

Порядок робіт тут — не бюрократія, а спосіб не переробляти модель двічі. On-device ML обмежений пам'яттю, теплом і часом автономної роботи, тому рішення, зібране під усереднений пристрій, розвалюється на живому парку. Тому йдемо від сценаріїв до заліза: кожен наступний етап спирається на заміри попереднього.

  1. Аудит парку пристроїв і сценаріїв. Збираємо моделі, версії системи, доступну пам'ять і те, де користувач не готовий чекати. На виході — список сценаріїв, які пристрій реально потягне.
  2. Схема виводу. Вирішуємо, що рахується на самому пристрої, а що йде на сервер: важка модель раз на добу або компактна на кожну дію. Окремо фіксуємо, які дані взагалі не залишають пристрій.
  3. Збірка й оптимізація моделі. Стиснення ваг, донавчання під задачу, кеш проміжних результатів. Мета — вкластися в пам'ять із запасом, а не впритул.
  4. Тестування на реальному парку. Прогрів, довга сесія, нагрівання, розряд, поведінка за нестачі пам'яті. Дивимося частку невдалих виводів і хвости затримок, а не середнє.
  5. Передача рішення. Код, схема виводу, регламент оновлення моделі на пристроях, метрики для моніторингу.
  6. Навчання команди замовника. Розбираємо з інженерами, як перенавчити модель, як відкотити оновлення і що дивитися в логах, — далі рішення живе без нас.

Пропуск будь-якого етапу повертається відкатами на живому парку.

Що залишається в команди: конфігурації, схеми, регламенти

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

  • Конфігурації збірки моделі — файли, з яких збірка відтворюється з нуля: параметри квантування під цільові класи пристроїв, склад вивантажуваних шарів, контрольні суми ваг.
  • Схема інтеграції — де модель викликається в застосунку: точки входу, робота у фоні, обмеження щодо пам'яті та живлення, поведінка за нестачі ресурсів.
  • Політики доступу до даних — що залишається на пристрої й не залишає його, що і в якому вигляді йде в телеметрію, правила знеособлення, шифрування локального сховища.
  • Регламент оновлення моделі — як нова версія доїжджає до пристроїв: розгортання на малу частку аудиторії, критерії зупинки, відкат на попередню збірку без перевстановлення застосунку.
  • Документація на рішення — архітектурна схема, склад залежностей, обмеження щодо пам'яті та теплового режиму, перелік сценаріїв відмови й того, що бачить користувач.
  • Набір приймальних перевірок — прогон на реальному парку пристроїв: якість відповіді, час відгуку, деградація за розряду й слабкого сигналу.

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

Кейс: розпізнавання на складі без зв'язку з хмарою

Складський контур — це ангари, стелажні зони й холодильні камери, де сталого каналу зв'язку просто немає.

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

Ми перенесли модель на самі термінали: інференс виконується локально через TensorFlow Lite, кадр не залишає пристрій. Хмару залишили тільки для синхронізації довідників і накопичення знеособленої статистики — нічний обмін пакетами замість постійного потоку.

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

Що змінилося в метриках

  • Відгук: замість секунд очікування й черг у пік — локальна відповідь, що не залежить від завантаження мережі.
  • Доступність: 100% робочих сценаріїв виконуються без зв'язку, раніше — лише частина, решта чекала каналу.
  • Клас відмов «сервер не відповів» пішов з експлуатаційного зведення; залишилися фізичні — забруднена оптика, знос витратних матеріалів.
  • Точність розпізнавання після донавчання на реальних знімках складу: з ~92% до ~97% на еталонній вибірці.
  • Розбіжності в обліку до закриття зміни скоротилися в рази — звірка йде на місці, а не постфактум.

Стійкість до обривів зв'язку

Окремо перевірили відновлення: термінал переживає втрату мережі, перезапуск і розряд без втрати накопичених операцій — черга піднімається з локального журналу. Перебудовувати склад під покриття не довелося: обчислювальний вузол тепер сам пристрій.

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

Межа проходить не за тим, де рахується результат, а за тим, де змінюються ваги моделі. Локальний вивід — це зафіксована модель на пристрої: відгук за частки секунди, робота без мережі, але досвід експлуатації вона не накопичує.

Донавчання на сервері — зворотний випадок: ваги перезбираються за агрегованими даними, зате кожне оновлення потрібно доставити на парк пристроїв і перевірити сумісність.

Ключове питання — де зберігати дані навчання. Персональні дані (голос, зображення, листування) розумніше не вивозити з пристрою: тоді донавчання йде федеративно, назовні йдуть тільки оновлення ваг, а не сирі записи. Якщо дані знеособлені, серверний контур дає більше — загальний досвід усіх пристроїв одразу.

Схема Коли підходить Обмеження
Локальний вивід Немає мережі, критичний відгук, дані чутливі Модель не адаптується без оновлень
Гібрид: вивід на пристрої, донавчання на сервері Потрібні і персоналізація, і загальний досвід парку Доставка ваг і контроль версій
Вивід у хмарі Модель змінюється часто, зв'язок стабільний Затримка на передавання, дані залишають пристрій
Федеративне донавчання Дані не можна вивозити Складніше налагодження, потрібен облік внеску пристроїв

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

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

Технічні сумніви перед стартом роботи

Питання на цьому етапі зазвичай про інженерію, а не про саму ідею. Нижче — як закриваються типові сумніви: ресурси парку, оновлення моделі без перевстановлення, розкид якості виводу, донавчання на малих даних і вбудовування в готовий застосунок.

Частина парку слабша — застосунок встане?

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

Модель оновлюється без нової версії застосунку?

Ваги виносимо в змінний артефакт, а не вшиваємо в збірку: модуль вбудовується в готовий застосунок і звіряє маніфест версії під час запуску. Оновлення підтягується у фоні, перемикання відбувається після перевірки контрольної суми, а попередній артефакт залишається точкою відкату.

Чому на різних пристроях відповіді розходяться?

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

Даних для донавчання мало — чи є сенс?

Є, якщо навчати не всю модель: основну частину заморожуємо, а поверх базової моделі донавчаємо невеликий адаптер на скромному розміченому наборі. Коли даних немає зовсім, починаємо зі збору — розмітка спірних випадків дає матеріал для наступної ітерації.

Обговоримо задачу й повернемося з оцінкою та планом

Щоб повернутися з оцінкою строків і схемою робіт, а не із загальними словами, потрібен ваш вхід за кількома пунктами. Нижче — що описати з боку замовника: цього достатньо, щоб ми зібрали план і одразу визначили, як перевірятимемо результат.

  • Задача й дані: який сигнал на вході (зображення, звук, текст, показання датчиків), обсяг вибірки, чи є вимога не виносити дані за межі пристрою.
  • Цільовий парк: класи й моделі пристроїв, частка старих версій, режим роботи — одиночні запити чи потік, запас пам'яті та енергії.
  • Якість: метрика, за якою вважаємо рішення робочим, допустима частка помилок і сценарії, де помилка критична.
  • Робота без мережі: чи потрібен повністю офлайн-режим, як модель оновлюється на пристрої та як відкочується до попередньої версії.
  • Інтеграція: із чим стикується on-device ML — камера, мікрофон, застосунок, бортова система, які доступи й дозволи вже є.
  • Критерії приймання: набір сценаріїв для прогону на узгодженому парку й те, що вважаємо пройденим етапом.
  • Пілот на обмеженому парку: скільки пристроїв виділяєте, за який строк збираємо заміри та за якими ознаками вирішуємо масштабувати.

Далі ми повертаємося з планом робіт: підготовка й розмітка даних, підбір моделі під обмеження конкретного пристрою, перевірка на реальному парку, схема оновлення та замір результату за узгодженими критеріями.

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

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

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

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1394
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1369
  • Розробка логотипу компанії B2B Advance
    Розробка логотипу компанії B2B Advance
    816
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1142