Cette page explique comment générer des prédictions de ML à l'aide de l'émulateur Spanner pour les bases de données utilisant le dialecte GoogleSQL et celles utilisant le dialecte PostgreSQL.
L'intégration de Spanner Agent Platform peut être utilisée avec l'émulateur Spanner pour générer des prédictions à l'aide des fonctions de prédiction de ML GoogleSQL ou PostgreSQL. L'émulateur est un binaire qui imite un serveur Spanner. Il peut également être utilisé pour les tests unitaires et d'intégration. Vous pouvez utiliser l'émulateur en tant que projet Open Source ou localement à l'aide de Google Cloud CLI. Pour en savoir plus sur les fonctions de prédiction de ML, consultez Comment fonctionne l'intégration de Spanner Agent Platform ?.
Vous pouvez utiliser n'importe quel modèle avec l'émulateur pour générer des prédictions. Vous pouvez également utiliser un modèle de Model Garden ou un modèle déployé sur votre Agent Platform point de terminaison. Étant donné que l'émulateur ne se connecte pas à Agent Platform, il ne peut pas valider le modèle ni son schéma pour tout modèle utilisé à partir de Model Garden ou déployé sur les points de terminaison Agent Platform.
Par défaut, lorsque vous utilisez une fonction de prédiction avec l'émulateur, elle génère une valeur aléatoire en fonction des entrées de modèle et du schéma de sortie de modèle fournis. Vous pouvez utiliser une fonction de rappel pour modifier l'entrée et la sortie du modèle, et générer des résultats de prédiction en fonction de comportements spécifiques.
Avant de commencer
Avant d'utiliser l'émulateur Spanner pour générer des prédictions de ML, procédez comme suit :
Installer l'émulateur Spanner
Vous pouvez soit installer l'émulateur localement soit le configurer à l'aide du dépôt GitHub.
Sélectionner un modèle
Lorsque vous utilisez la fonction ML.PREDICT (pour GoogleSQL) ou ML_PREDICT_ROW (pour PostgreSQL), vous devez spécifier l'emplacement du modèle de ML. Vous pouvez utiliser n'importe quel modèle entraîné. Si vous sélectionnez un modèle exécuté dans
Model Garden
ou un modèle
déployé sur votre
point de terminaison Agent Platform, vous devez fournir les valeurs input et output pour ces modèles.
Pour en savoir plus sur l'intégration de Spanner Agent Platform, consultez Comment fonctionne l'intégration de Spanner Agent Platform ?.
Générer des prédictions
Vous pouvez utiliser l'émulateur pour générer des prédictions à l'aide des fonctions de prédiction de ML Spanner.
Comportement par défaut
Vous pouvez utiliser n'importe quel modèle déployé sur un point de terminaison avec l'émulateur Spanner pour générer des prédictions. L'exemple suivant utilise un modèle appelé FraudDetection pour générer un résultat.
GoogleSQL
Pour en savoir plus sur l'utilisation de la fonction ML.PREDICT pour générer
des prédictions, consultez Générer des prédictions de ML à l'aide de SQL.
Enregistrer le modèle
Avant de pouvoir utiliser un modèle avec la
ML.PREDICT
fonction, vous devez l'enregistrer à l'aide de l'
CREATE MODEL
instruction et fournir les valeurs input et 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'
);
Remplacez les éléments suivants :
PROJECT_ID: ID du Google Cloud projet dans lequel se trouve le modèleREGION_ID: ID de la région dans laquelle se trouve le modèle, par exempleus-central1Google CloudENDPOINT_ID: ID du point de terminaison du modèle
Exécuter la prédiction
Utilisez la
ML.PREDICT
fonction GoogleSQL pour générer votre prédiction.
SELECT Outcome
FROM ML.PREDICT(
MODEL FraudDetection,
(SELECT 1000 AS Amount, "John Smith" AS Name))
La sortie attendue de cette requête est TRUE.
PostgreSQL
Pour en savoir plus sur l'utilisation de la fonction spanner.ML_PREDICT_ROW pour
générer des prédictions, consultez Générer des prédictions de ML à l'aide de SQL.
Exécuter la prédiction
Utilisez la fonction PostgreSQL spanner.ML_PREDICT_ROW pour générer votre prédiction.
SELECT (spanner.ml_predict_row(
'projects/`MODEL_ID`/locations/`REGION_ID`/endpoints/`ENDPOINT_ID`',
'{"instances": [{"Amount": "1000", "Name": "John Smith"}]}'
)->'predictions'->0->'Outcome')::boolean
Remplacez les éléments suivants :
PROJECT_ID: ID du Google Cloud projet dans lequel se trouve le modèleREGION_ID: ID de la région dans laquelle se trouve le modèle, par exempleus-central1Google CloudENDPOINT_ID: ID du point de terminaison du modèle
La sortie attendue de cette requête est TRUE.
Rappel personnalisé
Vous pouvez utiliser une fonction de rappel personnalisée pour implémenter des comportements de modèle sélectionnés et transformer des entrées de modèle spécifiques en sorties. L'exemple suivant utilise le modèle gemini-pro de Model Garden et l'émulateur Spanner pour générer des prédictions à l'aide d'un rappel personnalisé.
Lorsque vous utilisez un rappel personnalisé pour un modèle, vous devez dupliquer le dépôt de l'émulateur Spanner, puis le créer et le déployer. Pour en savoir plus sur la manière de créer et de déployer l'émulateur Spanner, consultez le guide de démarrage rapide de l'émulateur Spanner.
GoogleSQL
Enregistrer le modèle
Avant de pouvoir utiliser un modèle avec la ML.PREDICT, vous devez l'enregistrer à l'aide de l' instruction 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
);
Étant donné que l'émulateur ne se connecte pas à Agent Platform, vous devez fournir les valeurs input et output.
Remplacez les éléments suivants :
PROJECT_ID: ID du Google Cloud projet dans lequel se trouve le modèleREGION_ID: ID de la région dans laquelle se trouve le modèle, par exempleus-central1Google Cloud
Rappel
Utilisez un rappel pour ajouter une logique personnalisée au modèle 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);
}
Exécuter la prédiction
Utilisez la
ML.PREDICT
fonction GoogleSQL pour générer votre prédiction.
SELECT content
FROM ML.PREDICT(MODEL GeminiPro, (SELECT "Is 7 a prime number?" AS prompt))
La sortie attendue de cette requête est "YES".
PostgreSQL
Utilisez la fonction PostgreSQL spanner.ML_PREDICT_ROW pour générer votre prédiction.
Rappel
Utilisez un rappel pour ajouter une logique personnalisée au modèle 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);
}
Exécuter la prédiction
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
Remplacez les éléments suivants :
PROJECT_ID: ID du Google Cloud projet dans lequel se trouve le modèleREGION_ID: ID de la région dans laquelle se trouve le modèle, par exempleus-central1Google Cloud
La sortie attendue de cette requête est "YES".