Auf dieser Seite wird beschrieben, wie Sie mit dem Spanner-Emulator ML-Vorhersagen generieren.
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 auch für Unit- und Integrationstests verwendet werden kann. Sie können den Emulator als Open-Source-Projekt oder lokal mit der Google Cloud CLI verwenden. Weitere Informationen zu den ML-Vorhersagefunktionen finden Sie unter Wie funktioniert die Einbindung von Spanner in Vertex AI?.
Sie können jedes 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 auf Ihrem Vertex AI-Endpunkt bereitgestellt wurde. 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. Mit einer Callback-Funktion können Sie die Eingabe und Ausgabe des Modells ändern und Vorhersageergebnisse basierend auf bestimmten Verhaltensweisen generieren.
Hinweis
Spanner-Emulator installieren
Sie können den Emulator lokal installieren. oder mit dem 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,
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 des Spanner ML-Vorhersagefunktionen
Standardverhalten
Sie können jedes Modell verwenden, das mit dem Spanner-Emulator an einem Endpunkt bereitgestellt wird, um Vorhersagen zu generieren. Im folgenden Beispiel wird ein Modell namens FraudDetection
verwendet, 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 inREGION_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 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 eine 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 dass sich das Modell inREGION_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 Rückruf
Mit einer benutzerdefinierten Callback-Funktion können Sie ausgewählte Modellverhalten implementieren und bestimmte Modellinputs in Outputs umwandeln. 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 Funktion ML.PREDICT verwenden können, müssen Sie es mit der Anweisung CREATE MODEL 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 input
und output
angeben.
Ersetzen Sie Folgendes:
PROJECT_ID
: die ID des Google Cloud-Projekts, das vom Modell befindet sich inREGION_ID
: die ID der Google Cloud-Region, in der sich das Modell befindet, z. B.us-central1
Callback
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.
Callback
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 inREGION_ID
: die ID der Google Cloud-Region, in der sich das Modell befindet, z. B.us-central1
Die erwartete Ausgabe dieser Abfrage ist "YES"
.