Настройка Azure IoT Edge с ML-модулями

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1 услугВсе 1566 услуг
Настройка Azure IoT Edge с ML-модулями
Средняя
~2-3 рабочих дня
Часто задаваемые вопросы
Направления AI-разработки
Этапы разработки AI-решения
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1218
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    853
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1047
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    561
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    825

Развёртывание ML-моделей через Azure IoT Edge

Azure IoT Edge запускает контейнеры (modules) на Edge-устройствах с оркестрацией из Azure. ML-модели из Azure Machine Learning → IoT Edge module → деплой через deployment manifest. Интеграция с Azure Stream Analytics, Cognitive Services, ONNX Runtime.

Архитектура IoT Edge

IoT Edge runtime: два системных контейнера:

  • edgeAgent — управляет lifecycle модулей по deployment manifest
  • edgeHub — локальный брокер MQTT/AMQP, маршрутизация сообщений между модулями, store-and-forward при потере сети

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

AML → IoT Edge workflow:

  1. Обучение в AzureML compute cluster
  2. Регистрация модели в AzureML Model Registry
  3. Создание IoT Edge deployment пакета через Model.package()
  4. Push контейнера в Azure Container Registry
  5. Обновление deployment manifest → автоматический деплой на device group
from azureml.core import Workspace, Model
from azureml.core.model import InferenceConfig
from azureml.contrib.core.webservice import AksEndpoint

ws = Workspace.from_config()
model = Model(ws, 'defect-detector')

# Создание IoT Edge пакета
package = Model.package(ws, [model],
    inference_config=InferenceConfig(entry_script='score.py',
                                     environment=env),
    generate_dockerfile=False)
package.wait_for_creation(show_output=True)
package.pull()  # docker pull для ACR

ONNX Runtime в IoT Edge модуле

Azure рекомендует ONNX Runtime для кросс-платформенного инференса:

import onnxruntime as ort
import numpy as np

# hardware-aware session
opts = ort.SessionOptions()
opts.graph_optimization_level = ort.GraphOptimizationLevel.ORT_ENABLE_ALL
opts.intra_op_num_threads = 4

# провайдеры в порядке приоритета
providers = ['TensorrtExecutionProvider',  # NVIDIA
             '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})

Azure IoT Edge + ONNX Runtime образ: mcr.microsoft.com/azureml/onnxruntime:latest-openvino — с OpenVINO для Intel железа. mcr.microsoft.com/azureml/onnxruntime:latest-jetpack — для NVIDIA Jetson.

Взаимодействие модулей

Module Twin: Каждый модуль имеет Azure IoT Hub device twin subset. Изменение desired properties → callback в модуле:

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

Direct Methods: Синхронный вызов из Azure → Edge (timeout-based):

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)

Message Routing: edgeHub маршрутизирует по source, topic, body properties:

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 аналитики без отправки в облако:

-- ASA Edge job query
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

ASA Edge job деплоится как IoT Edge модуль. SQL запрос выполняется локально, результаты отправляются в другой модуль или в облако.

Компьютерное зрение с Custom Vision

Azure Custom Vision → экспорт ONNX/TFLite → IoT Edge модуль:

# экспорт trained модели
az cognitiveservices account custom-vision export \
  --project-id $PROJECT_ID \
  --iteration-id $ITERATION_ID \
  --type ONNX

Custom Vision App Module — готовый Docker образ от Microsoft, принимает ONNX модель через module twin, экспонирует HTTP endpoint для инференса.

Fleet Management через IoT Hub

Device Provisioning Service (DPS): Zero-touch provisioning. Устройство при первом запуске → DPS endpoint → автоматическое назначение в IoT Hub + получение deployment manifest.

Automatic Deployments: Target condition: tags.location = 'factory-A' AND tags.deviceType = 'vision-station'. Приоритет deployments: базовый (100 устройств) + override для специфичных устройств.

Мониторинг: Azure Monitor + IoT Hub metrics. Built-in: connected devices, messages/day, twin operations. Custom: через IoTHubDeviceClient.send_message() с application properties для фильтрации в Log Analytics.

Поддерживаемые платформы

Linux AMD64/ARM64/ARMv7. Windows AMD64 (IoT Core, Server 2019). Протестировано: Intel NUC, Raspberry Pi 4, NVIDIA Jetson Nano/Orin, промышленные IPC (Advantech, Beckhoff).

Минимальные требования: 512 MB RAM, контейнерная поддержка (containerd/moby).

Сроки: 3–6 недель

Базовый деплой с Azure ML моделью — 1–2 недели. Кастомные модули, ASA Edge, OPC Publisher интеграция с промышленным оборудованием, DPS fleet provisioning — 5–6 недель.