Questa pagina descrive come generare previsioni ML utilizzando l'emulatore Spanner per i database con dialetto GoogleSQL e PostgreSQL.
L'integrazione di Spanner Agent Platform può essere utilizzata con l'emulatore Spanner per generare previsioni utilizzando le funzioni di previsione ML GoogleSQL o PostgreSQL. L'emulatore è un file binario che simula un server Spanner e può essere utilizzato anche nei test di unità e di integrazione. Puoi utilizzare l'emulatore come un progetto open source o localmente utilizzando Google Cloud CLI. Per scoprire di più sulle funzioni di previsione ML, consulta Come funziona l'integrazione di Spanner Agent Platform ?.
Puoi utilizzare qualsiasi modello con l'emulatore per generare previsioni. Puoi anche utilizzare un modello di Model Garden o un modello di cui è stato eseguito il deployment nell'endpoint Agent Platform. Poiché l'emulatore non si connette ad Agent Platform, non può verificare il modello o il relativo schema per qualsiasi modello utilizzato da Model Garden o di cui è stato eseguito il deployment negli endpoint Agent Platform.
Per impostazione predefinita, quando utilizzi una funzione di previsione con l'emulatore, la funzione restituisce un valore casuale in base agli input del modello e allo schema di output del modello forniti. Puoi utilizzare una funzione di callback per modificare l'input e l'output del modello e generare risultati di previsione in base a comportamenti specifici.
Prima di iniziare
Completa i seguenti passaggi prima di utilizzare l'emulatore Spanner per generare previsioni ML.
Installa l'emulatore Spanner
Puoi installare l'emulatore localmente o configurarlo utilizzando il repository GitHub.
Seleziona un modello
Quando utilizzi la funzione ML.PREDICT (per GoogleSQL) o ML_PREDICT_ROW (per PostgreSQL), devi specificare la posizione del modello ML. Puoi utilizzare qualsiasi modello addestrato. Se selezioni un modello in esecuzione in
Model Garden
o un modello di cui è stato
eseguito il deployment nell'endpoint
Agent Platform, devi fornire i valori input e output per questi modelli.
Per scoprire di più sull'integrazione di Spanner Agent Platform, consulta Come funziona l'integrazione di Spanner Agent Platform?.
elabora le previsioni
Puoi utilizzare l'emulatore per generare previsioni utilizzando le funzioni di previsione ML di Spanner.
Comportamento predefinito
Puoi utilizzare qualsiasi modello di cui è stato eseguito il deployment in un endpoint con l'emulatore Spanner per generare previsioni. L'esempio seguente utilizza un modello denominato FraudDetection per generare un risultato.
GoogleSQL
Per scoprire di più su come utilizzare la funzione ML.PREDICT per generare
previsioni, consulta Generare previsioni ML utilizzando SQL.
Registra il modello
Prima di poter utilizzare un modello con la
ML.PREDICT
funzione, devi registrarlo utilizzando l'
CREATE MODEL
istruzione e fornire i valori input e 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'
);
Sostituisci quanto segue:
PROJECT_ID: l'ID del Google Cloud progetto in cui si trova il modelloREGION_ID: l'ID della Google Cloud regione in cui si trova il modello, ad esempious-central1ENDPOINT_ID: l'ID dell'endpoint del modello
Esegui la previsione
Utilizza la
ML.PREDICT
funzione GoogleSQL per generare la previsione.
SELECT Outcome
FROM ML.PREDICT(
MODEL FraudDetection,
(SELECT 1000 AS Amount, "John Smith" AS Name))
L'output previsto di questa query è TRUE.
PostgreSQL
Per scoprire di più su come utilizzare la funzione spanner.ML_PREDICT_ROW per
generare previsioni, consulta Generare previsioni ML utilizzando SQL.
Esegui la previsione
Utilizza la funzione PostgreSQL spanner.ML_PREDICT_ROW per generare la previsione.
SELECT (spanner.ml_predict_row(
'projects/`MODEL_ID`/locations/`REGION_ID`/endpoints/`ENDPOINT_ID`',
'{"instances": [{"Amount": "1000", "Name": "John Smith"}]}'
)->'predictions'->0->'Outcome')::boolean
Sostituisci quanto segue:
PROJECT_ID: l'ID del Google Cloud progetto in cui si trova il modelloREGION_ID: l'ID della Google Cloud regione in cui si trova il modello, ad esempious-central1ENDPOINT_ID: l'ID dell'endpoint del modello
L'output previsto di questa query è TRUE.
Callback personalizzata
Puoi utilizzare una funzione di callback personalizzata per implementare i comportamenti del modello selezionato e per trasformare input specifici del modello in output. L'esempio seguente utilizza il modello gemini-pro di Model Garden e l'emulatore Spanner per generare previsioni utilizzando una callback personalizzata.
Quando utilizzi una callback personalizzata per un modello, devi creare un fork del repository dell'emulatore Spanner, quindi crearlo ed eseguirne il deployment. Per scoprire di più su come creare ed eseguire il deployment dell'emulatore Spanner, consulta la guida rapida dell'emulatore Spanner.
GoogleSQL
Registra il modello
Prima di poter utilizzare un modello con la ML.PREDICT funzione, devi registrarlo utilizzando l' CREATE MODEL istruzione:
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
);
Poiché l'emulatore non si connette ad Agent Platform, devi fornire i valori input e output.
Sostituisci quanto segue:
PROJECT_ID: l'ID del Google Cloud progetto in cui si trova il modelloREGION_ID: l'ID della Google Cloud regione in cui si trova il modello, ad esempious-central1
Richiamata
Utilizza una callback per aggiungere logica personalizzata al modello 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);
}
Esegui la previsione
Utilizza la
ML.PREDICT
funzione GoogleSQL per generare la previsione.
SELECT content
FROM ML.PREDICT(MODEL GeminiPro, (SELECT "Is 7 a prime number?" AS prompt))
L'output previsto di questa query è "YES".
PostgreSQL
Utilizza la funzione PostgreSQL spanner.ML_PREDICT_ROW per generare la previsione.
Richiamata
Utilizza una callback per aggiungere logica personalizzata al modello 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);
}
Esegui la previsione
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
Sostituisci quanto segue:
PROJECT_ID: l'ID del Google Cloud progetto in cui si trova il modelloREGION_ID: l'ID della Google Cloud regione in cui si trova il modello, ad esempious-central1
L'output previsto di questa query è "YES".