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

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

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

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

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

הגדרת גישה לשילוב של Spanner Agent Platform עם נקודות קצה של Agent Platform

‫Spanner יוצר את סוכן השירות ומעניק את ההרשאות הנדרשות באופן אוטומטי כש-Spanner מריץ את הצהרת ה-DDL הראשונה של MODEL. אם מסד הנתונים של Spanner ונקודת הקצה של Gemini Enterprise Agent Platform נמצאים באותו פרויקט, לא נדרש שום הגדרה נוספת.

אם חשבון הסוכן של שירות 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 בפרויקט של פלטפורמת הסוכנים.

בחירת מודל

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

מידע נוסף על שילוב Spanner Agent Platform זמין במאמר איך שילוב Spanner Agent Platform פועל?

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

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

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

כדי ליצור חיזוי באמצעות מודל מ-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 גנרטיבי.

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

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

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

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

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

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

  • 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.

שימוש בנקודת קצה של מודל ב-Agent Platform

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

GoogleSQL

כדי ליצור את התחזית, משתמשים בפונקציית ML.PREDICT GoogleSQL עם המודל בנקודת קצה של Agent Platform. לפני שמשתמשים במודל עם 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 עם המודל בנקודת קצה של Agent Platform כדי ליצור את התחזית.

  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: האזור שבו משתמשים ב-Agent Platform

הרצת המודל

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"              |
+--------------------+