פריסת מודל לחיזויים בזמן אמת, עם לייטנסי נמוך (<100ms) וזמינות גבוהה.
→פריסת המודל ל-Azure ML Managed Online Endpoint.
למה: Managed online endpoints הם שירות מנוהל במלואו המותאם להסקה בזמן אמת, מספקים auto-scaling, איזון עומסים, פריסות blue-green, וניטור מובנה.
מקור↗
ניקוד נפח גדול של נתונים (מיליוני רשומות) באופן אסינכרוני, כאשר יעילות עלות היא בראש סדר העדיפויות.
→פריסת המודל ל-Azure ML Batch Endpoint.
למה: Batch endpoints מיועדים לניקוד אסינכרוני ובעל תפוקה גבוהה של מערכי נתונים גדולים. הם יכולים להשתמש ב-compute clusters ניתנים להרחבה שיורדים לאפס כשהם אינם פעילים, ובכך מייעלים עלויות.
פריסת גרסת מודל חדשה תוך מזעור סיכונים. יש צורך להעביר בהדרגה תעבורה לגרסה החדשה ולאפשר חזרה קלה לגרסה קודמת.
→שימוש ב-managed online endpoint יחיד עם שתי פריסות (לדוגמה, "blue" למודל הישן, "green" לחדש). שימוש ב-traffic splitting לשליטה באחוז הבקשות שעוברות לכל פריסה.
למה: דפוס פריסת blue-green זה מאפשר פריסות בטוחות וללא השבתה. ניתן לאמת את המודל החדש על חלק קטן מתעבורה חיה לפני התחייבות למעבר מלא.
אריזת מודל עם התלויות והחפצים שלו באופן סטנדרטי ובלתי תלוי במסגרת לצורך פריסה.
→שימוש בפורמט מודל MLflow. בעת רישום המודל, יש לכלול את קובץ ה-conda.yaml או requirements.txt וכל חפצי קוד נחוצים.
למה: MLflow מספק מוסכמת אריזת מודל סטנדרטית ש-Azure ML מבין באופן מובנה. זה מפשט את הפריסה שכן Azure ML יכול לבנות אוטומטית את הסביבה הנדרשת.
למודל פרוס יש לייטנסי גבוה מכיוון שהוא טוען קבצי עזר גדולים (לדוגמה, featurizer גדול) בכל בקשת חיזוי.
→העברת לוגיקת טעינת הקבצים מפונקציית ה-`run()` לפונקציית ה-`init()` בסקריפט הניקוד.
למה: פונקציית ה-`init()` פועלת רק פעם אחת כאשר הקונטיינר מתחיל. טעינת נכסים כאן הופכת אותם לזמינים באופן גלובלי לכל קריאות ה-`run()`, מונעת טעינה מיותרת בכל בקשה.
endpoint בזמן אמת חווה תעבורה משתנה (שיאים גבוהים, שפל נמוכים). יש צורך לשמור על ביצועים בצורה חסכונית.
→הגדרת auto-scaling בפריסת ה-managed online endpoint. הגדרת מספר מינימלי ומקסימלי של מופעים והגדרת כלל קנה מידה המבוסס על ניצול CPU או לייטנסי בקשות.
למה: Auto-scaling מתאים אוטומטית את מספר מופעי ה-compute כדי להתאים לעומס התעבורה, מבטיח ביצועים בשיאים וחוסך עלויות בשפל.
פריסת מודל דורשת ספריות מערכת ספציפיות, גרסאות CUDA מותאמות אישית, או שרת הסקה מותאם אישית שאינו קיים בתמונות Azure ML ברירת המחדל.
→יצירת Dockerfile מותאם אישית המרחיב תמונת הסקה בסיסית של Azure ML, הוספת התלויות הנדרשות, בנייתה ודחיפתה ל-Azure Container Registry. הפניה לתמונה זו בסביבת הפריסה.
למה: הרחבת תמונה בסיסית מספקת שליטה מלאה על סביבת הריצה תוך שמירה על תאימות לתשתית ההגשה של Azure ML.
אוטומציה של מחזור החיים המלא של ML, כולל אימון מחדש, הערכה ופריסה, המופעל על ידי שינויים בקוד או בנתונים.
→שימוש ב-Azure DevOps או GitHub Actions המשולבים עם Azure ML CLI v2 ליצירת pipeline של CI/CD. ה-pipeline צריך לכלול quality gate המשווה את המודל החדש ל-baseline לפני הפריסה.
למה: דפוס MLOps זה מאוטמט את זרימת העבודה של ML, מבטיח עקביות, איכות ואיטרציה מהירה. ה-quality gate מונע רגרסיות בביצועי המודל.
ביצועי מודל בייצור מתדרדרים עקב שינויים בהתפלגות נתוני הקלט. יש לאמן מחדש את המודל אוטומטית כאשר מזוהה drift משמעותי.
→הגדרת Azure ML data drift monitor ב-endpoint. הגדרת התראה שמפעילה Azure Logic App או Azure Function, אשר בתורן מתחילות את pipeline האימון מחדש.
למה: זה יוצר מערכת MLOps בלולאה סגורה ששומרת אוטומטית על רלוונטיות המודל בתגובה לדפוסי נתונים משתנים, ללא התערבות ידנית.
גרסת מודל חדשה שנפרסה נמצאה פגומה בייצור. יש צורך לחזור במהירות לגרסה היציבה הקודמת.
→אם משתמשים בפריסת blue-green, העבירו 100% מהתעבורה חזרה לפריסה היציבה. לחלופין, עדכנו את ה-endpoint לפרוס מחדש את גרסת המודל הקודמת מרישום המודלים.
למה: העברת תעבורה מספקת חזרה מיידית. פריסה מחדש של גרסה מהרישום היא גם דרך מהירה ואמינה לשחזר מצב ידוע-תקין.
צורך לנטר הן את הבריאות התפעולית (לייטנסי, שגיאות) והן את איכות החיזוי (data drift, דיוק) של מודל פרוס.
→הפעלת שילוב Application Insights ב-endpoint עבור מדדים תפעוליים. הגדרת איסוף נתונים וניטור data drift של Azure ML עבור מדדי איכות המודל.
למה: גישה דו-כיוונית זו מספקת תצוגה מלאה של בריאות המודל. App Insights עוקב אחר ביצועי המערכת, בעוד איסוף נתונים/ניטור drift עוקבים אחר ביצועי החיזוי של המודל.
ה-endpoint של המודל נכשל עקב נתוני קלט שגויים או בלתי צפויים מלקוחות.
→יישום לוגיקת אימות קלט בתוך פונקציית ה-`run()` של סקריפט הניקוד. בדיקת סוגי נתונים, טווחים ומבנים, והחזרת שגיאה משמעותית (לדוגמה, HTTP 400) עבור בקשות לא חוקיות.
למה: אימות בצד השרת מגן על המודל מקריסה ומספק משוב ברור ומיידי לצרכני ה-API, מה שהופך את השירות לחזק יותר.