Обернуть модель в контейнер и пульнуть её через MQTT на железку где-нибудь в карьере — это не инженерия. Это распределённая бомба замедленного действия. Главный миф индустриального машинного обучения звучит так: можно взять привычные облачные пайплайны, натянуть на них K3s и просто растянуть до границы сети.
Вы верите, что узел всегда онлайн, а если отвалится — то ненадолго. Вы надеетесь, что железо на всех локациях одинаковое. Спросите среднего дата-саентиста про обновление модели, и он расскажет про красивые дашборды и прозрачный роутинг трафика. В промышленности прозрачный роутинг заканчивается там, где экскаватор перебивает оптический кабель.
В реальности MLOps для парка edge-узлов: как обновлять ИИ на сотнях точек и не словить разнос версий — это задача из области хардкорной системной инженерии, где физика ломает абстракции. Индустриальный edge — это суровая распределенная система с фрагментированным состоянием. У вас может быть двести узлов: часть на старых вычислителях, часть на новых платах, а где-то вообще стоят промышленные ПК без аппаратных ускорителей.
MLOps для парка edge-узлов: как обновлять ИИ на сотнях точек и не словить разнос версий в продакшене
Версионирование в облаке сводится к тегу в MLflow. На эдже версионируется монолитный слепок среды. У вас есть веса нейросети, версия инференс-движка, бинарники драйверов видеокарты и конфигурация пайплайна предобработки. Разнос версий — это не просто разные веса в разных городах. Это ситуация, когда на объекте работает модель, принимающая тензоры 640x640, а конфигурация камеры на этом же узле аппаратно кропает картинку до 512x512. В облаке вы бы поймали это на этапе интеграционных тестов. На краю сети узел начнет молча гнать мусорный предикт. Чтобы избежать этого, мы переходим от версионирования отдельных артефактов к версионированию графов состояний аппаратуры целиком. Если прилетят только новые веса, а рантайм на узле остался старым, инференс упадёт с сегфолтом.
Выкатка обновлений по воздуху на промышленные объекты требует параноидального пессимизма. Никакого деплоя по кнопке для всего флота. Внедряется жесткое канареечное развертывание, привязанное к физической топологии. Канарейка на edge отличается от канарейки в вебе. Вы не можете перенаправить пять процентов пользовательского трафика на новую модель, потому что трафик прибит гвоздями к физической локации. Сначала новая модель летит на три котельные, где дежурит вменяемый персонал. Мы ждем несколько смен. Если метрики инференса не деградируют, раскатываем на десять процентов сети.
Если на каком-то этапе узел начинает сыпать аномалиями или падает по таймаутам, срабатывает аппаратный откат.
Человек не должен ехать по зимнику двести километров, чтобы перезагрузить зависшую железку.
Для этого на устройстве всегда поддерживается A/B разметка разделов. Новая модель и рантайм пишутся в пассивный слот. Устройство перезагружается, активируя аппаратный watchdog таймер. Если после старта процесс инференса не поднимается за отведенные секунды или локальный health check выдает ошибку, таймер аппаратно сбрасывает систему, и загрузчик молча откатывается на старую стабильную версию из активного слота. Центральный сервер получает только короткую телеметрию о факте автоматического отката.
Связь, дрейф данных и цена тотального контроля
Куст скважин может потерять спутниковую связь на три недели. Метель, авария на вышке питания, трактор. Очередь обновлений в этот момент не должна превращаться в свалку транзакций. Если узел был офлайн месяц, он не должен скачивать и накатывать по очереди семь промежуточных версий модели. Архитектура обязана быть строго декларативной. Центральный хаб знает целевое состояние, узел при появлении сети сообщает текущее. Разница вычисляется и выкачивается одним дельта-патчем. А пока связи нет, старая модель продолжает локально управлять процессом, потому что остановка производства всегда стоит дороже неидеального предсказания.
С мониторингом качества отдельная боль. Вы не можете гнать сырые гигабайты видео с карьерных самосвалов в центр для оценки дрейфа данных. Канала просто не хватит, а спутниковая связь стоит космических денег.
Поэтому edge-узел сам становится аналитиком. Нейросеть вместе с предсказанием выдаёт скор уверенности, а легковесные эвристики считают статистику по распределению фичей прямо в оперативной памяти. В облако улетают только агрегированные метрики размером в пару килобайт за сутки. Если скор падает ниже заданного порога на протяжении рабочей смены, узел сигнализирует о дрейфе. Он запрашивает переобучение и прикладывает к запросу несколько репрезентативных кадров-аномалий, а не льет в трубу весь видеопоток.
Сборка такой системы — это честный трейд-офф. Централизованный MLOps требует сложной инфраструктуры и инженеров, умеющих скрещивать ядро Linux с тензорными вычислениями. Если у вас три завода, это откровенный оверкилл. Напишите базовые скрипты конфигурации и не мучайте бизнес. Но когда счет идет на сотни точек, без единого центра управления вы утонете в зоопарке версий и ручном дебаге на морозе. При этом полностью автономный пайплайн выкатки в тяжелой промышленности — это преступная халатность. На критичных узлах перед деплоем всегда стоит ручной гейт. Никакой алгоритм не имеет права самостоятельно обновить логику управления турбиной без апрува инженера.
У нас в Morana Labs при построении mlops-production-ml систем для индустриальных флотов мы опираемся именно на этот фундамент: декларативные состояния, жесткий откат через watchdog и локальная агрегация метрик на ребрах. Это не так глянцево звучит на ИТ-конференциях, зато безотказно работает там, где цена ошибки измеряется остановкой реального производства.