שליטה בארכיטקטורת Lakehouse: Bronze, Silver ו-Gold ב-Microsoft Fabric
By Mirko Peters ·
ברוכים השבים לבלוג הנלווה לפודקאסט! בפרק האחרון צללנו לעומק המציאות המעשית של הנדסת למידת מכונה בתוך Micro…
Automatically translated with AI from the original post. Read the English original
ברוכים השבים לבלוג הנלווה לפודקאסט! בפרק האחרון שלנו צללנו לעומק המציאות המעשית של הנדסת למידת מכונה במערכת האקולוגית של Microsoft. אם עוד לא האזנתם, כדאי מאוד להציץ ב-Build Machine Learning Models in Microsoft Fabric. היום אנחנו נרחיב על הרעיונות האלה ונבחן כיצד ארגון הנתונים בארכיטקטורת מדליון בתוך Lakehouse של Microsoft Fabric מהווה את היסוד המוצק ביותר לפעילות למידת מכונה מדורגת ומוצלחת.
בניית מודלים של למידת מכונה מוכנים לייצור אינה עניין של בחירת האלגוריתם הנכון או כוונון היפרפרמטרים בלבד. לרוב, הצלחת מודלים החיזוי תלויה בניקיון הנתונים, בצינורות עיבוד הניתנים לשחזור ובממשל תקין. בואו נפרק לגורמים איך משיגים שליטה מלאה בארכיטקטורת ה-Lakehouse באמצעות Microsoft Fabric.
הארכיטקטורה במבט מהיר
בתכנון פלטפורמה מקצה לקצה של נתונים ולמידת מכונה ב-Microsoft Fabric, הבנת זרימת הנתונים היא קריטית. הכול מתחיל ב-OneLake, שמשמש כשכבת האחסון המאוחדת. משם הנתונים מנותבים ל-Lakehouse, where they עוברים דרך טבלאות Delta ברמות bronze, silver ו-gold.
לצורך מחשוב, מחברות Fabric מעמידות לרשות אנשי מדע הנתונים ערימת data science מוכנה מראש, מבוססת Spark, Python ו-R. מעקב אחר ניסויים מתבצע בצורה חלקה באמצעות הרצות MLflow מובנות, הלוכדות מדדים, פרמטרים וארטיפקטים בלי צורך בשרתי מעקב חיצוניים. לאחר אימון המודלים, הם עוברים לרישום מאוחד הכולל גרסאות, אישורים ומעקב מלא אחר מקור הנתונים (data lineage). לבסוף, המודלים מוגשים באמצעות משימות batch מנוהלות או נקודות קצה HTTP בזמן אמת, ומזינים צרכנים כמו Power BI, Power Apps ולקוחות API מותאמים אישית.
Lakehouse: רסנו את הקלט, שמרו על השליטה
הרעיון המרכזי של Lakehouse הוא לשלב את הגמישות של אגם נתונים עם האמינות של מחסן נתונים. כדי שזה יעבוד היטב, צריך לארגן את הנתונים לשכבות נפרדות.
ארגון הטבלאות בשכבות
- Bronze: זוהי שכבת ההטמעה הגולמית. הנתונים נוחתים כאן לפי עקרונות schema-on-read ונשארים בלתי ניתנים לשינוי לצורך ביקורת ועיבוד מחדש.
- Silver: בשכבה זו הנתונים מנוקים, מוגדרים לפי טיפוסים ומחוברים זה לזה. מידע מזהה אישי (PII) מצומצם למינימום, ובדיקות איכות ראשוניות נאכפות.
- Gold: שכבת ה-gold מכילה אגרגציות מוכנות לפיצ'רים, המבוססות על חוזי נתונים ברורים ומתועדים שמודלי למידת המכונה שלכם יכולים לצרוך ישירות.
גישה לפי כוונה
השתמשו בבקרת גישה מבוססת תפקידים (RBAC) ברמת סביבת העבודה, בשילוב רשימות בקרת גישה (ACL) ברמת הטבלה. ספקו לאנשי מדע הנתונים הרשאות קריאה לטבלאות silver ו-gold, והגבילו הרשאות כתיבה במיוחד לטבלאות הפיצ'רים ולתיקיות הניסוי.
מעקות בטיחות לאיכות הנתונים
יש להטמיע ציפיות קפדניות לגבי אילוצי not-null, טווחי ערכים ושלמות התייחסותית. כאשר שורות נכשלות בבדיקות אלה, ניתוב אותן ישירות לטבלת _quarantine, כך שצינורות העיבוד הבאים לא ייכשלו בשקט ולא יטמיעו נתונים פגומים.
מאגר פיצ'רים לייט
התייחסו לפיצ'רים שניתנים לשימוש חוזר כאל טבלאות gold – לדוגמה, feat_customer_rolling_90d – וליוו אותם במילון נתונים ב-YAML, כדי לוודא שהצוות מבין מה כל פיצ'ר מייצג.
מחברות בלי הכאב
עבודה שיתופית על קוד עלולה להפוך לכאוס במהירות אם מפתחים מסתמכים על סביבות שונות. Fabric מספקת kernels מותקנים מראש, ביניהם pandas, PySpark, scikit-learn ו-PyTorch, כך שכולם עובדים מאותו בסיס בדיוק.
אמצו מבנה פרויקט מסודר שמפריד בין מחברות חקר, סקריפטים להנדסת פיצ'רים, שגרות אימון מודלים וקבצי תצורה. שמרו על יכולת השחזור בקוד ולא בלחיצות ידניות בממשק. קראו מה-Lakehouse באמצעות Spark SQL, כתבו את הפיצ'רים הסופיים כטבלאות Delta, ותמיד זרעו טבלאות דגימה קטנות לפיתוח, כדי שהצוות יוכל לחזור על עבודתו במהירות בלי לחכות לשאילתות על מערכי נתונים מלאים וענקיים.
מעקב אחר הכול עם MLflow (מובנה)
ניהול ידני של ניסויי מודלים מוביל לתוצאות שאי אפשר לשחזר. על ידי שימוש באינטגרציה המובנית של MLflow ב-Fabric, אתם מבטיחים השוואתיות בין הרצות, יכולת ביקורת מלאה וביטול שינויים ללא מאמץ כאשר מודל שנפרס לאחרונה מציג ביצועים נמוכים.
תעדו את כל היפר-הפרמטרים, מדדי ההערכה וארטיפקטי המודלים שאומנו ישירות בתוך סקריפטים האימון. דאגו לתייג את ההרצות במטא-דאטה הקשרית, כמו חלון נתונים, גרסאות של קבוצות מאפיינים והאש של ה-commit בקוד, ונעלו את טבלאות האימון לגרסאות Delta snapshot ספציפיות.
רישום, אישורים ומעקב אחר שושלת
העברת מודל משלב הניסוי לייצור לעולם לא צריכה להיות עניין של ניחושים. קדמו את ההרצות בעלות הביצועים הטובים ביותר למודל רשום (Registered Model) באמצעות גרסאות סמנטיות, למשל 1.0.0. הטמיעו תהליך אישור דו-שלבי שדורש חתימה הן מבעל מדע הנתונים והן מבעל העסק. לבסוף, תעדו מטא-דאטה מקיפה של כרטיס מודל, הכוללת את מטרת המודל, היקף הנתונים, הערות על הוגנות והיעדי רמת שירות (SLO) לניטור.
אפשרויות הגשה (בחרו לפי עומס העבודה)
ניקוד אצווה (זול ואמין)
עבור עומסי עבודה שאינם דורשים תגובה מיידית בתת-שנייה, ניקוד אצווה הוא הפתרון המתאים ביותר. השתמשו במשימות מתוזמנות של Fabric או במחברות כדי לקרוא מודלים לייצור מהרישום, להחיל אותם על מערכי נתונים באצווה ולכתוב את התחזיות בחזרה אל ה-Lakehouse.
נקודת קצה בזמן אמת (אפליקציות אינטראקטיביות)
כאשר המשתמשים זקוקים למשוב מיידי, כמו אימות טפסים או דירוג סיכונים בלחיצה, פרסו את המודל הרשום כנקודת קצה מנוהלת בזמן אמת ישירות דרך ממשק המשתמש של Fabric. חשפו חוזה JSON צפוי וחברו אותו בצורה מאובטחת ל-Power Apps או ליישומים חיצוניים.
ניטור ואימון מחדש
פריסת מודל היא רק חצי מהקרב. עליכם לנטר באופן מתמיד סחיפה של נתונים (data drift) על ידי השוואת התפלגויות המאפיינים החיות לבסיס האימון, תוך שימוש בסף של דיברגנציית Kullback-Leibler או Population Stability Index. עקבו אחר מדדי תקינות תפעולית, כולל זמן אחזור של נקודת הקצה, שיעורי שגיאות ועלות לאלף ניקודים. אטמטו את צינורות האימון מחדש באמצעות שילוב של טריגרים מבוססי זמן והתראות סחיפה מבוססות אירועים, כדי לוודא שהמודלים שלכם ימשיכו להיות מדויקים לאורך זמן.
אבטחה ותאימות
שמירה על אבטחה היא קריטית בעת טיפול בנתונים ארגוניים. אכפו את עקרון ההרשאות המינימליות על ידי מתן גישת קריאה לאנשי מדע הנתונים לשכבות silver ו-gold, תוך הגבלת הרשאות הכתיבה לתיקיות ניסוי ומאפיינים ייעודיות. השתמשו בזהויות מנוהלות וב-Azure Key Vault לאחסון כל פרטי הזיהוי, כך שסיסמאות לעולם לא יופיעו בקוד קשיח במחברות. צמצמו את החשיפה של PII על ידי גיבוב (hashing) או טוקניזציה של מידע רגיש מוקדם בשכבת ה-silver, כך שלא יתפשט לתוך מאגרי המאפיינים שלכם.
מה למדוד (הוכחת ערך במהירות)
כדי להדגים במהירות את הערך של יוזמות למידת המכונה שלכם, התמקדו במדדים הנכונים. מדדו את עוצמת המודל באמצעות AUC ו-precision-at-k עבור דירוגים, עקבו אחר השפעה עסקית באמצעות הכנסה incremental או ירידה בשיעורי נטישה, נטרו את המהירות מהמוכנות של הנתונים ועד לפריסה בייצור, והעריכו את אמינות התשתית ואת היעילות בעלות לאלף תחזיות.
תוכנית פריסה ל-14 יום
אם אתם רוצים לעבור מאפס לפריסת Fabric מוכנה לייצור במהירות, עקבו אחר תוכנית הפריסה הדו-שבועית המובנית הבאה:
- ימים 1–2: ניקוי Lakehouse, מבנה bronze/silver/gold, ACLs ובדיקות איכות.
- יום 3: שלד מחברות, עזרי נתונים וטבלאות דוגמה לפיתוח.
- ימים 4–5: קבוצת מאפיינים v1, אימון מודל בסיס ותיעוד MLflow.
- יום 6: חבילת הערכה, יצירת כרטיס מודל ורישום המודל (v0.1).
- יום 7: יצירת משימת ניקוד אצווה ושילוב לוח מחוונים של Power BI.
- יום 8: MVP לניטור, בדיקות סחיפה ותיעוד תפעולי.
- יום 9: הטמעת תהליך האישורים והעברה לייצור.
- יום 10: הגדרת נקודת קצה בזמן אמת, הגבלת קצב (throttling) ותיעוד בקשות (אם רלוונטי).
- ימים 11–12: בדיקות A/B, backtesting והגדרת KPI עסקיים.
- יום 13: ממשל עלויות, מעקות בטיחות להרחבה אוטומטית ותוכנית פריסת canary.
- יום 14: תיעוד Runbook, העברה לצוות ותכנון Backlog.
מלכודות נפוצות (ותיקונים מהירים)
גם צוותים מנוסים נתקלים במכשולים. כדי להימנע מ"רולטת מחברות", נעלו את הסביבות שלכם לגרעינים (kernels) סטנדרטיים של Fabric. אל תבצעו בדיקות אך על דגימות קטנות, שנשברות כשמגדילים לקבוצות נתונים מלאות. מנעו "מודלי רפאים" בסביבת ייצור על ידי אכיפה קפדנית של תהליכי קידום ברישום המודלים. שמרו על עלויות הענן בשליטה על ידי עיבוד באצוות (batch) כברירת מחדל, בכל מקום שאפשר, ושמירה במטמון של מאפיינים נגזרים.
קטעי קוד שימושיים
כדי לעזור לכם להתחיל את הפרויקט הבא, הנה קטע קוד קצר שמדגים כיצד לקרוא גרסה מסוימת של טבלת Delta:
sales_v = spark.read.option("versionAsOf", 123).table("lakehouse.gold.sales_txn")אם תרצו לחלץ את חשיבות המאפיינים (feature importance) באמצעות scikit-learn ולרשום אותה ישירות ל-MLflow, השתמשו בגישה הבאה:
import pandas as pd
fi = pd.Series(clf.feature_importances_, index=feature_cols).sort_values(ascending=False)
mlflow.log_artifact(fi.head(30).to_frame("importance").to_csv("fi.csv", index=True))ולחישוב Population Stability Index (PSI) לזיהוי סחף (drift):
import numpy as np
def psi(expected, actual, bins=10):
e, b = np.histogram(expected, bins=bins, range=(np.min(expected), np.max(expected)))
a, _ = np.histogram(actual, bins=b, range=(np.min(expected), np.max(expected)))
e = np.clip(e / e.sum(), 1e-6, None); a = np.clip(a / a.sum(), 1e-6, None)
return np.sum((a - e) * np.log(a / e))אם תרצו, שתפו בתגובות את שמות טבלאות ה-Lakehouse הנוכחיות שלכם ואת מקרה השימוש היעד – כגון נטישת לקוחות (customer churn), דירוג לידים (lead scoring) או חיזוי ביקוש (demand forecasting) – או פנו אלינו ישירות. נמפה עבורכם קבוצת מאפיינים מינימלית, בחירת מודל בסיס, וחיבור מדויק של עיבוד באצוות או זמן אמת, כדי לעזור לכם לשחרר את פריסת Microsoft Fabric הראשונה שלכם במהירות!