ML-Vorhersagen mit dem Spanner-Emulator generieren

Auf dieser Seite wird beschrieben, wie Sie mit dem Spanner-Emulator ML-Vorhersagen für Datenbanken im GoogleSQL-Dialekt und Datenbanken im PostgreSQL-Dialekt generieren.

Die Spanner Agent Platform-Integration kann mit dem Spanner-Emulator verwendet werden, um Vorhersagen mit den ML-Vorhersagefunktionen von GoogleSQL oder PostgreSQL zu generieren. Der Emulator ist eine Binärdatei, die einen Spanner-Server imitiert und auch für Unit- und Integrationstests verwendet werden kann. Sie können den Emulator als ein Open-Source-Projekt oder lokal mit der Google Cloud CLI verwenden. Weitere Informationen zu den ML-Vorhersagefunktionen finden Sie unter Wie funktioniert die Spanner Agent Platform-Integration ?.

Sie können jedes beliebige Modell mit dem Emulator verwenden, um Vorhersagen zu generieren. Sie können auch ein Modell aus dem Vertex AI Model Garden oder ein Modell verwenden, das in Ihrem Vertex AI-Endpunktbereitgestellt wurde. Da der Emulator keine Verbindung zu Vertex AI herstellt, kann er das Modell oder sein Schema für kein Modell überprüfen, das aus dem Vertex AI Model Garden verwendet oder in den Vertex AI-Endpunkten bereitgestellt wird.

Wenn Sie eine Vorhersagefunktion mit dem Emulator verwenden, gibt die Funktion standardmäßig einen Zufallswert basierend auf den bereitgestellten Modelleingaben und dem Modellausgabeschema aus. Sie können eine Callback-Funktion verwenden, um die Modelleingabe und -ausgabe zu ändern und Vorhersageergebnisse basierend auf bestimmten Verhaltensweisen zu generieren.

Hinweis

Führen Sie die folgenden Schritte aus, bevor Sie mit dem Spanner-Emulator ML-Vorhersagen generieren.

Spanner-Emulator installieren

Sie können den Emulator entweder lokal installieren oder über das GitHub-Repository einrichten.

Modell auswählen

Wenn Sie die Funktion ML.PREDICT (für GoogleSQL) oder ML_PREDICT_ROW (für PostgreSQL) verwenden, müssen Sie den Speicherort des ML-Modells angeben. Sie können jedes trainierte Modell verwenden. Wenn Sie ein Modell auswählen, das im Vertex AI Model Garden ausgeführt wird, oder ein Modell, das in Ihrem Vertex AI-Endpunkt bereitgestellt wird, müssen Sie die Werte für input und output für diese Modelle angeben.

Weitere Informationen zur Spanner Agent Platform-Integration finden Sie unter Wie funktioniert die Spanner Agent Platform-Integration?.

Vorhersagen generieren

Sie können mit dem Emulator Vorhersagen mit den ML-Vorhersagefunktionen von Spanner generieren.

Standardverhalten

Sie können jedes Modell, das in einem Endpunkt bereitgestellt wurde, mit dem Spanner-Emulator verwenden, um Vorhersagen zu generieren. Im folgenden Beispiel wird ein Modell namens FraudDetection verwendet, um ein Ergebnis zu generieren.

GoogleSQL

Weitere Informationen zur Verwendung der ML.PREDICT Funktion zum Generieren von Vorhersagen finden Sie unter ML-Vorhersagen mit SQL generieren.

Modell registrieren

Bevor Sie ein Modell mit der ML.PREDICT Funktion verwenden können, müssen Sie es mit der CREATE MODEL Anweisung registrieren und die Werte für input und output angeben:

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'
);

Ersetzen Sie Folgendes:

  • PROJECT_ID: die ID des Google Cloud Projekts , in dem sich das Modell befindet

  • REGION_ID: die ID der Google Cloud Region, in der sich das Modell befindet, z. B. us-central1

  • ENDPOINT_ID: die ID des Modellendpunkts

Vorhersage ausführen

Verwenden Sie die ML.PREDICT GoogleSQL-Funktion, um Ihre Vorhersage zu generieren.

SELECT Outcome
FROM ML.PREDICT(
    MODEL FraudDetection,
    (SELECT 1000 AS Amount, "John Smith" AS Name))

Die erwartete Ausgabe dieser Abfrage ist TRUE.

PostgreSQL

Weitere Informationen zur Verwendung der Funktion spanner.ML_PREDICT_ROW zum Generieren von Vorhersagen finden Sie unter ML-Vorhersagen mit SQL generieren.

Vorhersage ausführen

Verwenden Sie die PostgreSQL-Funktion spanner.ML_PREDICT_ROW, um Ihre Vorhersage zu generieren.

SELECT (spanner.ml_predict_row(
'projects/`MODEL_ID`/locations/`REGION_ID`/endpoints/`ENDPOINT_ID`',
'{"instances": [{"Amount": "1000", "Name": "John Smith"}]}'
)->'predictions'->0->'Outcome')::boolean

Ersetzen Sie Folgendes:

  • PROJECT_ID: die ID des Google Cloud Projekts , in dem sich das Modell befindet

  • REGION_ID: die ID der Google Cloud Region, in der sich das Modell befindet, z. B. us-central1

  • ENDPOINT_ID: die ID des Modellendpunkts

Die erwartete Ausgabe dieser Abfrage ist TRUE.

Benutzerdefinierter Callback

Sie können eine benutzerdefinierte Callback-Funktion verwenden, um ausgewählte Modellverhaltensweisen zu implementieren und bestimmte Modelleingaben in Ausgaben zu transformieren. Im folgenden Beispiel wird das Modell gemini-pro aus dem Vertex AI Model Garden und der Spanner-Emulator verwendet, um Vorhersagen mit einem benutzerdefinierten Callback zu generieren.

Wenn Sie einen benutzerdefinierten Callback für ein Modell verwenden, müssen Sie das Spanner-Emulator-Repository forken, es dann erstellen und bereitstellen. Weitere Informationen zum Erstellen und Bereitstellen des Spanner-Emulators finden Sie in der Kurzanleitung zum Spanner-Emulator.

GoogleSQL

Modell registrieren

Bevor Sie ein Modell mit der ML.PREDICT Funktion verwenden können, müssen Sie es mit der CREATE MODEL Anweisung registrieren:

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
);

Da der Emulator keine Verbindung zu Vertex AI herstellt, müssen Sie die Werte für input und output angeben.

Ersetzen Sie Folgendes:

  • PROJECT_ID: die ID des Google Cloud Projekts, in dem sich das Modell befindet

  • REGION_ID: die ID der Google Cloud Region, in der sich das Modell befindet, z. B. us-central1

Callback

Verwenden Sie einen Callback, um dem Modell GeminiPro benutzerdefinierte Logik hinzuzufügen.

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);
}

Vorhersage ausführen

Verwenden Sie die ML.PREDICT GoogleSQL-Funktion, um Ihre Vorhersage zu generieren.

SELECT content
    FROM ML.PREDICT(MODEL GeminiPro, (SELECT "Is 7 a prime number?" AS prompt))

Die erwartete Ausgabe dieser Abfrage ist "YES".

PostgreSQL

Verwenden Sie die PostgreSQL-Funktion spanner.ML_PREDICT_ROW, um Ihre Vorhersage zu generieren.

Callback

Verwenden Sie einen Callback, um dem Modell GeminiPro benutzerdefinierte Logik hinzuzufügen.

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);
}

Vorhersage ausführen

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

Ersetzen Sie Folgendes:

  • PROJECT_ID: die ID des Google Cloud Projekts , in dem sich das Modell befindet

  • REGION_ID: die ID der Region, in der sich das Modell befindet, z. B. us-central1 Google Cloud

Die erwartete Ausgabe dieser Abfrage ist "YES".

Nächste Schritte