הגדרה של מעקב אחרי מודלים

כדי להתחיל לעקוב אחרי מודל, צריך לרשום אותו במאגר המודלים של פלטפורמת הנציגים של Gemini Enterprise, ואז ליצור כלי למעקב אחרי מודל כדי להגדיר את פרטי המעקב. בדף הזה מוסבר איך לרשום מודל, ומוצגות כל המפרטים שאפשר להגדיר בהגדרת מעקב.

הכלי למעקב אחרי מודלים גרסה 2 תומך רק במודלים טבלאיים. אפשר להפעיל את המודלים האלה בפלטפורמת הסוכנים או בתשתית הפעלה אחרת.

רישום מודל

אתם יכולים לעקוב אחרי מודלים שנפרסו בכל תשתית להצגת מודלים, כמו נקודות קצה של Agent Platform,‏ GKE או BigQuery. כדי לרשום מודל שמופעל ב-Agent Platform, אפשר לעיין במאמר בנושא ייבוא מודלים.

למודלים שמופעלים מחוץ לפלטפורמת הסוכנים, אפשר לרשום מודל הפניה, שהוא placeholder למודלים שמופעלים במשאבים אחרים. כשרושמים מודל הפניה, רושמים את השם של המודל, כמו בדוגמה הבאה:

Python SDK

model = aiplatform.Model.upload(
 display_name="MODEL_NAME"
)

לגבי מודלים להשוואה, אפשר להשתמש במערכי נתונים מ-Cloud Storage או מ-BigQuery כדי לעקוב אחרי המודל. אי אפשר לעקוב אחרי שיוך התכונות במודלים להשוואה.

מקורות נתונים

אתם יכולים לעקוב אחרי מדדים בנתונים שמאוחסנים במקורות הבאים. אין תמיכה בתכונות מוטמעות. כדי לנתח נתונים מוטמעים, צריך קודם לשטח אותם. אם הנתונים שלכם נמצאים, לדוגמה, ב-BigQuery, אתם יכולים להשתמש ב-SQL כדי לבצע טרנספורמציה של תכונות מקוננות.

BigQuery
אפשר לספק URI של טבלה ב-BigQuery או שאילתת SQL. כדי לציין חלון זמן או להגדיר מעקב רציף, הטבלה צריכה לכלול עמודה של חותמת זמן, שאתם מציינים בקבוצת הנתונים כ-timestamp_field.
Cloud Storage
הנתונים צריכים להיות מאוחסנים בפורמט CSV או JSONL. בקובצי CSV, צריך לכלול כותרת עם שמות העמודות כשורה הראשונה בקובץ.
משימות חיזוי באצווה ב-Agent Platform
כדי לעקוב אחרי משימת חיזוי באצווה, צריך לציין את שם המשאב המוגדר במלואו של משימת החיזוי באצווה. אפשר להפעיל את פעולת המעקב מיד אחרי שיוצרים את משימת התחזית של אצווה, בלי לחכות לסיום משימת האצווה. הכלי למעקב אחרי מודלים בגרסה 2 מריץ את משימת המעקב זמן קצר אחרי שמשימת החיזוי באצווה מסתיימת.
רישום ביומן של נקודת הקצה של Agent Platform

כדי להתחיל לעקוב אחרי נקודת הקצה, צריך להפעיל בה רישום ביומן של בקשות ותגובות. אי אפשר לעקוב אחרי נקודות קצה פרטיות כי הן לא תומכות ברישום ביומן של בקשות ותגובות.

בגרסה 2 של Model Monitoring, הבקשות והתשובות של נקודות הקצה של Agent Platform צריכות להיות בפורמט JSON, כמו בפורמט שבו משתמשים בשיטת predict. אובייקטים מסוג instances מוכנסים לטבלת הרישום בעמודה request_payload כמערך: [INSTANCE_1, INSTANCE_2]. באופן דומה, אובייקטים מסוג predictions מוכנסים לטבלת הרישום בעמודה response_payload כמערך: [PREDICTION_1, PREDICTION_2].

יש תמיכה בשיטות אחרות (כמו raw predict), אבל הנתונים צריכים להיות בפורמט JSON של הבקשה והתגובה, כפי שמתואר בהפניה ל-API של השיטה predict.

מערך נתונים מנוהל ב-Agent Platform

קבוצות נתונים שמנוהלות ב-Agent Platform. מידע נוסף זמין במאמר בנושא פורמט של קבוצת נתונים טבלאית.

מעקב רציף

ניטור רציף (שנקרא גם הפעלות מתוזמנות) מאפשר להפעיל משימות ניטור לפי לוח זמנים שהגדרתם. התכונה 'מעקב רציף אחרי מודלים' עם מפרטי זמן תומכת רק ב-BigQuery וברישום ביומן של נקודות קצה בפלטפורמת הסוכנים כמקורות נתונים.

כדי להשתמש ב-BigQuery כמקור לניטור רציף עם מפרטי זמן, הטבלה צריכה לכלול עמודה של חותמת זמן. בטבלאות BigQuery שנוצרו על ידי רישום ביומן של נקודת הקצה של Agent Platform, הטבלאות כבר כוללות עמודה של logging_time חותמת זמן.

כשיטה כללית לאופטימיזציה של BigQuery, מומלץ לחלק את הטבלה למחיצות לפי חותמת זמן כדי לשפר את ביצועי השאילתה ולנהל את העלויות על ידי צמצום מספר הבייטים שנקראים על ידי השאילתה.

סוגי נתונים נתמכים

יש תמיכה בתכונות מספריות ובתכונות קטגוריות. אתם יכולים לכלול עמודות עם מערכים, כמו מערך של ערכים בוליאניים, קטגוריים, מחרוזות או מספרים שלמים. ב-Model Monitoring v2, המערך משוטח כך שכל רכיב במערך הוא ערך נפרד.

תכונות מספריות ממופות לסוגי הנתונים הבאים:

  • Float
  • מספר שלם

מיפוי של תכונות קטגוריות לסוגי הנתונים הבאים:

  • בוליאני
  • String
  • קטגורי

סכימת המודל

הגרסה השנייה של 'מעקב אחרי מודלים' משתמשת בסכימת המודל כדי לנתח את הנתונים. חובה להשתמש בסכימה הזו כשיוצרים כלי למעקב אחרי מודל. ב-AutoML Tables, לא צריך לציין את סכימת המודל. Gemini Enterprise Agent Platform Model Monitoring מאחזר אותה באופן אוטומטי.

בדוגמה הבאה מוצג המבנה הכללי של הסכימה הצפויה:

Python SDK

ml_monitoring.spec.ModelMonitoringSchema(
  feature_fields=[
      ml_monitoring.spec.FieldSchema(
          name="FEATURE_NAME",
          data_type="DATA_TYPE",
          repeated=BOOLEAN
      )
  ],
    prediction_fields = [
      ml_monitoring.spec.FieldSchema(
          name="PREDICTION_NAME",
          data_type="DATA_TYPE",
          repeated=BOOLEAN
      )
  ],
  ground_truth_fields = [
      ml_monitoring.spec.FieldSchema(
          name="GROUND_TRUTH_NAME",
          data_type="DATA_TYPE",
          repeated=BOOLEAN
      )
  ]
)

אם עמודה כוללת מערך של ערכים, צריך להגדיר את repeated ל-true.

ב-AutoML Tables, כש-Model Monitoring v2 מאחזר את סכימת המודל, הוא משתמש בתכונות שנמצאות בקבוצת הנתונים לאימון כבתכונות הקלט, לא כולל עמודת היעד. פלט החיזוי מוגדר כעמודה predicted_{target_column}. בנוסף, שיטת החילוץ של Model Monitoring v2 לערך פלט החיזוי תלויה בסוג המודל. במודלים של סיווג ב-AutoML Tables,‏ Gemini Enterprise Agent Platform Model Monitoring עוקב אחרי התפלגות התוויות של argmax. במודלים של רגרסיה ב-AutoML Tables, ‏ Gemini Enterprise Agent Platform Model Monitoring עוקב אחרי התפלגות הערכים.

מערכי נתונים של ערך בסיס ויעד

קבוצת הנתונים של נקודת ההשוואה מייצגת נקודת התייחסות שמשמשת למדידת מדדים לאורך זמן. מערך הנתונים של היעד כולל נתונים עדכניים יותר שמשמשים להשוואה למערך הנתונים של נקודת הבסיס. התכונה 'מעקב אחרי מודלים' בגרסה 2 מחשבת את המדדים בין שני מערכי הנתונים כדי לעזור לכם לעקוב אחרי איכות המודלים. מערכי הנתונים של נקודת הבסיס ושל היעד יכולים להיות מכל מקור נתונים נתמך.

לדוגמה, אפשר להשוות בין מערך הנתונים של ההצגה (יעד) לבין מערך הנתונים של האימון של המודל (בסיס), או בין מערך הנתונים של ההצגה (יעד) לבין מערך נתונים של הצגה מתקופה מוקדמת יותר (בסיס).

מערך נתונים של היעד

כשבוחרים את מערך הנתונים של היעד, אפשר לעבד את כל מערך הנתונים באמצעות Model Monitoring v2, או להגדיר חלון שמציין את כמות הנתונים שצריך לבדוק באמצעות Model Monitoring v2. לדוגמה, אם מציינים חלון של 24 שעות, הגרסה השנייה של Model Monitoring משווה רק את הנתונים מ-24 השעות האחרונות לנתוני הבסיס.

בניתוח של סחף נתונים, הסחף יכול להיות תנודתי אם מעבדים נפח נתונים לא מספיק. חלון זמן גדול יותר יכול לעזור להימנע מהתראות שהופעלו כתוצאה ממספר דגימות נמוך.

מערך נתונים של קהל הבסיס

אתם יכולים להגדיר את קבוצת הנתונים של קו הבסיס לכל מקור נתונים נתמך, כמו קבוצת נתונים מנוהלת של Agent Platform שמכילה את נתוני האימון של המודל. בדומה לקבוצות נתוני היעד, אתם יכולים לבחור אם המערכת של Model Monitoring v2 תעבד את קבוצת הנתונים כולה או חלון מסוים.

מפרט הזמן

יש שתי שיטות להגדרת משך הזמן של המעקב:

  • טווח זמן, שכולל זוג של שעת התחלה ושעת סיום.
  • חלון זמן והיסט, שמציינים את כמות הנתונים שצריך לכלול ואת תקופת הזמן בין מערכי הנתונים להשוואה.

לדוגמה, במקרים שבהם רוצים להשוות בין נתונים עדכניים לבין נתונים שנאספו בעבר, אפשר להגדיר הפרש. ההפרש מציין את פרק הזמן בין קבוצת הנתונים של היעד לבין קבוצת הנתונים של קו הבסיס. לדוגמה, נניח שהגדרתם את קבוצת הנתונים של היעד עם חלון של יום אחד, וקבוצת הנתונים של קו הבסיס מוגדרת עם הפרש של שבוע וגם עם חלון של יום אחד.

במקרה כזה, מערך נתוני היעד כולל נתונים מ-24 השעות שלפני שעת ההתחלה של משימת המעקב. קבוצת הנתונים של נקודת הבסיס כוללת נתונים מאותה תקופה של 24 שעות, אבל בדיוק שבוע לפני כן.

יצירת מעקב אחר מודל

יוצרים כלי למעקב אחרי מודלים כדי לשייך פרטי מעקב לגרסת מודל שנרשמה במאגר המודלים של Gemini Enterprise Agent Platform. המשאב שנוצר נקרא כלי למעקב אחרי מודלים. אפשר ליצור רק כלי אחד למעקב אחרי מודלים לכל גרסת מודל.

כשיוצרים כלי למעקב אחרי מודלים, צריך לציין את שם המודל, הגרסה והסכימה שלו. במודלים מסוימים, כמו מודלים של AutoML, הסכימה מסופקת לכם.

אפשר להגדיר יעדי מעקב, מערך נתונים לאימון, מיקום פלט למעקב והגדרות התראות במעקב אחרי המודל. כשמריצים משימת מעקב, הגדרות ברירת המחדל הן אלה שהוגדרו במעקב אחרי המודל.

המסוף

  1. נכנסים לדף Monitoring במסוף Google Cloud .

    מעבר למעקב

  2. לוחצים על הגדרת מעקב.

  3. בוחרים מודל ואת הגרסה שלו למעקב.

  4. אם רלוונטי, מגדירים את הסכימה של תכונות הקלט, של פלט התחזית ואם יש אפשרות, של נתוני האמת.

  5. אופציונלי: כדי לעקוב אחרי סחיפה ממערך הנתונים של האימון, מציינים את המיקום של מערך הנתונים.

  6. אופציונלי: כדי לציין קטגוריה קיימת ב-Cloud Storage לייצוא תוצאות המעקב, מרחיבים את אפשרויות מתקדמות ואז בוחרים קטגוריה.

  7. כדי להגדיר את יעדי המעקב, לוחצים על המשך או על הגדרה כדי ליצור את הכלי למעקב אחרי מודלים.

    ההגדרה הזו משמשת כברירת מחדל כשמריצים עבודה.

  8. בוחרים את היעדים שרוצים לעקוב אחריהם. לכל יעד אפשר להגדיר את המדד למעקב ואת ערך הסף להתראות.

  9. מציינים את כתובות האימייל ואת ערוצי ההתראות ב-Cloud Monitoring כדי לקבל התראות על מעקב.

Python SDK

from vertexai.resources.preview import ml_monitoring
from google.cloud.aiplatform_v1beta1.types import ExplanationSpec, ExplanationParameters, ExplanationMetadata

# Define Monitoring Schema. For AutoML models, this is optional if the schema information is available.
MONITORING_SCHEMA=ml_monitoring.spec.ModelMonitoringSchema(
  feature_fields=[
      ml_monitoring.spec.FieldSchema(
          name="sepal_length_cm",
          data_type="float"
      ),
      ml_monitoring.spec.FieldSchema(
          name="sepal_width_cm",
          data_type="float"
      ),
      ml_monitoring.spec.FieldSchema(
          name="petal_length_cm",
          data_type="float"
      ),
      ml_monitoring.spec.FieldSchema(
          name="petal_width_cm",
          data_type="float"
      )
  ],
  prediction_fields = [
      ml_monitoring.spec.FieldSchema(
          name="predicted_species",
          data_type="categorical"
      )
  ]
)

TRAINING_DATASET = ml_monitoring.spec.MonitoringInput(
  gcs_uri=GCS_INPUT_URI,
  data_format=DATA_FORMAT,
)

DEFAULT_FEATURE_DRIFT_SPEC=ml_monitoring.spec.DataDriftSpec(
  categorical_metric_type="l_infinity",
  numeric_metric_type="jensen_shannon_divergence",
  default_categorical_alert_threshold=0.1,
  default_numeric_alert_threshold=0.1,
)

DEFAULT_PREDICTION_OUTPUT_DRIFT_SPEC=ml_monitoring.spec.DataDriftSpec(
  categorical_metric_type="l_infinity",
  numeric_metric_type="jensen_shannon_divergence",
  default_categorical_alert_threshold=0.1,
  default_numeric_alert_threshold=0.1,
)

DEFAULT_FEATURE_ATTRIBUTION_SPEC=ml_monitoring.spec.FeatureAttributionSpec(
  default_alert_threshold=0.0003,
  feature_alert_thresholds={"sepal_length_cm":0.0001},
)

EXPLANATION_SPEC=ExplanationSpec(
  parameters=ExplanationParameters(
      {"sampled_shapley_attribution": {"path_count": 2}}
  ),
  metadata=ExplanationMetadata(
      inputs={
          "sepal_length_cm": ExplanationMetadata.InputMetadata({
              "input_tensor_name": "sepal_length_cm",
              "encoding": "IDENTITY",
              "modality": "numeric",
          }),
          ...
      },
      ...
  )
)

DEFAULT_OUTPUT_SPEC = ml_monitoring.spec.output.OutputSpec(
  gcs_base_dir=GCS_OUTPUT_BASE_DIR
)

DEFAULT_NOTIFICATION_SPEC = ml_monitoring.spec.NotificationSpec(
  user_emails=['email@example.com']
)

my_model_monitor = ml_monitoring.ModelMonitor.create(
  display_name=MONITORING_JOB_DISPLAY_NAME,
  model_name=MODEL_RESOURCE_NAME,
  model_version_id=MODEL_VERSION_ID,
  model_monitoring_schema=MONITORING_SCHEMA,
  # The following fields are optional for creating the model monitor.
  training_dataset=TRAINING_DATASET,
  tabular_objective_spec=ml_monitoring.spec.TabularObjective(
      feature_drift_spec=DEFAULT_FEATURE_DRIFT_SPEC,
      prediction_output_drift_spec=DEFAULT_PREDICTION_OUTPUT_DRIFT_SPEC,
      feature_attribution_spec=DEFAULT_FEATURE_ATTRIBUTION_SPEC,
  ),
  explanation_spec=DEFAULT_FEATURE_ATTRIBUTION_SPEC,
  output_spec=DEFAULT_OUTPUT_SPEC,
  notification_spec=DEFAULT_NOTIFICATION_SPEC
)