בדף הזה מוסבר איך ליצור תחזיות של למידת מכונה באמצעות אמולטור Spanner למסדי נתונים של ניב GoogleSQL ולמסדי נתונים של ניב PostgreSQL.
אפשר להשתמש בשילוב של Spanner עם Vertex AI עם האמולטור של Spanner כדי ליצור תחזיות באמצעות פונקציות החיזוי של GoogleSQL או PostgreSQL ML. האמולטור הוא קובץ בינארי שמדמה שרת Spanner, ואפשר להשתמש בו גם בבדיקות יחידה ובבדיקות אינטגרציה. אפשר להשתמש באמולטור כפרויקט קוד פתוח או באופן מקומי באמצעות Google Cloud CLI. מידע נוסף על פונקציות החיזוי של ML זמין במאמר איך פועלת האינטגרציה של Spanner Vertex AI.
אתם יכולים להשתמש בכל מודל עם האמולטור כדי ליצור תחזיות. אפשר גם להשתמש במודל מ-Vertex AI Model Garden או במודל שנפרס ב-Vertex AI endpoint. מכיוון שהאמולטור לא מתחבר ל-Vertex AI, הוא לא יכול לאמת את המודל או את הסכימה שלו עבור אף מודל שמשמש מ-Vertex AI Model Garden או שנפרס לנקודות הקצה של Vertex AI.
כברירת מחדל, כשמשתמשים בפונקציית חיזוי עם האמולטור, הפונקציה מחזירה ערך אקראי על סמך קלט המודל וסכימת הפלט של המודל. אפשר להשתמש בפונקציית קריאה חוזרת כדי לשנות את הקלט והפלט של המודל, וליצור תוצאות חיזוי על סמך התנהגויות ספציפיות.
לפני שמתחילים
לפני שמשתמשים באמולטור Spanner כדי ליצור תחזיות ML, צריך לבצע את השלבים הבאים.
התקנת האמולטור של Spanner
אפשר להתקין את האמולטור באופן מקומי או להגדיר אותו באמצעות מאגר GitHub.
בחירת דגם
כשמשתמשים בפונקציה ML.PREDICT (ל-GoogleSQL) או בפונקציה ML_PREDICT_ROW (ל-PostgreSQL), צריך לציין את המיקום של מודל ה-ML. אפשר להשתמש בכל מודל שעבר אימון. אם בוחרים מודל שפועל ב-Vertex AI Model Garden או מודל שנפרס לנקודת הקצה של Vertex AI, צריך לציין את הערכים input ו-output של המודלים האלה.
מידע נוסף על שילוב של Spanner עם Vertex AI זמין במאמר איך פועל השילוב של Spanner עם Vertex AI?
יצירת חיזויים
אפשר להשתמש באמולטור כדי ליצור תחזיות באמצעות פונקציות החיזוי של Spanner ML.
התנהגות ברירת מחדל
אתם יכולים להשתמש בכל מודל שנפרס לנקודת קצה עם אמולטור Spanner כדי ליצור תחזיות. בדוגמה הבאה נעשה שימוש במודל שנקרא FraudDetection כדי ליצור תוצאה.
GoogleSQL
מידע נוסף על השימוש בפונקציה ML.PREDICT כדי ליצור תחזיות זמין במאמר יצירת תחזיות של למידת מכונה באמצעות SQL.
רישום המודל
כדי להשתמש במודל עם הפונקציה ML.PREDICT, צריך לרשום את המודל באמצעות ההצהרה CREATE MODEL ולספק את הערכים input ו-output:
CREATE MODEL FraudDetection
INPUT (Amount INT64, Name STRING(MAX))
OUTPUT (Outcome BOOL)
REMOTE OPTIONS (
endpoint = '//aiplatform.googleapis.com/projects/PROJECT_ID/locations/REGION_ID/endpoints/ENDPOINT_ID'
);
מחליפים את מה שכתוב בשדות הבאים:
PROJECT_ID: המזהה של Google Cloud הפרויקט שבו נמצא המודל
REGION_ID: המזהה של Google Cloud האזור שבו נמצא המודל, לדוגמהus-central1
ENDPOINT_ID: המזהה של נקודת הקצה של המודל
הפעלת התחזית
משתמשים בפונקציית GoogleSQL ML.PREDICT כדי ליצור את התחזית.
SELECT Outcome
FROM ML.PREDICT(
MODEL FraudDetection,
(SELECT 1000 AS Amount, "John Smith" AS Name))
הפלט הצפוי של השאילתה הזו הוא TRUE.
PostgreSQL
מידע נוסף על השימוש בפונקציה spanner.ML_PREDICT_ROW ליצירת תחזיות זמין במאמר יצירת תחזיות של למידת מכונה באמצעות SQL.
הפעלת התחזית
משתמשים בפונקציה spanner.ML_PREDICT_ROW של PostgreSQL כדי ליצור את התחזית.
SELECT (spanner.ml_predict_row(
'projects/`MODEL_ID`/locations/`REGION_ID`/endpoints/`ENDPOINT_ID`',
'{"instances": [{"Amount": "1000", "Name": "John Smith"}]}'
)->'predictions'->0->'Outcome')::boolean
מחליפים את מה שכתוב בשדות הבאים:
PROJECT_ID: המזהה של Google Cloud הפרויקט שבו נמצא המודל
REGION_ID: המזהה של Google Cloud האזור שבו נמצא המודל, לדוגמהus-central1
ENDPOINT_ID: המזהה של נקודת הקצה של המודל
הפלט הצפוי של השאילתה הזו הוא TRUE.
התקשרות חזרה בהתאמה אישית
אפשר להשתמש בפונקציית קריאה חוזרת בהתאמה אישית כדי להטמיע התנהגויות נבחרות של מודלים,
וכדי להמיר קלטים ספציפיים של מודלים לפלטים. בדוגמה הבאה נעשה שימוש במודל gemini-pro מ-Vertex AI Model Garden ובאמולטור Spanner כדי ליצור תחזיות באמצעות קריאה חוזרת (callback) בהתאמה אישית.
כשמשתמשים בקריאה חוזרת בהתאמה אישית למודל, צריך לשכפל את מאגר האמולטור של Spanner, ואז לבנות ולפרוס אותו. מידע נוסף על בנייה ופריסה של אמולטור Spanner זמין במדריך למתחילים בנושא אמולטור Spanner.
GoogleSQL
רישום המודל
כדי להשתמש במודל עם הפונקציה ML.PREDICT, צריך לרשום את המודל באמצעות ההצהרה CREATE MODEL:
CREATE MODEL GeminiPro
INPUT (prompt STRING(MAX))
OUTPUT (content STRING(MAX))
REMOTE OPTIONS (
endpoint = '//aiplatform.googleapis.com/projects/PROJECT_ID/locations/REGION_ID/publishers/google/models/gemini-pro',
default_batch_size = 1
);
מכיוון שהאמולטור לא מתחבר ל-Vertex AI, צריך לספק את הערכים input ו-output.
מחליפים את מה שכתוב בשדות הבאים:
PROJECT_ID: המזהה של Google Cloud הפרויקט שבו נמצא המודל
REGION_ID: המזהה של Google Cloud האזור שבו נמצא המודל, לדוגמהus-central1
התקשרות חזרה
אפשר להשתמש בפונקציית קריאה חוזרת כדי להוסיף לוגיקה מותאמת אישית למודל GeminiPro.
absl::Status ModelEvaluator::Predict(
const googlesql::Model* model,
const CaseInsensitiveStringMap<const ModelColumn>& model_inputs,
CaseInsensitiveStringMap<ModelColumn>& model_outputs) {
// Custom logic for GeminiPro.
if (model->Name() == "GeminiPro") {
RET_CHECK(model_inputs.contains("prompt"));
RET_CHECK(model_inputs.find("prompt")->second.value->type()->IsString());
RET_CHECK(model_outputs.contains("content"));
std::string content;
// Process prompts used in tests.
int64_t number;
static LazyRE2 is_prime_prompt = {R"(Is (\d+) a prime number\?)"};
if (RE2::FullMatch(
model_inputs.find("prompt")->second.value->string_value(),
*is_prime_prompt, &number)) {
content = IsPrime(number) ? "Yes" : "No";
} else {
// Default response.
content = "Sorry, I don't understand";
}
*model_outputs["content"].value = googlesql::values::String(content);
return absl::OkStatus();
}
// Custom model prediction logic can be added here.
return DefaultPredict(model, model_inputs, model_outputs);
}
הפעלת התחזית
משתמשים בפונקציית GoogleSQL ML.PREDICT כדי ליצור את התחזית.
SELECT content
FROM ML.PREDICT(MODEL GeminiPro, (SELECT "Is 7 a prime number?" AS prompt))
הפלט הצפוי של השאילתה הזו הוא "YES".
PostgreSQL
משתמשים בפונקציה spanner.ML_PREDICT_ROW של PostgreSQL כדי ליצור את התחזית.
התקשרות חזרה
אפשר להשתמש בפונקציית קריאה חוזרת כדי להוסיף לוגיקה מותאמת אישית למודל GeminiPro.
absl::Status ModelEvaluator::PgPredict(
absl::string_view endpoint, const googlesql::JSONValueConstRef& instance,
const googlesql::JSONValueConstRef& parameters,
lesql::JSONValueRef prediction) {
if (endpoint.ends_with("publishers/google/models/gemini-pro")) {
RET_CHECK(instance.IsObject());
RET_CHECK(instance.HasMember("prompt"));
std::string content;
// Process prompts used in tests.
int64_t number;
static LazyRE2 is_prime_prompt = {R"(Is (\d+) a prime number\?)"};
if (RE2::FullMatch(instance.GetMember("prompt").GetString(),
*is_prime_prompt, &number)) {
content = IsPrime(number) ? "Yes" : "No";
} else {
// Default response.
content = "Sorry, I don't understand";
}
prediction.SetToEmptyObject();
prediction.GetMember("content").SetString(content);
return absl::OkStatus();
}
// Custom model prediction logic can be added here.
return DefaultPgPredict(endpoint, instance, parameters, prediction);
}
הפעלת התחזית
SELECT (spanner.ml_predict_row(
'projects/`PROJECT_ID`/locations/`REGION_ID`/publishers/google/models/gemini-pro',
'{"instances": [{"prompt": "Is 7 a prime number?"}]}'
)->'predictions'->0->'content')::text
מחליפים את מה שכתוב בשדות הבאים:
PROJECT_ID: המזהה של Google Cloud הפרויקט שבו נמצא המודל
REGION_ID: המזהה של Google Cloud האזור שבו המודל נמצא, לדוגמהus-central1
הפלט הצפוי של השאילתה הזו הוא "YES".