יצירת חיזויים של למידת מכונה באמצעות SQL

בדף הזה מוסבר איך ליצור חיזויים של למידת מכונה (ML) ממסד נתונים של Spanner. תחזיות של למידת מכונה פועלות עם מסדי נתונים בניב GoogleSQL ועם מסדי נתונים בניב PostgreSQL.

השילוב של Spanner עם Vertex AI מאפשר לכם ליצור תחזיות באמצעות קוד ה-SQL שלכם על ידי קריאה לפונקציה ML.PREDICT ב-GoogleSQL או לפונקציה spanner.ML_PREDICT_ROW ב-PostgreSQL. מידע נוסף על שילוב של Spanner עם Vertex AI זמין במאמר סקירה כללית על שילוב של Spanner עם Vertex AI.

לפני שמתחילים

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

הגדרת גישה של שילוב Spanner Vertex AI לנקודות קצה של Vertex AI

מערכת Spanner יוצרת את סוכן השירות ומעניקה את ההרשאות הנדרשות באופן אוטומטי כשמערכת Spanner מריצה את הצהרת ה-DDL הראשונה של MODEL. אם מסד הנתונים של Spanner ונקודת הקצה של Vertex AI נמצאים באותו פרויקט, לא נדרשת הגדרה נוספת.

אם חשבון סוכן השירות של Spanner לא קיים בפרויקט Spanner שלכם, צרו אותו על ידי הרצת הפקודה הבאה:

gcloud beta services identity create --service=spanner.googleapis.com --project={PROJECT}`

כדי להקצות את התפקיד Spanner API Service Agent לחשבון סוכן השירות של Spanner‏ service-PROJECT_NUMBER@gcp-sa-spanner.iam.gserviceaccount.com בפרויקט Vertex AI, פועלים לפי השלבים שמתוארים במאמר בנושא הקצאת תפקיד יחיד.

בחירת דגם

כשמשתמשים בפונקציה ML.PREDICT (ל-GoogleSQL) או בפונקציה spanner.ML_PREDICT_ROW (ל-PostgreSQL), צריך לציין את המיקום של מודל ה-ML. המודל שתבחרו יכול להיות אחד מהבאים:

מידע נוסף על שילוב של Spanner עם Vertex AI זמין במאמר איך פועל השילוב של Spanner עם Vertex AI?

יצירת חיזויים

השלבים ליצירת התחזיות משתנים בהתאם לסוג המודל שבחרתם.

שימוש במודל ב-Vertex AI Model Garden

כדי ליצור חיזוי באמצעות מודל מ-Vertex AI Model Garden, בוחרים מודל מ-Model Garden.

GoogleSQL

לפני שמשתמשים במודל עם ML.PREDICT(), צריך לרשום את המודל באמצעות ההצהרה CREATE MODEL.

CREATE MODEL 'MODEL_NAME'
INPUT (INPUT_COLUMN_NAME INPUT_COLUMN_TYPE)
OUTPUT (OUTPUT_COLUMN_NAME OUTPUT_COLUMN_TYPE)
REMOTE
OPTIONS (
  endpoint = '//aiplatform.googleapis.com/projects/PROJECT_ID/locations/LOCATION_ID/publishers/google/models/model_id'
);

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

  • MODEL_NAME: השם שרוצים לתת למודל

  • INPUT_COLUMN_NAME: השם של עמודת הקלט. לדוגמה, אם משתמשים במודל gemini-pro, שם עמודת הקלט הוא prompt.

  • INPUT_COLUMN_TYPE: סוג הנתונים של INPUT_COLUMN_NAME

  • OUTPUT_COLUMN_NAME: שם עמודת הפלט. לדוגמה, אם משתמשים במודל gemini-pro, שם עמודת הפלט הוא content.

  • OUTPUT_COLUMN_TYPE: סוג הנתונים של OUTPUT_COLUMN_NAME

  • PROJECT_ID: מזהה הפרויקט ב- Google Cloud

  • REGION_ID: המזהה של האזור שבו המודל נמצא, לדוגמה us-central1 Google Cloud

  • MODEL_ID: המזהה של מודל ה-ML שרוצים להשתמש בו, לדוגמה: gemini-pro

    מידע נוסף על מודלים זמין במאמר הפניה ל-API של מודלים ל-AI גנרטיבי.

משתמשים בפונקציית ML.PREDICT GoogleSQL עם המודל שנבחר מ-Model Garden כדי ליצור את התחזית.

SELECT * FROM ML.PREDICT(
  MODEL `MODEL_NAME`,
  `INPUT_RELATION`[, `PARAMETERS`])

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

  • MODEL_NAME: השם שרוצים לתת למודל

    מידע נוסף על מודלים זמין במאמר הפניה ל-API של מודלים ל-AI גנרטיבי.

  • INPUT_RELATION: ‏TABLE table_name או שאילתת משנה שהטבלה או שאילתת המשנה מספקות נתונים להרצת התחזית של ה-ML.

  • PARAMETERS: ערך STRUCT שמכיל פרמטרים שנתמכים על ידי model_id.

אפשר גם להשתמש ב-SAFE.ML.PREDICT כדי להחזיר null במקום שגיאה בתחזיות. האפשרות הזו שימושית במקרים שבהם מריצים שאילתות גדולות, ונסבלות תחזיות שנכשלו.

PostgreSQL

משתמשים בפונקציית ML_PREDICT_ROW PostgreSQL עם המודל שנבחר מ-Model Garden כדי ליצור את התחזית.

SELECT spanner.ml_predict_row(
  'projects/PROJECT_ID/locations/REGION_ID/publishers/google/models/MODEL_ID'::text,
  '{
    "instances": [ INSTANCES ],
    "parameters": { PARAMETERS }
   }'::jsonb);

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

  • PROJECT_ID: מזהה הפרויקט ב- Google Cloud

  • REGION_ID: המזהה של האזור שבו המודל נמצא, לדוגמה us-central1 Google Cloud

  • MODEL_ID: המזהה של מודל ה-ML שרוצים להשתמש בו, לדוגמה: gemini-pro

    מידע נוסף על מודלים זמין במאמר הפניה ל-API של מודלים ל-AI גנרטיבי.

  • INSTANCES: הקלט לקריאת החיזוי, בפורמט JSON

  • PARAMETERS: פרמטרים אופציונליים לקריאה לחיזוי, בפורמט JSON

השאילתה הזו יוצרת תגובת JSON. מידע נוסף על הודעות התגובה של JSON של המודל זמין במאמר PredictResponse.

שימוש בנקודת קצה של מודל Vertex AI

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

GoogleSQL

משתמשים בפונקציית ML.PREDICT GoogleSQL עם המודל בנקודת קצה של Vertex AI כדי ליצור את החיזוי. לפני שמשתמשים במודל עם ML.PREDICT(), צריך לרשום את המודל באמצעות ההצהרה CREATE MODEL. לכל מודל שפורס יש סכימה ייחודית משלו. הסכימה הבאה היא דוגמה מתוך סקירה כללית על סיווג ורגרסיה

CREATE MODEL MyClassificationModel
INPUT (
  length FLOAT64,
  material STRING(MAX),
  tag_array ARRAY<STRING(MAX)>
)
OUTPUT (
  scores ARRAY<FLOAT64>,
  classes ARRAY<STRING(MAX)>
)
REMOTE
OPTIONS (
  endpoint = '//aiplatform.googleapis.com/projects/PROJECT/locations/LOCATION/endpoints/ENDPOINT_ID'
)

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

  • PROJECT_ID: מזהה הפרויקט ב- Google Cloud

  • LOCATION: המזהה של האזור שבו המודל נמצא, לדוגמה us-central1 Google Cloud

  • ENDPOINT_ID: המזהה של מודל ה-ML שרוצים להשתמש בו, לדוגמה: gemini-pro

    מידע נוסף על מודלים זמין במאמר הפניה ל-API של מודלים ל-AI גנרטיבי.

משתמשים בפונקציית ML.PREDICT GoogleSQL עם המודל שנבחר מ-Model Garden כדי ליצור את התחזית.

SELECT * FROM ML.PREDICT(
  `MODEL_ID`,
  `INPUT_RELATION`[, `PARAMETERS`])

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

  • MODEL_ID: המזהה של מודל ה-ML שרוצים להשתמש בו.

  • INPUT_RELATION: הטבלה או שאילתת המשנה שרוצים להריץ עליהן את התחזית של ה-ML.

  • PARAMETERS: ערך STRUCT שמכיל פרמטרים שנתמכים על ידי model_name.

השאילתה הזו יוצרת קשר שמכיל את כל עמודות הפלט של המודל ואת כל העמודות של קשר הקלט.

PostgreSQL

משתמשים בפונקציה ML.PREDICT PostgreSQL עם המודל בנקודת קצה של Vertex AI כדי ליצור את החיזוי.

  SELECT spanner.ml_predict_row(
    'projects/PROJECT_ID/locations/REGION_ID/endpoints/ENDPOINT_ID'::text,
    '{
      "instances": [ INSTANCES ],
      "parameters": { PARAMETERS }
      }'::jsonb);
  ```

Replace the following:
  • PROJECT_ID: המזהה של Google Cloud הפרויקט שבו נמצא המודל

  • REGION_ID: המזהה של Google Cloud האזור שבו המודל נמצא, לדוגמה us-central1

  • ENDPOINT_ID: המזהה של נקודת הקצה של המודל

  • INSTANCES: הקלט לקריאה לחיזוי, בפורמט JSON

  • PARAMETERS: פרמטרים אופציונליים לקריאה לחיזוי, בפורמט JSON

השאילתה הזו יוצרת תגובת JSON. מידע נוסף על הודעות התגובה של JSON של המודל זמין במאמר PredictResponse.

דוגמאות לשימוש בפונקציות ML כדי ליצור תחזיות

בדוגמה הבאה נעשה שימוש במודל gemini-pro מ-Model Garden כדי ליצור טקסט על סמך הנחיה קצרה שמועברת כארגומנט. המודל הזה זמין כחלק מ-Gemini ב-Spanner.

GoogleSQL

רישום של מודל gemini-pro

CREATE MODEL GeminiPro
INPUT (prompt STRING(MAX))
OUTPUT (content STRING(MAX))
REMOTE
OPTIONS (
  endpoint = '//aiplatform.googleapis.com/projects/PROJECT/locations/LOCATION/publishers/google/models/gemini-pro',
  default_batch_size = 1
);

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

  • PROJECT: מזהה הפרויקט
  • LOCATION: האזור שבו אתם משתמשים ב-Vertex AI

הרצת המודל

SELECT content
FROM ML.PREDICT(
  MODEL GeminiPro,
  (SELECT "Is 7 a prime number?" AS prompt),
  STRUCT(256 AS maxOutputTokens, 0.2 AS temperature, 40 as topK, 0.95 AS topP)
);

הפלט המצופה

הפלט הצפוי הוא:

+--------------------+
| content            |
+--------------------+
| "Yes"              |
+--------------------+

PostgreSQL

הרצת המודל

select spanner.ml_predict_row(
  '{
    "endpoint": "projects/PROJECT_ID/locations/us-central1/publishers/google/models/gemini-pro",
    "default_batch_size": 1
   }'::jsonb,
  '{
    "instances":[{"prompt": "Is 7 a prime number?"}],
    "parameters":{"maxOutputTokens":256, "topK": 40, "topP":0.96, "temperature":0.2}
    }'
);

הפלט המצופה

הפלט הצפוי הוא:

+--------------------+
| content            |
+--------------------+
| "Yes"              |
+--------------------+