Générer des prédictions de ML à l'aide de SQL

Cette page explique comment générer des prédictions de machine learning (ML) à partir d'une base de données Spanner. Les prédictions de ML fonctionnent à la fois Bases de données GoogleSQL et PostgreSQL

L'intégration de Vertex AI dans Spanner vous permet de générer des prédictions à l'aide de vos code SQL en appelant la méthode ML.PREDICT pour GoogleSQL, ou la spanner.ML_PREDICT_ROW pour PostgreSQL. Pour en savoir plus sur Intégration de Vertex AI dans Spanner, consultez la présentation de l'intégration à Vertex AI dans Spanner.

Avant de commencer

Avant de pouvoir générer des prédictions à partir d'une instance Spanner, vous devez préparer votre base de données et sélectionner un modèle.

Configurer l'accès aux points de terminaison Vertex AI pour l'intégration de Vertex AI dans Spanner

Spanner crée l'agent de service et accorde automatiquement les autorisations nécessaires lorsqu'il exécute la première instruction DDL MODEL. Si la base de données Spanner et le point de terminaison Vertex AI pour un même projet, aucune configuration supplémentaire n'est requise.

Si le compte de l'agent de service Spanner n'existe pas pour votre projet Spanner, créez-le en exécutant la commande suivante :

gcloud beta services identity create --service=spanner.googleapis.com --project={PROJECT}`

Suivez la procédure décrite dans Attribuer un seul rôle pour attribuer le rôle Spanner API Service Agent au compte agent de service Spanner service-PROJECT_ID@gcp-sa-spanner.iam.gserviceaccount.com de votre projet Vertex AI.

Sélectionnez un modèle

Lorsque vous utilisez la fonction ML.PREDICT (pour GoogleSQL) ou spanner.ML_PREDICT_ROW (pour PostgreSQL), vous devez spécifier l'emplacement du modèle de ML. Le modèle que vous sélectionnez peut être l'un des suivants :

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

Selon le type de modèle sélectionné, la procédure à suivre pour générer vos prévisions seront différentes.

Utiliser un modèle dans Vertex AI Model Garden

Pour générer une prédiction à l'aide d'un modèle de Vertex AI Model Garden, Sélectionnez un modèle dans Model Garden.

GoogleSQL

Avant d'utiliser un modèle avec ML.PREDICT(), vous devez l'enregistrer à l'aide de l'instruction CREATE MODEL.

CREATE MODEL 'MODEL_NAME'
INPUT (INPUT_COLUMN_NAME INPUT_COLUMN_TYPE)
OUTPUT (OUTPUT_COLUMN_NAME OUTPUT_COLUMN_TYPE)
REMOTE
OPTIONS (
  endpoint = '//aiplatform.googleapis.com/projects/PROJECT_ID/locations/LOCATION_ID/publishers/google/models/model_id'
);

Remplacez les éléments suivants :

  • MODEL_NAME: nom que vous souhaitez donner au modèle

  • INPUT_COLUMN_NAME: nom de votre colonne d'entrée. Par exemple : si vous utilisez le modèle gemini-pro, le nom de la colonne d'entrée est prompt.

  • INPUT_COLUMN_TYPE : type de données pour INPUT_COLUMN_NAME

  • OUTPUT_COLUMN_NAME : nom de votre colonne de sortie. Par exemple, si vous utilisez le modèle gemini-pro, le nom de la colonne de sortie est content.

  • OUTPUT_COLUMN_TYPE : type de données pour OUTPUT_COLUMN_NAME

  • PROJECT_ID : ID de votre projet Google Cloud

  • REGION_ID : ID de la région Google Cloud dans laquelle se trouve le modèle (par exemple, us-central1)

  • MODEL_ID: ID du modèle de ML que vous souhaitez utiliser (par exemple, gemini-pro)

    Pour en savoir plus sur les modèles, consultez Documentation de référence de l'API de modèle pour l'IA générative

Utilisez la fonction GoogleSQL ML.PREDICT avec le modèle sélectionné dans Model Garden pour générer votre prédiction.

SELECT * FROM ML.PREDICT(
  MODEL `MODEL_NAME`,
  `INPUT_RELATION`[, `PARAMETERS`])

Remplacez les éléments suivants :

  • MODEL_NAME : nom que vous souhaitez donner à votre modèle

    Pour en savoir plus sur les modèles, consultez Documentation de référence de l'API de modèle pour l'IA générative

  • INPUT_RELATION : TABLE table_name ou une sous-requête, la table ou la sous-requête fournissant les données sur lesquelles exécuter la prédiction ML.

  • PARAMETERS: une valeur STRUCT contenant des paramètres pris en charge par model_id.

Vous pouvez également utiliser SAFE.ML.PREDICT pour renvoyer null au lieu d'une erreur dans vos prédictions. Cela est utile lorsque vous exécutez de grandes requêtes pour lesquelles certaines prédictions échouées sont tolérables.

PostgreSQL

Utilisez la fonction PostgreSQL ML_PREDICT_ROW avec le modèle sélectionné dans Model Garden pour générer votre prédiction.

SELECT spanner.ml_predict_row(
  'projects/PROJECT_ID/locations/REGION_ID/publishers/google/models/MODEL_ID'::text,
  '{
    "instances": [ INSTANCES ],
    "parameters": { PARAMETERS }
   }'::jsonb);

Remplacez les éléments suivants :

  • PROJECT_ID : ID de votre projet Google Cloud

  • REGION_ID : ID de la région Google Cloud dans laquelle se trouve le modèle (par exemple, us-central1)

  • MODEL_ID: ID du modèle de ML que vous souhaitez utiliser (par exemple, gemini-pro)

    Pour en savoir plus sur les modèles, consultez Documentation de référence de l'API de modèle pour l'IA générative

  • INSTANCES : entrées de l'appel de prédiction, au format JSON.

  • PARAMETERS : paramètres facultatifs pour l'appel de prédiction, au format JSON

Cette requête génère une réponse JSON. Pour en savoir plus sur les messages de réponse JSON du modèle, consultez la section PredictResponse.

Utiliser un point de terminaison de modèle Vertex AI

Pour utiliser un modèle entraîné ou téléchargé avec l'intégration de Vertex AI dans Spanner, vous devez le déployer dans Vertex AI. Pour en savoir plus sur le déploiement d'un modèle sur un point de terminaison dans Vertex AI, consultez la section Déployer un modèle sur un point de terminaison.

GoogleSQL

Utilisez la fonction GoogleSQL ML.PREDICT avec le modèle dans un point de terminaison Vertex AI pour générer votre prédiction. Avant d'utiliser un modèle avec ML.PREDICT(), vous devez l'enregistrer à l'aide de l'instruction CREATE MODEL. Chaque modèle déployé possède son propre du schéma. Voici un exemple de schéma tiré de la section Présentation de la classification et de la régression.

CREATE MODEL MyClassificationModel
INPUT (
  length FLOAT64,
  material STRING(MAX),
  tag_array ARRAY<STRING(MAX)>
)
OUTPUT (
  scores ARRAY<FLOAT64>,
  classes ARRAY<STRING(MAX)>
)
REMOTE
OPTIONS (
  endpoint = '//aiplatform.googleapis.com/projects/PROJECT/locations/LOCATION/endpoints/ENDPOINT_ID'
)

Remplacez les éléments suivants :

  • PROJECT_ID : ID de votre projet Google Cloud

  • LOCATION : ID de la région Google Cloud dans laquelle se trouve le modèle (par exemple, us-central1)

  • ENDPOINT_ID: ID du modèle de ML que vous souhaitez utiliser (par exemple, gemini-pro)

    Pour en savoir plus sur les modèles, consultez la documentation de référence de l'API de modèle pour l'IA générative.

Utilisez le ML.PREDICT Fonction GoogleSQL avec le modèle sélectionné depuis Model Garden pour générer votre prédiction.

SELECT * FROM ML.PREDICT(
  `MODEL_ID`,
  `INPUT_RELATION`[, `PARAMETERS`])

Remplacez les éléments suivants :

  • MODEL_ID : ID du modèle de ML que vous souhaitez utiliser.

  • INPUT_RELATION : table ou sous-requête sur laquelle exécuter la prédiction ML.

  • PARAMETERS : valeur STRUCT contenant les paramètres compatibles avec model_name.

Cette requête produit une relation contenant toutes les colonnes de sortie du modèle. toutes les colonnes de la relation d'entrée.

PostgreSQL

Utiliser la fonction PostgreSQL ML.PREDICT avec le modèle dans une point de terminaison Vertex AI pour générer votre prédiction.

  SELECT spanner.ml_predict_row(
    'projects/PROJECT_ID/locations/REGION_ID/endpoints/ENDPOINT_ID'::text,
    '{
      "instances": [ INSTANCES ],
      "parameters": { PARAMETERS }
      }'::jsonb);
  ```

Replace the following:
  • PROJECT_ID : ID du projet Google Cloud dans lequel se trouve le modèle

  • REGION_ID : ID de la région Google Cloud dans laquelle se trouve le modèle (par exemple, us-central1)

  • ENDPOINT_ID : ID du point de terminaison du modèle

  • INSTANCES : entrées de l'appel de prédiction, au format JSON.

  • PARAMETERS: paramètres facultatifs de l'appel de prédiction, au format JSON

Cette requête génère une réponse JSON. Pour en savoir plus sur les messages de réponse JSON du modèle, consultez la section PredictResponse.

Exemples d'utilisation des fonctions de ML pour générer des prédictions

L'exemple suivant utilise le modèle gemini-pro, issu de Model Garden, pour générer du texte à partir d'une requête courte fournie en tant qu'argument. Ce modèle est disponible Gemini dans Spanner.

GoogleSQL

Enregistrer le modèle gemini-pro

CREATE MODEL GeminiPro
INPUT (prompt STRING(MAX))
OUTPUT (content STRING(MAX))
REMOTE
OPTIONS (
  endpoint = '//aiplatform.googleapis.com/projects/PROJECT/locations/LOCATION/publishers/google/models/gemini-pro',
  default_batch_size = 1
);

Remplacez les éléments suivants :

  • PROJECT : ID du projet
  • LOCATION : région dans laquelle vous utilisez Vertex AI

Exécuter le modèle

SELECT content
FROM ML.PREDICT(
  MODEL GeminiPro,
  (SELECT "Is 7 a prime number?" AS prompt),
  STRUCT(256 AS maxOutputTokens, 0.2 AS temperature, 40 as topK, 0.95 AS topP)
);

Résultat attendu

Le résultat attendu est le suivant :

+--------------------+
| content            |
+--------------------+
| "Yes"              |
+--------------------+

PostgreSQL

Exécuter le modèle

select spanner.ml_predict_row(
  '{
    "endpoint": "projects/PROJECT_ID/locations/us-central1/publishers/google/models/gemini-pro",
    "default_batch_size": 1
   }'::jsonb,
  '{
    "instances":[{"prompt": "Is 7 a prime number?"}],
    "parameters":{"maxOutputTokens":256, "topK": 40, "topP":0.96, "temperature":0.2}
    }'
);

Résultat attendu

Le résultat attendu est le suivant:

+--------------------+
| content            |
+--------------------+
| "Yes"              |
+--------------------+