ML-Vorhersagen mit dem Spanner-Emulator generieren

Auf dieser Seite wird beschrieben, wie Sie mit Cloud Spanner ML-Vorhersagen generieren Emulator.

Die Einbindung von Spanner Vertex AI kann mit dem Spanner-Emulator verwendet werden, um mithilfe der ML-Vorhersage von GoogleSQL oder PostgreSQL Funktionen. Der Emulator ist ein Binärprogramm, das einen Spanner-Server nachahmt. und können auch für Unit- und Integrationstests verwendet werden. Mit dem Emulator als Open-Source-Projekt oder lokal über die Google Cloud CLI. Weitere Informationen zur ML-Vorhersagefunktionen Siehe Wie funktioniert die Einbindung von Spanner Vertex AI?.

Sie können ein beliebiges Modell mit dem Emulator verwenden, um Vorhersagen zu generieren. Sie können auch ein Modell aus der Vertex AI Model Garden oder ein auf Ihrem Vertex AI-Endpunkt bereitgestelltes Modell. Da der Emulator keine Verbindung zu Vertex AI herstellt, kann der Emulator das Modell oder sein Schema für kein Modell überprüfen, das vom Vertex AI Model Garden oder in Vertex AI bereitgestellt Endpunkten.

Wenn Sie eine Vorhersagefunktion mit dem Emulator verwenden, Die Funktion liefert auf Basis der bereitgestellten Modelleingaben einen Zufallswert. und das Ausgabeschema des Modells. Sie können eine Callback-Funktion verwenden, um das Modell zu ändern Eingabe und Ausgabe und generieren basierend auf bestimmten Verhaltensweisen Vorhersageergebnisse.

Hinweise

Spanner-Emulator installieren

Sie können den Emulator lokal installieren. oder mit dem GitHub-Repository einrichten.

Modell auswählen

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

Weitere Informationen zur Einbindung von Spanner Vertex AI finden Sie unter Wie funktioniert die Einbindung von Spanner Vertex AI?

Vorhersagen generieren

Sie können den Emulator verwenden, um Vorhersagen mithilfe der Spanner ML-Vorhersagefunktionen

Standardverhalten

Mit Spanner können Sie jedes Modell verwenden, das an einem Endpunkt bereitgestellt wird. Emulatoren, um Vorhersagen zu generieren. Im folgenden Beispiel wird ein Modell namens FraudDetection, um ein Ergebnis zu generieren.

GoogleSQL

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

Modell registrieren

Bevor Sie ein Modell mit der ML.PREDICT müssen Sie das Modell mit der MODELL ERSTELLEN und geben Sie die Werte input und output an:

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 dass sich das Modell in

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

  • ENDPOINT_ID: die ID des Modellendpunkts

Vorhersage ausführen

Verwenden Sie die Methode ML.PREDICT GoogleSQL-Funktion zum Generieren der Vorhersage.

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 zum Generieren mit der Funktion spanner.ML_PREDICT_ROW Vorhersagen finden Sie unter ML-Vorhersagen mit SQL generieren.

Vorhersage ausführen

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

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 dass sich das Modell in

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

  • ENDPOINT_ID: die ID des Modellendpunkts

Die erwartete Ausgabe dieser Abfrage ist TRUE.

Benutzerdefinierter Callback

Mit einer benutzerdefinierten Callback-Funktion können Sie ausgewählte Modellverhaltensweisen, und wandeln spezifische Modelleingaben in Ausgaben um. Die folgenden Im Beispiel wird das Modell gemini-pro aus Vertex AI Model Garden verwendet und den Spanner-Emulator nutzen, um Vorhersagen mithilfe eines benutzerdefinierten Callbacks zu generieren.

Wenn Sie einen benutzerdefinierten Callback für ein Modell verwenden, müssen Sie fork Spanner Emulator Repository, erstellen und bereitstellen. Weitere Informationen zur Spanner-Emulator erstellen und bereitstellen, siehe Kurzanleitung zum Spanner Emulator.

GoogleSQL

Modell registrieren

Bevor Sie ein Modell mit der ML.PREDICT-Funktion, müssen Sie das Modell mit der CREATE MODEL-Anweisung:

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 input und output angeben.

Ersetzen Sie Folgendes:

  • PROJECT_ID: die ID des Google Cloud-Projekts dass sich das Modell in

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

Rückruf

Verwenden Sie einen Callback, um dem GeminiPro-Modell 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 Methode ML.PREDICT GoogleSQL-Funktion zum Generieren der Vorhersage.

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

Rückruf

Verwenden Sie einen Callback, um dem GeminiPro-Modell 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 dass sich das Modell in

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

Die erwartete Ausgabe dieser Abfrage ist "YES".

Nächste Schritte