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

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

אפשר להשתמש בשילוב של Spanner Agent Platform עם אמולטור Spanner כדי ליצור תחזיות באמצעות הפונקציות GoogleSQL או PostgreSQL ML predict. האמולטור הוא קובץ בינארי שמדמה שרת Spanner, ואפשר להשתמש בו גם בבדיקות יחידה ובבדיקות אינטגרציה. אפשר להשתמש באמולטור כפרויקט קוד פתוח או באופן מקומי באמצעות Google Cloud CLI. מידע נוסף על פונקציות החיזוי של ML זמין במאמר איך פועל השילוב של Spanner Agent Platform?

אפשר להשתמש בכל מודל עם האמולטור כדי ליצור תחזיות. אפשר גם להשתמש במודל מתוך Model Garden או במודל שפרסתם בנקודת הקצה של Agent Platform. מכיוון שהאמולטור לא מתחבר ל-Agent Platform, הוא לא יכול לאמת את המודל או את הסכימה שלו עבור אף מודל שמשמש מ-Model Garden או שנפרס לנקודות הקצה של Agent Platform.

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

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

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

התקנת אמולטור Spanner

אפשר להתקין את האמולטור באופן מקומי או להגדיר אותו באמצעות מאגר GitHub.

בחירת מודל

כשמשתמשים בפונקציה ML.PREDICT (ל-GoogleSQL) או בפונקציה ML_PREDICT_ROW (ל-PostgreSQL), צריך לציין את המיקום של מודל ה-ML. אפשר להשתמש בכל מודל שעבר אימון. אם בוחרים מודל שפועל ב-Model Garden או מודל שפריסתו בוצעה לנקודת הקצה של Agent Platform, צריך לספק את הערכים input ו-output של המודלים האלה.

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

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

אפשר להשתמש באמולטור כדי ליצור תחזיות באמצעות פונקציות החיזוי של 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 האזור 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 האזור Google Cloud שבו המודל ממוקם, לדוגמה us-central1

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

הפלט הצפוי של השאילתה הזו הוא TRUE.

קריאה חוזרת (callback) בהתאמה אישית

אפשר להשתמש בפונקציית קריאה חוזרת בהתאמה אישית כדי להטמיע התנהגויות נבחרות של מודלים, וכדי להמיר קלט ספציפי של מודלים לפלט. בדוגמה הבאה נעשה שימוש במודל gemini-pro מ-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
);

מכיוון שהאמולטור לא מתחבר ל-Agent Platform, אתם צריכים לספק את הערכים input ו-output.

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

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

  • REGION_ID: המזהה של Google Cloud האזור 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".

מה השלב הבא?