Questa pagina descrive come generare previsioni ML utilizzando l'emulatore Spanner.
L'integrazione di Spanner Vertex AI può essere utilizzata con l'emulatore Spanner per generare predizioni utilizzando le funzioni di previsione ML di GoogleSQL o PostgreSQL. L'emulatore è un file binario che riproduce un server Spanner, e può essere utilizzata anche per i test delle unità e di integrazione. Puoi usare l'emulatore come progetto open source oppure localmente utilizzando Google Cloud CLI. Per saperne di più sulle funzioni di previsione ML, consulta Come funziona l'integrazione di Spanner Vertex AI?.
Puoi utilizzare qualsiasi modello con l'emulatore per generare previsioni. Puoi anche utilizzare un modello del Model Garden di Vertex AI o un modello di cui è stato eseguito il deployment nel tuo endpoint Vertex AI. Poiché l'emulatore non si connette a Vertex AI, l'emulatore non riesce a verificare il modello o il relativo schema per nessun modello usato Model Garden di Vertex AI o di cui è stato eseguito il deployment in Vertex AI endpoint.
Per impostazione predefinita, quando utilizzi una funzione di previsione con l'emulatore, la funzione restituisce un valore casuale in base agli input del modello forniti e lo schema di output del modello. Puoi utilizzare una funzione di callback per modificare il modello input e output, nonché generare risultati di previsione basati su comportamenti specifici.
Prima di iniziare
Installa l'emulatore Spanner
Puoi installare l'emulatore in locale o configurala utilizzando il repository GitHub.
Seleziona un modello
Quando utilizzi ML.PREDICT
(per GoogleSQL) o
ML_PREDICT_ROW
(per PostgreSQL), devi specificare la località
del modello ML. Puoi utilizzare qualsiasi modello addestrato. Se selezioni un modello in esecuzione in Model Garden di Vertex AI o un modello implementato nel tuo endpoint Vertex AI, devi fornire i valori input
e output
per questi modelli.
Per saperne di più sull'integrazione di Spanner Vertex AI, consulta Come funziona l'integrazione di Spanner Vertex AI?.
elabora le previsioni
Puoi utilizzare l'emulatore per generare previsioni utilizzando le funzioni di previsione di Spanner ML.
Comportamento predefinito
Puoi utilizzare qualsiasi modello di cui è stato eseguito il deployment in un endpoint con Spanner
per generare previsioni. L'esempio seguente utilizza un modello chiamato
FraudDetection
per generare un risultato.
GoogleSQL
Per scoprire di più su come utilizzare la funzione ML.PREDICT
per generare
predizioni, consulta Generare previsioni ML utilizzando SQL.
Registra il modello
Prima di poter utilizzare un modello
ML.PREDICT
, devi registrare il modello utilizzando la funzione
CREA MODELLO
e fornisci 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 progetto Google Cloud in cui si trova il modelloREGION_ID
: l'ID della regione Google Cloud in cui si trova il modello, ad esempious-central1
ENDPOINT_ID
: l'ID dell'endpoint del modello
Esegui la previsione
Utilizza la funzione
ML.PREDICT
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
vedi Generare previsioni ML utilizzando SQL.
Esegui la previsione
Utilizza la funzione PostgreSQL spanner.ML_PREDICT_ROW
per generare
la tua 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 progetto Google Cloud in cui si trova il modelloREGION_ID
: l'ID della regione Google Cloud in cui si trova il modello, ad esempious-central1
ENDPOINT_ID
: l'ID dell'endpoint del modello
L'output previsto di questa query è TRUE
.
Richiamata personalizzata
Puoi utilizzare una funzione di callback personalizzata per implementare i comportamenti del modello selezionato,
e trasformare gli input di modelli specifici in output. Le seguenti
utilizza il modello gemini-pro
di Vertex AI Model Garden
e l'emulatore Spanner per generare previsioni usando un callback personalizzato.
Se utilizzi un callback personalizzato per un modello, devi fork Repository dell'emulatore di Spanner, per poi crearlo ed eseguirne il deployment. Per ulteriori informazioni su come compilare ed eseguire il deployment dell'emulatore Spanner, consulta la guida rapida all'emulatore Spanner.
GoogleSQL
Registra il modello
Prima di poter utilizzare un modello la funzione ML.PREDICT, è necessario registrare il modello utilizzando Istruzione 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
);
Poiché l'emulatore non si connette a Vertex AI,
devi fornire i valori input
e output
.
Sostituisci quanto segue:
PROJECT_ID
: l'ID del progetto Google Cloud in cui si trova il modelloREGION_ID
: l'ID della regione Google Cloud in cui si trova il modello, ad esempious-central1
Richiama
Utilizza un 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 funzione
ML.PREDICT
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 tua previsione.
Richiamata
Utilizza un 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 progetto Google Cloud in cui si trova il modelloREGION_ID
: l'ID della regione Google Cloud in cui si trova il modello, ad esempious-central1
L'output previsto di questa query è "YES"
.