Развёртывание ML-моделей на Edge через AWS IoT Greengrass
AWS IoT Greengrass v2 — runtime для запуска AWS Lambda, контейнеров и ML-компонентов на Edge-устройствах. Модели из SageMaker → деплой на завод через Greengrass без SSH. Centralized fleet management с zero-touch provisioning.
Архитектура Greengrass v2
Nucleus: Greengrass core runtime (Java). Управляет lifecycle компонентов, IPC, локальным брокером MQTT (Moquette).
Компоненты: атомарные единицы деплоя. AWS managed компоненты (готовые) + custom компоненты (ваш код).
Deployment: JSON-документ описывает набор компонентов + версии → AWS консоль/CLI отправляет на устройство → Nucleus применяет.
Cloud (AWS):
SageMaker → Model artifact in S3
IoT Greengrass Deployment → targets: thing group "factory-line-1"
Edge device:
Greengrass Nucleus
├── aws.greengrass.SageMakerEdgeManager
├── aws.greengrass.DlrInferenceService (DLR runtime)
└── com.company.InferenceApp (custom component)
ML Inference компоненты
SageMaker Edge Manager: Компилирует модели через SageMaker Neo для конкретного железа (ARM, x86, GPU). Оптимизированные бинарники + SageMaker Edge Agent (gRPC daemon) на устройстве.
# edge agent gRPC client
import agent_pb2, agent_pb2_grpc
channel = grpc.insecure_channel('unix:///tmp/sagemaker_edge_agent_example.sock')
stub = agent_pb2_grpc.AgentStub(channel)
# загрузка модели
stub.LoadModel(agent_pb2.LoadModelRequest(
url=f's3://bucket/model.tar.gz',
name='defect-detector'))
# инференс
response = stub.Predict(agent_pb2.PredictRequest(
name='defect-detector',
tensors=[tensor]))
DLR (Deep Learning Runtime): Альтернатива Edge Manager. TVM-compiled модели. Поддержка TFLite, XGBoost, LightGBM. Легче, без gRPC оверхеда.
import dlr
model = dlr.DLRModel('/greengrass/v2/work/model', 'cpu')
result = model.run({'input': numpy_array})
Кастомный компонент для инференса
recipe.json:
{
"RecipeFormatVersion": "2020-01-25",
"ComponentName": "com.company.QualityInspection",
"ComponentVersion": "1.0.0",
"ComponentDependencies": {
"aws.greengrass.DlrInferenceService": {"VersionRequirement": ">=1.6.0"}
},
"Manifests": [{
"Platform": {"os": "linux"},
"Lifecycle": {
"Install": "pip3 install -r requirements.txt",
"Run": "python3 {artifacts:path}/inference.py"
},
"Artifacts": [
{"URI": "s3://my-bucket/inference.py"},
{"URI": "s3://my-bucket/model.tar.gz", "Unarchive": "ZIP"}
]
}]
}
IPC для публикации результатов:
from awsiot.greengrasscoreipc.clientv2 import GreengrassCoreIPCClientV2
ipc_client = GreengrassCoreIPCClientV2()
ipc_client.publish_to_iot_core(
topic_name="factory/line1/defects",
qos=QOS.AT_LEAST_ONCE,
payload=json.dumps({"defect": True, "confidence": 0.94}).encode()
)
OTA обновление моделей
Классический pain point Edge ML: как обновить модель на 500 устройствах. Greengrass решает это нативно.
Workflow:
- SageMaker обучает новую версию модели
- Артефакт загружается в S3
- Обновляется версия компонента в Greengrass
- Создаётся новый Deployment на thing group
- Nucleus на каждом устройстве скачивает дельту, применяет, rollback при ошибке
Staged rollout: Deployment с canary: сначала 5% устройств (thing group subset), мониторинг CloudWatch метрик, затем 100%.
Local shadow для состояния: AWS IoT Device Shadow хранит текущую версию модели, статус инференса, custom metrics. Синхронизация cloud ↔ edge даже при временном разрыве сети.
Stream Manager для больших данных
greengrass.StreamManager: локальный буфер для edge → cloud передачи. Когда сеть нестабильна — данные буферируются локально (до N MB), после восстановления — автоматически отправляются в Kinesis/S3/IoT Analytics.
from stream_manager import StreamManagerClient, ExportDefinition, KinesisConfig
client = StreamManagerClient()
client.create_message_stream(MessageStreamDefinition(
name="QualityStream",
max_size=268435456, # 256 MB local buffer
export_definition=ExportDefinition(
kinesis=[KinesisConfig(identifier="kinesis-export",
stream_name="factory-quality-stream")]
)
))
Fleet Management
Thing Groups + Attributes:
- factory-line-1, factory-line-2 — разные модели для разных линий
- Attribute: firmware_version, camera_model — для conditional deployment
Greengrass CLI для диагностики:
greengrass-cli component list # запущенные компоненты
greengrass-cli logs get --component com.company.QualityInspection
greengrass-cli deployment create ... # локальный деплой для отладки
CloudWatch метрики: Стандартные: ComponentRunning, ComponentBroken. Кастомные через EMF (Embedded Metrics Format) — любые метрики из edge кода напрямую в CloudWatch.
Поддерживаемые платформы
Linux (arm64, armv7, x86_64). Минимум: 512 MB RAM, 1 GHz CPU. Протестировано: Raspberry Pi 4, NVIDIA Jetson, BeagleBone, промышленные x86 IPC.
Windows (x86_64): Greengrass v2.9+, ограниченный набор компонентов.
Сроки: 3–6 недель
Первый Greengrass деплой с готовой моделью: 1 неделя. Кастомные компоненты, fleet management, staged rollout, интеграция с существующей SCADA/MES: 4–6 недель.







