Разработка AI для встраиваемых систем (Embedded AI)

Модель, обученная в облаке, на реальном устройстве часто теряет точность и скорость. Мы разрабатываем embedded AI под ключ: готовим модель к ограничениям устройства, проверяем на реальных данных и передаём работающее решение. Цикл внедрения сокращается, а ваша команда не тратит месяцы на эксперименты.
Часто задаваемые вопросы

Embedded AI: где модель ломается на реальном железе

Лабораторная точность и поведение модели на устройстве — две разные величины. В embedded AI модель работает там, где нет запаса по питанию, памяти и времени, а входные данные приходят с реальных датчиков, а не из подготовленной выборки. Ниже — точки отказа, которые наши инженеры чаще всего видят при выводе модели на устройстве.

Первый и самый недооценённый — нестабильный канал связи. Устройство не может постоянно обращаться к серверу: связь пропадает, ответ приходит с задержкой, часть событий теряется. Если логика построена на постоянном обмене с облаком, система перестаёт реагировать именно в тот момент, когда реакция нужна. Поэтому контур делят: критичное считается локально, тяжёлая обработка уходит на сервер, когда канал есть.

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

Третье — расхождение качества модели. На стенде метрики держатся, на объекте падают: другой сенсор, шум, иное освещение, смещённое распределение данных. Мы фиксируем это заранее — собираем контрольный набор из реальных записей и сравниваем результат до выката на весь парк устройств. Для запуска используем ONNX Runtime и родные средства платформы, чтобы одна и та же модель шла и на сервер, и на устройство без пересборки. Дальше разбираем, как это закрывается: контрольные наборы, профилирование на устройстве и план деградации при слабом канале.

Что даёт вывод модели на самом устройстве

Локальный вывод модели на устройстве переносит обработку внутрь контура: данные с сенсоров не покидают плату, а решение принимается там, где возникло событие. Автономная работа без сети становится штатным режимом, а не аварийным — устройство продолжает распознавать, детектировать и фильтровать сигнал без обращения к внешнему сервису.

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

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

Нагрузка на канал перестаёт зависеть от объёма исходных данных: наружу уходят агрегаты, события и телеметрия состояния, а не сырой поток. При масштабировании парка полоса и трафик растут медленнее, чем число устройств.

Проверять перед стартом стоит четыре вещи: качество модели на целевом железе, а не на демонстрационном стенде; запас памяти и вычислителя под пиковую нагрузку; поведение при деградации и способ обновления модели на парке устройств; метрики приёмки.

Embedded AI: сравнение режимов развёртывания

Три режима — это не уровни зрелости, а разные точки на шкале «сколько вычислений допускает площадка» и «где допустимо хранить данные». Выбор диктуют не предпочтения команды, а бюджет питания и памяти узла, стабильность канала до центра и требования к тому, что вообще может покинуть объект. Ниже — сопоставление по применимости и ограничениям.

Режим Где считаются и хранятся данные Когда подходит Ограничения
Развёртывание на устройстве Модель и данные не покидают контроллер, буфер хранится локально Жёсткие требования к задержке отклика, нет устойчивого канала, данные нельзя вывозить Ограничения по ресурсам узла: модель приходится ужимать и упрощать, обновления раскатываются на площадке
Объектный шлюз Считает шлюз, он же хранит буферы и архив, в центр уходят агрегаты и события Несколько устройств на площадке, нужен общий архив и переиспользование одной модели Шлюз — единая точка отказа, нужен запас по питанию и регламент синхронизации с центром
Централизованная обработка Все данные идут в центр, там же хранятся и переобучаются модели Парк небольшой, канал надёжный, модели меняются часто Зависимость от сети: при обрыве площадка слепнет, растёт трафик и требования к приватности

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

Как идёт проект: от аудита модели до передачи

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

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

Комплект поставки: артефакты, схемы, регламенты

Комплект поставки — это не архив с файлами, а рабочая система, которую ваша команда ведёт дальше сама. Каждый артефакт проверяем на практике: инженер заказчика вносит изменение в модель или правило и прогоняет его по тому же контуру, что и мы. Ниже — что остаётся у вас на руках после сдачи.

  • Конфигурации сборки и развёртывания: воспроизводимая сборка прошивки и моделей, переменные окружения, скрипты выката на целевые устройства.
  • Схема потоков данных: путь от датчика через предобработку до вывода модели и обратно, с пометками, где данные буферизуются и что происходит при обрыве связи.
  • Политики доступа: роли, ключи, границы сегментов — что устройство отдаёт наружу, что считает локально и кто вправе заменить модель.
  • Регламент обновления моделей: порядок выпуска новой версии, проверка на эталонном наборе, критерии отката и хранение предыдущих сборок для быстрого возврата.
  • Документация по архитектуре: границы модулей, зависимости, ресурсные лимиты и известные ограничения решения.
  • Обучение команды: разбор кода, совместная правка, передача процедур отладки прямо на устройстве.
  • Журнал метрик и проверок: что и как часто измеряем, какие отклонения считаем поводом откатить обновление.

Передача закрыта тогда, когда ваши инженеры без нашего участия выпускают новую версию модели и возвращают предыдущую.

Кейс: линия контроля качества перешла на локальный вывод

Заказчик — производство с тремя линиями розлива. Контроль качества держался на выборочном осмотре оператором и камере, которая отправляла кадры на сервер за пределами цеха. При узком канале кадры копились в буфере, и вердикт по бутылке приходил, когда она уже стояла на паллете: отозвать её с отгрузки означало ручную переборку партии. Доля пропущенного брака держалась на 3-4%, а сбой вывода замечали по падению темпа — в среднем через 6-8 минут.

Что сделали

Вынесли модель на промышленный контроллер NVIDIA Jetson прямо у конвейера и замкнули поток кадров внутри цеха: ни один кадр не уходит за пределы объекта, наружу идёт только журнал событий и агрегированная статистика. Порог уверенности подобрали под реальные классы дефектов, чтобы не резать годную продукцию, а сигнал на отсекатель подаётся за доли секунды — брак снимается с ленты до упаковки.

Что стало

  • Пропущенный брак на отгрузку — с 3,8% до 0,7%: вердикт выносится по каждой единице, а не по выборке за смену.
  • Время реакции на сбой — с 6-8 минут до 2-3 секунд: отказ ускорителя виден сразу, линия встаёт по сигналу, а не по факту пустой ленты.
  • Объём данных за пределы объекта — с полного видеопотока до журнала событий: на внешнее хранилище уходят только метки дефектов и счётчики.
  • Ложные отбраковки — минус треть после калибровки порога на накопленных дефектах линии.

Метрики собраны на одном участке с его собственным набором дефектов — на другой линии цифры будут свои, поэтому замер делаем до и после на реальных сменах.

Чем отличается вывод на устройстве от обработки на шлюзе

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

Задержку и автономность решает устройство: реакция укладывается в один кадр, и логика продолжает работать при потере связи — это важно для блокировок и аварийной остановки. Плата за это — урезанная модель: квантование, жёсткие лимиты по памяти, отбор архитектур под конкретный ускоритель, чем и занимаются среды вроде TensorFlow Lite. Шлюз позволяет держать модель крупнее и сводить данные нескольких датчиков, но добавляет зависимость от канала связи и питания узла.

Приватность данных. При выводе на устройстве сырьё не покидает корпус — по сети идут только события, поэтому видео и биометрия не требуют отдельного контура обработки. На шлюзе сырой поток выходит за пределы устройства, а если у шлюза есть выход в облако, граница персональных данных расширяется на всю площадку.

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

На практике чаще выбирают гибрид: лёгкий детектор на устройстве отсекает фон, шлюз уточняет спорные случаи. Итоговое решение диктуют задержка, автономность, требования к приватности и размер парка, который придётся обслуживать при каждой смене модели.

Частые вопросы: ограничения, риски, сопровождение

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

Точность после переноса падает — как вы её удерживаете?

Квантование ускоряет вывод, но меняет распределение результатов. Мы прогоняем эталонный набор данных через исходную и скомпилированную модель и сравниваем расхождение по каждому классу, а не среднее по выборке. Если деградация выходит за согласованный порог, меняем схему квантования или оставляем чувствительные слои в полной точности.

Встанет ли решение на оборудование, которое у нас уже стоит?

Сначала инвентаризация: какие ускорители и ресурсы реально доступны на парке, а не заявлены в документации. Часть задач закрывается без замены железа — модель переводится в более компактный формат. Если ускорителя нет, вывод считаем на центральном процессоре, а на устройстве оставляем предобработку. Вывод по совместимости даём до старта работ.

Как обновлять модели на устройствах без сети?

Для парка без постоянного канала обновление идёт по схеме с двумя копиями: новая версия записывается рядом с рабочей и активируется после проверки целостности. Неудачное обновление откатывается без выезда на объект. Веса и пороги срабатывания поставляются отдельными пакетами, поэтому правка правил не требует пересборки модели.

Сопровождение строим вокруг дрейфа входных данных: метрики на новых партиях устройств проверяются, а пересборка запускается по факту изменения условий на объекте, а не по календарю.

Обсудим задачу и вернёмся с планом работ

Обсуждение начинаем не с презентации, а с разбора задачи: какая платформа целевая, какие у неё ограничения по памяти, питанию и тепловому режиму, считается ли модель прямо на устройстве или рядом с ним. Именно это решает, уложится ли решение в квантование и прореживание весов или потребуется гибридный контур с выносом части вычислений.

Чтобы оценка была инженерной, а не «на глаз», от вас нужен минимум:

  • целевая платформа и её ограничения: доступная память, питание, тепловой режим корпуса;
  • класс задачи: распознавание, детекция объектов, прогноз по показаниям датчиков, обработка сигнала;
  • какие данные уже есть: сырые записи, размеченные наборы, логи сенсоров, их объём и качество разметки;
  • требования к автономности и времени реакции на событие, режим работы устройства;
  • условия эксплуатации и класс отказов, которые недопустимы на объекте;
  • кто с вашей стороны принимает решения по архитектуре и подписывает приёмку этапов.

По итогам разговора возвращаемся не общими словами, а рабочим пакетом: план работ с этапами и точками приёмки, оценка сроков по каждому этапу, состав команды с разделением зон ответственности — модель, встраиваемая часть, приёмочные испытания. Отдельно описываем сценарий пилотного проекта: какой узел проверяем первым, на какой выборке и по какому показателю считаем результат достигнутым. Плюс перечень рисков с честной формулировкой, где точность модели упирается в ресурсы платформы.

Опишите задачу в свободной форме — что за устройство, что оно должно понимать и в каких условиях работать. Вернёмся с оценкой сроков и планом работ.

Направления AI-разработки

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1394
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1368
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    815
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1139