Розгортання ML-модулів на Azure IoT Edge: практичний посібник

При розгортанні ML-моделей на периферії клієнти часто стикаються з вузьким місцем — мережевою latency та вартістю передачі даних. Ми пропонуємо перевірене рішення на Azure IoT Edge: моделі виконуються локально, в контейнерах, з оркестрацією з хмари. Це знижує затримки до мілісекунд і економить до 40

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

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

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

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1440
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    997
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1264
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    712
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1002

При розгортанні ML-моделей на периферії клієнти часто стикаються з вузьким місцем — мережевою latency та вартістю передачі даних. Ми пропонуємо перевірене рішення на Azure IoT Edge: моделі виконуються локально, в контейнерах, з оркестрацією з хмари. Це знижує затримки до мілісекунд і економить до 40% на трафіку. Наш досвід — понад 5 років в IoT Edge, більше 30 впроваджень для промислових проєктів, включаючи автоматизацію контролю якості та предиктивну діагностику обладнання.

Як розгорнути ML-модель на Azure IoT Edge?

Azure IoT Edge запускає контейнери (modules) на Edge-пристроях з оркестрацією через IoT Hub. ML-моделі з Azure Machine Learning пакуються в Docker-образ і деплояться через deployment manifest. Інтеграція з Azure Stream Analytics, Cognitive Services, ONNX Runtime — все під капотом.

IoT Edge runtime — два системних контейнери: edgeAgent управляє lifecycle модулів по deployment manifest, edgeHub — локальний брокер MQTT/AMQP, маршрутизація повідомлень та буферизація при розриві зв'язку.

Deployment manifest (JSON) визначає, які модулі запускати, їх параметри та маршрути:

{ "modulesContent": { "$edgeAgent": { "properties.desired": { "modules": { "MLInference": { "type": "docker", "settings": { "image": "myregistry.azurecr.io/ml-inference:1.2.0", "createOptions": "{\"HostConfig\":{\"Devices\":[{\"PathOnHost\":\"/dev/video0\"}]}}" } } } } }, "$edgeHub": { "properties.desired": { "routes": { "MLToCloud": "FROM /messages/modules/MLInference/* INTO $upstream" } } } } } 

Підготовка ML-модуля через Azure Machine Learning

Робочий процес: навчання на compute cluster → реєстрація моделі в Model Registry → створення IoT Edge пакета через Model.package() → push контейнера в ACR → оновлення manifest. Змінюємо версію образу — IoT Hub автоматично розгортає оновлення на цільову групу.

Чому ONNX Runtime — найкращий вибір для Edge-інференсу?

ONNX Runtime — кроссплатформений движок з апаратною оптимізацією. На Intel CPU з OpenVINO прискорення в 2,5–3 рази відносно чистого Python; на NVIDIA Jetson через TensorRT — до 5 разів. Automated deployment через IoT Hub в 10 разів швидше ручного оновлення кожного пристрою. Приклад hardware-aware сесії:

import onnxruntime as ort opts = ort.SessionOptions() opts.graph_optimization_level = ort.GraphOptimizationLevel.ORT_ENABLE_ALL opts.intra_op_num_threads = 4 providers = ['TensorrtExecutionProvider', 'CUDAExecutionProvider', 'CPUExecutionProvider'] session = ort.InferenceSession('model.onnx', opts, providers=providers) def infer(image_np): input_name = session.get_inputs()[0].name return session.run(None, {input_name: image_np}) 

Готові образи Microsoft: mcr.microsoft.com/azureml/onnxruntime:latest-openvino для Intel, :latest-jetpack для Jetson.

Взаємодія модулів на Edge

Module Twin і Direct Methods

Через module twin змінюємо параметри на льоту (confidence threshold, версія моделі) без перескладання контейнера:

async def twin_patch_handler(patch): if 'modelVersion' in patch: await update_model(patch['modelVersion']) if 'confidenceThreshold' in patch: global THRESHOLD THRESHOLD = patch['confidenceThreshold'] module_client.on_twin_desired_properties_patch_received = twin_patch_handler async def method_handler(method_request): if method_request.name == "GetStats": payload = {"fps": current_fps, "detections_today": counter} return MethodResponse.create_from_method_request( method_request, 200, payload) 

Direct Methods — синхронний виклик з хмари (timeout 30 с). Використовується для діагностики, перезавантаження модуля, отримання статистики.

Message Routing

edgeHub маршрутизує повідомлення за source, topic, властивостями. Приклад: всі кадри з роздільною здатністю вище Full HD відправляються в модуль HiResProcessor, а детекції з впевненістю >0.9 — одразу в хмару:

FROM /messages/modules/Camera/* WHERE $body.width > 1920 INTO modules/HiResProcessor/inputs/frames FROM /messages/modules/MLInference/* WHERE $body.confidence > 0.9 INTO $upstream 

Azure Stream Analytics на Edge

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

SELECT System.Timestamp() as EventTime, AVG(temperature) as AvgTemp, COUNT(*) as Anomalies INTO AlertOutput FROM TemperatureInput TIMESTAMP BY EventTime GROUP BY TumblingWindow(second, 30) HAVING AVG(temperature) > 75 OR COUNT(*) > 10 

Порівняння методів деплою

Метод Швидкість Масштабування Сценарій
Ручний manifest через портал 10–30 хв Одиничні пристрої Тестування / налагодження
Automatic Deployment 1–5 хв Тисячі пристроїв Промислові парки
DPS Zero-touch При першому ввімкненні Мільйони Масовий випуск

Порівняння бекендів інференсу

Бекенд Platform Прискорення Енергоспоживання
OpenVINO Intel CPU (Xeon, Core) 2–3x vs Python Низьке
TensorRT NVIDIA GPU (Jetson, T4) 3–5x vs Python Середнє
ONNX Runtime CPU Будь-який x86/ARM 1.5–2x vs Python Мінімальне

Fleet Management через IoT Hub

Device Provisioning Service (DPS) — zero-touch provisioning: пристрій при першому запуску реєструється в DPS, автоматично призначається в IoT Hub і отримує деплой. Automatic Deployments з target condition tags.location = 'factory-A' — розгортання по групах з пріоритетами.

Моніторинг: Azure Monitor + built-in метрики (connected devices, messages/day). Custom метрики через send_message() з application properties для фільтрації в Log Analytics.

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

  • Аудит інфраструктури та вимог до інференсу
  • Розробка та контейнеризація ML-модуля (ONNX / TensorRT / OpenVINO)
  • Налаштування deployment manifest та маршрутизації
  • Інтеграція з DPS для масштабування
  • Документація з експлуатації та навчання команди
  • Технічна підтримка на етапі впровадження

Гарантуємо стабільну роботу під навантаженням: latency p99 < 200 мс на Jetson Nano з моделлю YOLOv5, uptime 99.9% при втраті зв'язку до 4 годин.

Терміни: 3–6 тижнів

Базовий деплой з Azure ML моделлю — 1–2 тижні. Кастомні модулі, ASA Edge, OPC Publisher інтеграція з промисловим обладнанням, DPS fleet provisioning — 5–6 тижнів. Оцініть ваш проєкт — зв'яжіться для консультації. Замовте аудит вашої інфраструктури, щоб отримати точні терміни та вартість.

Azure IoT Edge documentation