פריסת מודלי ML על קצה עם AWS IoT Greengrass
תרחיש טיפוסי: מפעל עם 200 בקרי PLC ומצלמות, אך המודל אומן ב-SageMaker. עדכון ידני של קבצי בינארי בכל מכשיר מוביל לשגיאות וזמן השבתה. אנו מגדירים את AWS IoT Greengrass v2 — רכיב זמן ריצה להרצת רכיבי ML על הקצה ללא SSH. מודלים מ-SageMaker נפרסים לקבוצת הדברים "factory-line-1", עם ניהול צי מרכזי באמצעות אספקה ללא מגע (zero-touch provisioning). במשך 5 שנים, פרסנו את Greengrass על 30+ אתרים תעשייתיים ומבטיחים יציבות תחת הפרעות רשת.
ארכיטקטורת Greengrass v2
Nucleus — רכיב הליבה של Greengrass ב-Java. מנהל מחזור חיים של רכיבים, IPC, וברוקר MQTT מקומי (Moquette). רכיבים הם יחידות פריסה אטומיות: מנוהלים על ידי AWS (מוכנים מראש) ומותאמים אישית (הקוד שלך). פריסה היא מסמך JSON עם קבוצת רכיבים וגרסאות. קונסולת AWS או CLI שולחים אותה למכשיר, ו-Nucleus מיישם אותה.
ענן (AWS): SageMaker → ארטיפקט מודל ב-S3 IoT Greengrass Deployment → יעדים: קבוצת דברים "factory-line-1"
מכשיר קצה: Greengrass Nucleus ├── aws.greengrass.SageMakerEdgeManager ├── aws.greengrass.DlrInferenceService (DLR runtime) └── com.company.InferenceApp (רכיב מותאם אישית)
למה Greengrass ל-ML על קצה?
ניהול מרכזי —只需 לעדכן את הפריסה וכל 500 המכשירים מקבלים את המודל החדש. פריסה מדורגת עם canary (קודם 5%, אחר כך 100%) וגלגול אוטומטי לאחור במקרה של שגיאה. Device Shadow מאחסן את גרסת המודל הנוכחית והסטטוס, ומסנכרן ענן ↔ קצה גם במהלך ניתוקי רשת זמניים.
רכיבי Inference של ML
SageMaker Edge Manager מהדר מודלים באמצעות SageMaker Neo עבור חומרה ספציפית (ARM, x86, GPU). בינאריים אופטימליים בתוספת Edge Agent (daemon gRPC) רצים על המכשיר.
# 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, תומך ב-TFLite, XGBoost, LightGBM. קל יותר, ללא תקורה של gRPC. על CPU, DLR לרוב מהיר פי 2.
import dlr model = dlr.DLRModel('/greengrass/v2/work/model', 'cpu') result = model.run({'input': numpy_array}) השוואה בין SageMaker Edge Manager ו-DLR
| פרמטר | SageMaker Edge Manager | DLR |
|---|---|---|
| הידור | Neo עבור חומרה ספציפית | TVM |
| פרוטוקול | gRPC | קריאות ישירות C++/Python |
| תמיכה במודלים | TensorFlow, PyTorch, MXNet | TFLite, XGBoost, LightGBM |
| זמן השהיה (CPU) | ~15 ms | ~7 ms |
| גודל זמן ריצה | ~50 MB | ~15 MB |
איך לארגן עדכוני מודל ללא זמן השבתה?
נקודת כאב קלאסית של ML על קצה — איך לעדכן את המודל על 500 מכשירים. Greengrass פותר זאת באופן טבעי.
לפי תיעוד AWS, Greengrass v2 תומך בפריסה מדורגת עם גלגול אוטומטי לאחור. זרימת עבודה:
- SageMaker מאמן גרסת מודל חדשה.
- הארטיפקט מועלה ל-S3.
- גרסת הרכיב ב-Greengrass מתעדכנת.
- פריסה חדשה נוצרת על קבוצת הדברים.
- Nucleus על כל מכשיר מוריד את הדלתא, מיישם אותה, ומתגלגל לאחור במקרה של שגיאה.
פריסה מדורגת: פריסה עם canary — קודם 5% מהמכשירים (תת-קבוצה של קבוצת הדברים), ניטור מדדי CloudWatch, ואז 100%.
Shadow מקומי למצב: AWS IoT Device Shadow מאחסן את גרסת המודל הנוכחית, סטטוס ה-inference, ומדדים מותאמים אישית. סנכרון ענן ↔ קצה עובד גם במהלך ניתוקי רשת זמניים.
טעויות פריסה נפוצות
- אי-תאימות גרסת רכיב — בדוק את דרישת הגרסה ב-recipe. - חוסר הרשאות גישה ל-S3 — הגדר תפקיד IAM עבור Greengrass. - ארטיפקט מודל גדול מדי — השתמש ב-DLR או בקוונטיזציה.רכיב Inference מותאם אישית
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"
}
]
}
]
} Stream Manager לנתונים גדולים
greengrass.StreamManager — חיץ מקומי להעברת קצה → ענן. כאשר הרשת לא יציבה, הנתונים נאגרים מקומית (עד 256 MB) ונשלחים אוטומטית ל-Kinesis/S3/IoT Analytics כשהקישוריות חוזרת. הפרמטרים ניתנים להגדרה: גודל חיץ, תדירות ייצוא, מדיניות גלישה.
ניהול צי
קבוצות דברים + מאפיינים: factory-line-1, factory-line-2 — מודלים שונים לקווים שונים. מאפיין: firmware_version, camera_model — לפריסה מותנית.
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) — כל מדד מקוד הקצה ישירות ל-CloudWatch.
תוכנית יישום ולוחות זמנים
| שלב | משך |
|---|---|
| ביקורת ועיצוב | שבוע 1 |
| הקמת Nucleus ורכיבים | 1–2 שבועות |
| אינטגרציה ופריסה מדורגת | 1–2 שבועות |
| ניטור ותיעוד | שבוע 1 |
מה כלול
- ביקורת של התשתית והמודל הנוכחיים (תאימות ל-Greengrass, דרישות חומרה).
- עיצוב ארכיטקטורה: בחירה בין SageMaker Edge Manager ו-DLR, הרכב רכיבים, תוכנית פריסה.
- הקמת Greengrass Nucleus ורכיבים (מנוהלים על ידי AWS + מותאמים אישית).
- אינטגרציה עם מערכות קיימות (SCADA, MES, Kafka).
- פריסה מדורגת וניטור (CloudWatch, התראות).
- תיעוד תפעולי והדרכת צוות.
- אחריות יציבות ל-30 יום לאחר ההשקה.
פלטפורמות נתמכות
Linux (arm64, armv7, x86_64). מינימום: 512 MB RAM, מעבד 1 GHz. נבדק: Raspberry Pi 4, NVIDIA Jetson, BeagleBone, מחשבים תעשייתיים x86. Windows (x86_64): Greengrass v2.9+, סט רכיבים מוגבל.
לוחות זמנים ועלות
פריסת Greengrass ראשונה עם מודל מוכן — משבוע 1. רכיבים מותאמים אישית, ניהול צי, פריסה מדורגת, אינטגרציה עם SCADA/MES קיימים — 4–6 שבועות. העלות מחושבת באופן אישי לאחר ביקורת. הערך את הפרויקט שלך — צור קשר. משתמשים ב-Greengrass ורוצים להפחית עלויות תפעול? בקשו ייעוץ — נבחר את הארכיטקטורה האופטימלית.







