К содержимому
MoranaLabs.
Инженерные гайды4 мин чтения3 просмотра

Edge AI на устройстве: инференс нейросети на Jetson и Raspberry Pi без интернета 

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

0xReality

850 миллисекунд. Таков p99 задержки облачного инференса при отправке 1080p-кадра с промышленной площадки через средний LTE-модем. За 850 миллисекунд конвейер протаскивает деталь на два метра вперед, и пневматический толкатель бьет в пустоту. В MoranaLabs, где мы строим industrial AI и high-load системы на железе клиента, с этой цифры начинается каждый второй аудит. Индустриальный edge — это не дань хайпу. На объекте может не быть связи. Канал может лечь от наводок соседнего цеха. Облако может уйти в maintenance. Но конвейер останавливаться не должен. Никогда.

Облако — это иллюзия контроля

Зачем тащить тяжелые вычисления на слабые железки? Ради детерминированности. Отправляя данные во внешний контур, вы подписываетесь на непредсказуемый джиттер сети. Вы платите за трафик, упираетесь в пропускную способность аплинк-канала и нарушаете регламенты безопасности, сливая видеопоток с завода на чужие серверы.

Инференс обязан жить на устройстве, если ваш цикл обратной связи меньше секунды. Дроны, роборуки, оптическая сортировка мусора, системы предотвращения аварий — здесь облако мертво по определению. Думаете, 5G решит проблему? Забудьте. Экскаватор, перерубивший оптику к базовой станции, обнуляет любые инвестиции в инфраструктуру связи.

Железо: Jetson, Raspberry Pi и зоопарк NPU

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

Raspberry Pi 5. Отличный одноплатник для агрегации сенсорной телеметрии. Вытянет ли он YOLOv8? Да, в Nano-версии и на 3 кадрах в секунду, с перегревом через десять минут. Память LPDDR4X с узкой шиной удушит любую сверточную сеть. RPi годится для легковесных одномерных CNN, акустических моделей или табличных данных. Для серьезного computer vision он не подходит. Без вариантов.

NPU-акселераторы. Coral Edge TPU, Hailo, Rockchip RK3588. Стоят копейки в серии, но превращают разработку в ад. Компиляторы проприетарные и кривые. Поддержка современных операторов нейросетей отстает от PyTorch на годы. Если в вашей архитектуре есть нестандартный слой внимания, NPU выплюнет его обратно на слабый ARM-процессор, и весь пайплайн встанет колом. Вы выигрываете в деньгах на железо, но спускаете бюджет на зарплаты инженеров, пытающихся впихнуть граф в тулчейн.

NVIDIA Jetson. Линейки Orin Nano и NX. Это золотой стандарт отрасли. Дорого, горячо, но вы получаете полноценную поддержку CUDA. 99% того, что обучено в PyTorch, заведется на edge с минимальными танцами.

Edge AI на устройстве: инференс нейросети на Jetson и Raspberry Pi без интернета

Взять файл model.pt, закинуть на девайс через SCP и написать model.to('cuda') — это преступление против производительности. В проде так не делают. Вы обязаны подготовить модель под целевую архитектуру.

Сначала идет квантизация. FP32 на edge не нужен, это пустая трата регистров и пропускной способности памяти. Мы режем точность весов до FP16 или INT8. Для INT8 вам понадобится репрезентативный датасет из реальных условий для калибровки, чтобы собрать статистику активаций и не обрушить метрики precision/recall. Дальше компиляция. На Jetson это TensorRT. Модель превращается в бинарный движок, жестко привязанный к конкретной архитектуре GPU и версии CUDA.

  • Экспорт графа: выгружаем веса из PyTorch в формат ONNX.
  • Слияние слоев: применяем constant folding и убираем мертвые ветви вычислений.
  • Калибровка: прогоняем тысячу типичных кадров, чтобы TensorRT вычислил динамические диапазоны тензоров для перехода в INT8.
  • Сборка движка: фиксируем размер батча (обычно 1 для edge-камер), размеры входных разрешений и компилируем .engine.

Скомпилировали? Рано радоваться. Железо уедет в цех. Там +35°C в тени, вибрации и масляная пыль.

Jetson под нагрузкой — это кипятильник. Как только кристалл прогреется до 80°C, операционная система включит жесткий тепловой троттлинг. Частоты GPU упадут вдвое. Ваш реалтайм на 30 FPS превратится в 12 FPS, очередь буферов V4L2 переполнится, и приложение упадет по OOM (Out Of Memory). Вы обязаны мониторить температуру демоном, настраивать агрессивные профили вращения кулера через jetson_clocks и ограничивать энергопотребление через nvpmodel.

И самое главное — защита от зависаний. На edge нет сисадмина, который зайдет по SSH и поднимет упавший докер. Если инференс повис из-за аппаратного сбоя I2C-шины на MIPI-камере, устройство должно перезагрузиться само. Для этого мы намертво привязываем код к хардовому watchdog.

import os
import time
from systemd.daemon import notify, Notification

def run_inference_loop(model, camera):
    # Сообщаем systemd, что инициализация TensorRT завершена
    notify(Notification.READY)

    # Читаем интервал ожидания watchdog из systemd.service
    wd_usec = int(os.environ.get('WATCHDOG_USEC', 0))
    wd_interval = (wd_usec / 1_000_000) / 2 if wd_usec else 0
    last_ping = time.time()

    while True:
        frame = camera.read()
        if frame is None:
            continue

        # Тяжелый прогон через NPU или GPU
        results = model.infer(frame)
        process_telemetry(results)

        # Пингуем железный watchdog. Не успели — хард-ресет девайса.
        if wd_interval and (time.time() - last_ping) > wd_interval:
            notify(Notification.WATCHDOG)
            last_ping = time.time()

Это база. Не вставили пинг воркера в основной цикл? Ждите звонка в три часа ночи с просьбой найти электрика, который передернет рубильник на объекте за две тысячи километров от офиса.

Последний круг ада — обновление нейросетей на парке из сотен разбросанных коробок. Обновление по сети через пакетный менеджер ломается на 99% скачивания, оставляя систему в неконсистентном состоянии. Модели и рантайм должны обновляться атомарно. Скачали новый образ в фоновый раздел. Проверили криптографические подписи. Переключили флаг в загрузчике. Ребутнулись. Если новая модель словила segmentation fault при старте, watchdog убьет процесс, U-Boot увидит сбой и молча откатится на стабильный раздел. Клиент даже не узнает, что релиз был битым.

  • #Computer Vision
  • #Edge AI
  • #Jetson
  • #Raspberry Pi
  • #Инференс
ПоделитьсяTelegramX
рассылка

Новые статьи — на почту

Лонгриды про ML в проде, edge и компьютерное зрение — сразу после выхода.

Канал в Telegram: morana.log

Без спама. Нажимая «Подписаться», соглашаетесь с обработкой персональных данных

бесплатный pdf-гайд

Edge AI или облако: когда тащить нейросеть на железо

Признаки, фреймворк выбора и прикидка экономии — короткий PDF-гайд на почту.

PDF · 5 страниц · без спама. Нажимая «Получить», соглашаетесь с обработкой персональных данных

Читать дальше
— заявка

Опишите задачу  ответим как инженеры. 

Оставьте имя и Telegram — остальное обсудим. Без брифов на 40 слайдов и звонков по три раза.

Отвечаем за пару часовотвечает инженер, а не отдел продажNDA по запросу

Сюда напишем — это быстрее всего

Или сразу написать в Telegram

Без спама и звонков-роботов. Нажимая кнопку, вы соглашаетесь с политикой конфиденциальности и обработкой персональных данных.