Cette page explique comment générer des prédictions de ML à l'aide de Spanner émulateur d'application.
L'intégration de Vertex AI dans Spanner peut être utilisée avec l'émulateur Spanner pour générer à l'aide du modèle de prédiction ML GoogleSQL ou PostgreSQL fonctions. L'émulateur est un binaire qui imite un serveur Spanner. et peuvent aussi être utilisées dans des tests unitaires et d'intégration. Vous pouvez utiliser l'émulateur en tant que projet open source ou en local à l'aide de la Google Cloud CLI. Pour en savoir plus sur la les fonctions de prédiction de ML, consultez la page Comment fonctionne l'intégration de Vertex AI dans Spanner ?.
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 Vertex AI Model Garden ou un modèle déployé sur votre point de terminaison Vertex AI. Comme l'émulateur ne se connecte pas à Vertex AI, l'émulateur ne peut pas vérifier le modèle ou son schéma pour un modèle utilisé à partir de Vertex AI Model Garden ou déployé sur la plate-forme les points de terminaison.
Par défaut, lorsque vous utilisez une fonction de prédiction avec l'émulateur, La fonction génère une valeur aléatoire basée sur les entrées du modèle fournies. et le schéma de sortie du modèle. Vous pouvez utiliser une fonction de rappel pour modifier le modèle des entrées et des sorties, et générer des résultats de prédiction basés sur des comportements spécifiques.
Avant de commencer
Installer l'émulateur Spanner
Vous pouvez installer l'émulateur en local. ou configurez-le à l'aide du dépôt GitHub.
Sélectionnez un modèle
Lorsque vous utilisez 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
dans Vertex AI Model Garden ou dans un modèle
déployé sur votre point de terminaison Vertex AI,
vous devez fournir les valeurs input
et output
pour ces modèles.
Pour en savoir plus sur l'intégration de Vertex AI dans Spanner, consultez Comment fonctionne l'intégration de Vertex AI dans Spanner ?
Générer des prédictions
Vous pouvez utiliser l'émulateur pour générer des prédictions à l'aide du Fonctions de prédiction de Spanner ML
Comportement par défaut
Vous pouvez utiliser n'importe quel modèle déployé sur un point de terminaison avec la
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
consultez la page Générer des prédictions de ML à l'aide de SQL.
Enregistrer le modèle
Avant de pouvoir utiliser un modèle avec
ML.PREDICT
vous devez enregistrer le modèle à l'aide de la fonction
CRÉER UN MODÈLE
et indiquez 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 projet Google Cloud que le modèle se trouveREGION_ID
: ID de la région Google Cloud dans laquelle se trouve le modèle situé dans le pays suivant :us-central1
, par exempleENDPOINT_ID
: ID du point de terminaison du modèle
Exécuter la prédiction
Utilisez les
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))
Le résultat attendu 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
consultez la page Générer des prédictions de ML à l'aide de SQL.
Exécuter la prédiction
Utiliser 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 projet Google Cloud que le modèle se trouveREGION_ID
: ID de la région Google Cloud dans laquelle se trouve le modèle situé dans le pays suivant :us-central1
, par exempleENDPOINT_ID
: ID du point de terminaison du modèle
Le résultat attendu de cette requête est TRUE
.
Rappel personnalisé
Vous pouvez utiliser une fonction de rappel personnalisée pour implémenter certains comportements de modèle.
et transformer des entrées spécifiques
de modèles en sorties. Les éléments suivants :
L'exemple utilise le modèle gemini-pro
de Vertex AI 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 les Dépôt de l'émulateur Spanner, avant de la créer et de la déployer. Pour savoir comment créer et déployer l'émulateur Spanner, consultez la Guide de démarrage rapide de l'émulateur Spanner.
GoogleSQL
Enregistrer le modèle
Avant de pouvoir utiliser un modèle avec la fonction ML.PREDICT, vous devez enregistrer le modèle 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
);
Comme l'émulateur ne se connecte pas à Vertex AI,
vous devez fournir les valeurs input
et output
.
Remplacez les éléments suivants :
PROJECT_ID
: ID du projet Google Cloud que le modèle se trouveREGION_ID
: ID de la région Google Cloud dans laquelle se trouve le modèle situé dans le pays suivant :us-central1
, par exemple
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 les
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))
Le résultat attendu de cette requête est "YES"
.
PostgreSQL
Utiliser 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 projet Google Cloud que le modèle se trouveREGION_ID
: ID de la région Google Cloud dans laquelle se trouve le modèle situé dans le pays suivant :us-central1
, par exemple
Le résultat attendu de cette requête est "YES"
.
Étape suivante
- Générer des prédictions de ML à l'aide de SQL
- Obtenir des représentations vectorielles continues de texte Vertex AI