Vertex AI: ייצוא ופריסה של מודל למידת מכונה של BigQuery ל-Prediction

1. סקירה כללית

בשיעור ה-Lab הזה תאמנו מודל באמצעות למידת מכונה של BigQuery, ולאחר מכן תייצאו ותפרסו את המודל הזה ל-Vertex AI. זוהי הצעה החדשה של מוצר ה-AI ב-Google Cloud.

מה לומדים

נסביר לכם איך:

  • אימון מודל באמצעות למידת מכונה של BigQuery (BQML)
  • ייצוא מודל BQML ל-Cloud Storage
  • פריסת BQML שאומנתם ל-Vertex AI
  • קבלת תחזיות על המודל שנפרס

העלות הכוללת של הפעלת שיעור ה-Lab הזה ב-Google Cloud היא כ-$2.

2. מבוא ל-Vertex AI

בשיעור ה-Lab הזה נעשה שימוש במוצר ה-AI החדש ביותר שזמין ב-Google Cloud. Vertex AI משלב את הצעות למידת המכונה ב-Google Cloud ליצירת חוויית פיתוח חלקה. בעבר, ניתן היה לגשת למודלים שעברו אימון באמצעות AutoML ומודלים בהתאמה אישית דרך שירותים נפרדים. המוצר החדש משלב את כל ממשקי ה-API האלה בממשק API אחד, לצד מוצרים חדשים אחרים. תוכלו גם להעביר פרויקטים קיימים ל-Vertex AI. יש לך משוב? אפשר למצוא אותו בדף התמיכה.

Vertex AI כולל מוצרים רבים ושונים לתמיכה בתהליכי עבודה של למידת מכונה מקצה לקצה. שיעור ה-Lab הזה יתמקד במוצרים שמודגשים בהמשך: Prediction ו-notebooks.

סקירה כללית של המוצר Vertex

3. הגדרת הסביבה

כדי להריץ את ה-Codelab הזה צריך פרויקט ב-Google Cloud Platform שהחיוב מופעל בו. כדי ליצור פרויקט, יש לפעול לפי ההוראות האלה.

שלב 1: מפעילים את ממשק ה-API של Compute Engine

עוברים אל Compute Engine ובוחרים באפשרות Enable (הפעלה) אם היא לא מופעלת עדיין. תצטרכו את הקישור הזה כדי ליצור מכונה של ה-notebook.

שלב 2: מפעילים את Vertex AI API

עוברים לקטע Vertex AI במסוף Cloud ולוחצים על Enable Vertex AI API.

מרכז הבקרה של Vertex AI

שלב 3: יצירת מכונת notebooks

נשתמש ב-notebooks כדי לקבל חיזויים אחרי שנפרוס את המודל שלנו. בקטע Vertex AI במסוף Cloud, לוחצים על Notebooks:

תפריט Vertex AI

משם, בוחרים באפשרות מכונה חדשה. לאחר מכן בוחרים בסוג המכונה TensorFlow Enterprise 2.3 ללא מעבדי GPU:

מכונת TFE

משתמשים באפשרויות ברירת המחדל ואז לוחצים על יצירה. אחרי שיוצרים את המכונה, בוחרים באפשרות Open JupyterLab:

פתיחת notebook של CAIP

4. אימון מודל של BigQuery ML

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

שלב 1: יצירת מערך נתונים ב-BigQuery בפרויקט

כדי לאמן מודל בלמידת מכונה של BigQuery, תצטרכו ליצור מערך נתונים בפרויקט שבו יאוחסנו המודל. לוחצים על הפרויקט בסרגל התפריטים השמאלי ובוחרים באפשרות Create Dataset (יצירת מערך נתונים):

יצירת מערך נתונים של BQ

בשדה Dataset ID, מזינים cc_default. משאירים את שאר השדות כמו שהם ולוחצים על Create dataset.

שלב 2: מריצים שאילתת CREATE MODEL

בעורך השאילתות של BigQuery, מריצים את שאילתת CREATE MODEL הבאה כדי ליצור ולאמן מודל של BigQuery ML על מערך הנתונים הציבורי שבו נשתמש. חשוב להחליף את your-project בשם של הפרויקט ב-Cloud:

CREATE OR REPLACE MODEL
  `your-project.cc_default.logistic_model` OPTIONS(model_type='LOGISTIC_REG',
    input_label_cols=['default_payment_next_month']) AS
SELECT
  limit_balance,
  sex,
  education_level,
  marital_status,
  age,
  pay_0,
  pay_2,
  pay_3,
  pay_4,
  pay_5,
  pay_6,
  bill_amt_1,
  bill_amt_2,
  bill_amt_3,
  bill_amt_4,
  bill_amt_5,
  bill_amt_6,
  pay_amt_1,
  pay_amt_2,
  pay_amt_3,
  pay_amt_4,
  pay_amt_5,
  pay_amt_6,
  default_payment_next_month
FROM
  `bigquery-public-data.ml_datasets.credit_card_default`

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

פרטי מודל BQML

אפשר ללחוץ על המודל כדי לעיין במדדי האימון וההערכה שלו.

5. ייצוא מודל למידת מכונה של BigQuery

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

שלב 1: יצירת קטגוריה של Cloud Storage למודל שלכם

בפרטי המודל, לוחצים על ייצוא מודל:

ייצוא מודל BQML

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

עיון בקטגוריות של GCS

לאחר מכן, לוחצים על הסמל + כדי ליצור קטגוריה חדשה:

קטגוריה חדשה של GCS

נותנים לו שם ייחודי (השמות של קטגוריות האחסון צריכים להיות ייחודיים באופן גלובלי). לוחצים על המשך. בשלב הבא, בקטע Location type (סוג המיקום), בוחרים באפשרות Region (אזור) ובוחרים אחד מהאזורים בתפריט הנפתח:

מיקום הקטגוריה

משתמשים בסוג האחסון (storage class) שמוגדר כברירת מחדל, ובקטע בקרת גישה מוודאים שהאפשרות Uniform מסומנת:

בקרת גישה אחידה

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

שלב 2: מייצאים את מודל BQML

אחרי שיצרתם את הקטגוריה החדשה, מזינים model-assets (או כל דבר שרוצים) בשדה Name ולוחצים על Select (בחירה):

נתיב לייצוא של המודל

לאחר מכן לוחצים על ייצוא. הפעולה הזו תיצור משימה ב-BigQuery שתייצא את המודל בפורמט SaveModel של TensorFlow לקטגוריה החדשה שנוצרה של GCS. הייצוא יימשך כדקה.

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

נכסי מודל שיוצאו

6. ייבוא המודל ל-Vertex AI

בשלב הזה נתייחס למיקום האחסון ב-GCS שאליו ייצאנו עכשיו את נכסי המודל כדי ליצור את המודל ולייבא אותו ל-Vertex AI.

שלב 1: מייבאים את המודל

במסוף Cloud, עוברים לקטע Models של Vertex AI. משם, בוחרים באפשרות ייבוא:

ייבוא מודל

בשלב הראשון, נותנים למודל את השם predict_default. בוחרים את אותו האזור שבו יצרתם את הקטגוריה (us-central1, europe-west4 או asia-east1. לאחר מכן לוחצים על המשך. בהגדרות המודל, משאירים את האפשרות 'ייבוא פריטי מידע מהמודל למאגר תגים חדש שנוצר מראש' נבחר.

בתפריט הנפתח Model framework, בוחרים באפשרות TensorFlow. לאחר מכן בוחרים באפשרות 2.3 כגרסת המסגרת.

בשדה המיקום של פריט המידע שנוצר בתהליך הפיתוח (Artifact) לוחצים על עיון, נכנסים לקטגוריה של GCS שיצרתם ואז לוחצים על הספרייה נכסי מודל:

נתיב הנכסים של המודל

לאחר מכן לוחצים על ייבוא. ייבוא המודל יימשך כמה דקות. לאחר היצירה שלו אפשר לראות אותו בקטע המודלים במסוף Cloud:

קטע בנושא דגמים

7. פריסת המודל בנקודת קצה

עכשיו, אחרי שתעלו את המודל, השלב הבא הוא ליצור נקודת קצה (endpoint) ב-Vertex. מודל של משאב ב-Vertex יכול להיות משויכות אליו כמה נקודות קצה, ואפשר לפצל את תעבורת הנתונים בין נקודות קצה.

שלב 1: יצירת נקודת קצה

בדף המודל, נכנסים לכרטיסייה פריסה ובדיקה ולוחצים על פריסה לנקודת קצה (endpoint):

פריסה ובדיקה

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

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

נקודת קצה פרוסה

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

8. קבלת חיזויים על המודל שנפרס

יש כמה אפשרויות לקבל חיזויים של מודלים:

  • ממשק משתמש של Vertex AI
  • Vertex AI API

כאן נראה איך לקבל חיזויים באמצעות ה-API

שלב 1: קבלת חיזויים של המודלים באמצעות Vertex AI API

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

לאחר מכן, פותחים את מכונת ה-notebook שיצרתם ופותחים notebook של Python 3 ממרכז האפליקציות:

פתיחת מסמך notebook

ב-notebook, מריצים את הפקודה הבאה בתא כדי לכתוב דוגמה לבדיקה בקובץ JSON בשם default-pred.json. אנחנו נשלח את הדוגמה הבאה למודל שלנו לצורך חיזוי:

%%writefile default-pred.json
{
  "instances": [
    {"age": 39,
    "bill_amt_1": 47174,
    "bill_amt_2": 47974,
    "bill_amt_3": 48630,
    "bill_amt_4": 50803,
    "bill_amt_5": 30789,
    "bill_amt_6": 15874,
    "education_level": "1",
    "limit_balance": 50000,
    "marital_status": "2",
    "pay_0": 0,
    "pay_2":0,
    "pay_3": 0,
    "pay_4": 0,
    "pay_5": "0",
    "pay_6": "0",
    "pay_amt_1": 1800,
    "pay_amt_2": 2000,
    "pay_amt_3": 3000,
    "pay_amt_4": 2000,
    "pay_amt_5": 2000,
    "pay_amt_6": 2000,
    "sex": "1"}
  ]
}

לאחר מכן, בממשק המשתמש של Vertex, לוחצים על Sample Request (בקשה לדוגמה) של נקודת הקצה שפרסתם:

בקשה לדוגמה

מעתיקים ל-notebook את הקוד משלב 4 שבכרטיסייה REST ומריצים את התא:

משתני בקשות

לאחר מכן מוסיפים משתנה לאזור שבו יצרתם את הקטגוריה והמודל. מחליפים את your-region במחרוזת הבאה:

REGION="your-region" # either us-central1, europe-west4, or asia-east1

לסיום, שולחים בקשת חיזוי לנקודת הקצה (endpoint) באמצעות curl. כדי לעשות את זה, מעתיקים את הקוד הבא ל-notebook:

!curl \
-X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://us-central1-prediction-aiplatform.googleapis.com/v1alpha1/projects/$PROJECT_ID/locations/$REGION/endpoints/$ENDPOINT_ID:predict \
-d "@default-pred.json"

אמורים להופיע משהו כזה (ערכי החיזוי המדויקים ישתנו מעט):

{
  "predictions": [
    {
      "default_payment_next_month_values": [
        "1",
        "0"
      ],
      "default_payment_next_month_probs": [
        0.180815295299778,
        0.819184704700222
      ],
      "predicted_default_payment_next_month": [
        "0"
      ]
    }
  ],
  "deployedModelId": "your-model-id"
}

הערכים בפונקציה default_payment_next_month_probs הם ההסתברות לכל כיתה. בדוגמה הזו, המודל שלנו צופה שיש סיכוי של 81% שהאדם הזה לא יעבור את התשלום הבא. הערך .819 תואם למחלקה 0 (לא ברירת המחדל).

🎉 כל הכבוד! 🎉

למדת איך:

  • אימון מודל ב-BQML
  • ייצוא מודל BQML ל-Cloud Storage
  • ייבוא מודל BQML ל-Vertex AI לצורך חיזוי
  • יצירת מודל Vertex AI ופריסת המודל בנקודת קצה
  • קבלת תחזיות על נקודת הקצה שנפרסה באמצעות Vertex Notebooks ו-curl

כדי לקבל מידע נוסף על החלקים השונים ב-Vertex AI, אתם יכולים לעיין במסמכי העזרה.

9. הסרת המשאבים

אם אתם רוצים להמשיך להשתמש ב-notebook שיצרתם בשיעור ה-Lab הזה, מומלץ להשבית אותו כשהוא לא בשימוש. בממשק המשתמש של Notebooks במסוף Cloud, בוחרים את ה-notebook ואז לוחצים על Stop (עצירה):

עצירת המופע

אם אתם רוצים למחוק לגמרי את ה-notebook, פשוט לוחצים על הלחצן 'מחיקה' בפינה השמאלית העליונה.

כדי למחוק את נקודת הקצה שפרסתם, עוברים לקטע Endpoints במסוף Vertex AI ולוחצים על סמל המחיקה:

מחיקת נקודת הקצה

כדי למחוק את קטגוריית האחסון, באמצעות תפריט הניווט במסוף Cloud, עוברים אל Storage (אחסון), בוחרים את הקטגוריה ולוחצים על סמל המחיקה:

מחיקת האחסון