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

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

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

מה לומדים

במאמר הזה נסביר איך:

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

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

2. מבוא ל-Vertex AI

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

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

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

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

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

שלב 1: הפעלת Compute Engine API

עוברים אל Compute Engine ובוחרים באפשרות הפעלה אם הוא עדיין לא מופעל. תצטרכו את זה כדי ליצור את מופע המחברת.

שלב 2: הפעלת Vertex AI API

עוברים אל הקטע Vertex AI במסוף Cloud ולוחצים על הפעלת Vertex AI API.

לוח הבקרה של Vertex AI

שלב 3: יצירת מופע של Notebooks

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

תפריט Vertex AI

משם, בוחרים באפשרות New Instance (מופע חדש). לאחר מכן בוחרים את סוג האינסטנס TensorFlow Enterprise 2.3 without GPUs:

מופע TFE

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

פתיחת CAIP Notebook

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

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

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

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

יצירת מערך נתונים ב-BQ

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

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

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

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 ML

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

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

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

ייצוא מודל BQML

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

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

אחר כך לוחצים על סמל הפלוס + כדי ליצור מאגר חדש:

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

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

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

משתמשים ב-Storage class שמוגדר כברירת מחדל, ובקטע 'בקרת גישה' מוודאים שהאפשרות Uniform מסומנת:

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

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

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

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

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

לוחצים על ייצוא. הפעולה הזו תיצור משימה ב-BigQuery לייצוא המודל בפורמט SavedModel של 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 כגרסת המסגרת.

בשדה Model artifact location (מיקום ארטיפקט המודל), לוחצים על Browse (עיון), לוחצים על דלי ה-GCS שיצרתם ולוחצים על הספרייה model-assets:

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

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

הקטע 'דגמים'

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

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

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

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

פריסה ובדיקה

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

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

נקודת קצה (endpoint) שנפרסה

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

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

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

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

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

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

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

לאחר מכן, פותחים את מופע ה-Notebook שיצרתם ופותחים מחברת Python 3 מ-Launcher:

פתיחת מסמך 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 (בקשה לדוגמה) לנקודת הקצה שזה עתה פרסתם:

דוגמה לבקשה

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

בקשת משתנים

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

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

לבסוף, שולחים בקשת חיזוי לנקודת הקצה עם curl על ידי העתקת הקוד הבא למחברת:

!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. הסרת המשאבים

אם רוצים להמשיך להשתמש במחברת שיצרתם בסדנה הזו, מומלץ להשבית אותה כשלא משתמשים בה. בממשק המשתמש של Notebooks במסוף Cloud, בוחרים את מחברת ה-Notebook ואז בוחרים באפשרות Stop:

עצירת מכונה

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

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

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

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

מחיקת האחסון