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

Restez organisé à l'aide des collections Enregistrez et classez les contenus selon vos préférences.

Objectif

Dans ce tutoriel, vous allez apprendre à effectuer les opérations suivantes :

  • Enregistrer un modèle hébergé dans le service Vertex AI dans un schéma Cloud Spanner à l'aide d'instructions LDD
  • Référencez ce modèle à partir de requêtes SQL pour générer des prédictions à partir de données stockées dans Cloud Spanner.

Coûts

Ce tutoriel utilise des composants facturables de Google Cloud, dont :

  • Cloud Spanner
  • Vertex AI

Pour en savoir plus sur le coût de Cloud Spanner, consultez la page Tarifs de Cloud Spanner.

Pour en savoir plus sur les coûts liés à Vertex AI, consultez la page Tarifs de Vertex AI.

Avant de commencer

Assurez-vous de disposer d'un modèle déjà entraîné et déployé sur un point de terminaison Vertex AI.

Ce tutoriel utilise des modèles de classification et de régression déployés sur Vertex AI en suivant les étapes décrites dans la présentation de la classification et de la régression.

Pour obtenir des informations générales sur l'entraînement et le déploiement de modèles de ML, consultez la page Présentation des données tabulaires de Vertex AI. Toutefois, pour être utilisé avec l'intégration de Spanner Vertex AI, un modèle n'a pas besoin d'être entraîné à l'aide de Vertex AI, mais il doit être déployé uniquement sur un point de terminaison Vertex AI. Vous pouvez entraîner le modèle à l'aide de n'importe quel framework ou service d'entraînement de ML, y compris votre propre infrastructure d'entraînement de ML, BigQuery ML ou un service d'entraînement de ML tiers. Si vos données sont stockées dans Cloud Spanner, vous pouvez utiliser des requêtes fédérées. Vous pouvez également déployer des modèles de ML déjà pré-entraînés et disponibles sur des dépôts de modèles publics, tels que TensorFlow Hub.

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

Pour autoriser l'intégration de Vertex AI à Spanner pour accéder aux modèles Vertex AI, accordez le rôle Vertex AI User au compte d'agent de service de Cloud Spanner, comme suit:

  • Si le compte d'agent de service Cloud Spanner n'existe pas pour votre projet, créez-le en exécutant la commande suivante : gcloud beta services identity create --service=spanner.googleapis.com --project={PROJECT}.
  • Suivez les étapes décrites dans le tutoriel suivant pour accorder le rôle Vertex AI User au compte d'agent de service Cloud Spanner service-{PROJECT}@gcp-sa-spanner.iam.gserviceaccount.com.

Enregistrer un modèle distant dans un schéma Cloud Spanner

Vous pouvez référencer un modèle à partir de requêtes SQL Cloud Spanner après l'avoir enregistré dans le schéma Cloud Spanner. Pour créer une référence au point de terminaison du modèle de classification Vertex AI, entraîné et déployé à l'aide du tutoriel mentionné ci-dessus, exécutez l'instruction LDD suivante:

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.googleapis.com/projects/PROJECT/locations/LOCATION/endpoints/ENDPOINT_ID'
)

Ici, PROJECT, LOCATION et ENDPOINT_ID correspondent à l'ID de votre projet, à la région dans laquelle vous utilisez Vertex AI et à l'ID du point de terminaison Vertex AI. Il doit s'agir des valeurs que vous avez spécifiées lors du déploiement du modèle.

Les colonnes length, material et tag_array correspondent aux colonnes d'entrée (caractéristiques) de l'exemple de modèle de classification utilisé dans le tutoriel.

Les colonnes scores et classes sont des colonnes de sortie standards produites pour tous les modèles de classification entraînés à l'aide d'AutoML. Les colonnes de sortie d'autres types de modèles (comme la régression) ou de modèles entraînés avec d'autres frameworks d'entraînement peuvent avoir des noms et des types complètement différents. Pour obtenir la liste complète des noms des colonnes d'entrée/sortie du modèle et de leurs types, consultez les métadonnées du modèle.

Pour créer une référence au modèle de régression déployé dans le tutoriel, utilisez l'instruction LDD suivante:

CREATE MODEL MyRegressionModel
INPUT (
  age FLOAT64,
  sq_ft INT64,
  code STRING(MAX)
)
OUTPUT (
  value FLOAT64,
  lower_bound FLOAT64,
  upper_bound FLOAT64
)
REMOTE
OPTIONS (
  endpoint = '//aiplatform.googleapis.com.googleapis.com/projects/PROJECT/locations/LOCATION/endpoints/ENDPOINT_ID'
)

Ici, value, lower_bound et upper_bound sont des colonnes standards produites pour tous les modèles de régression entraînés avec AutoML.

Utiliser ML.PREDICT pour l'inférence ML

Pour générer une prédiction à l'aide de modèles enregistrés à partir de requêtes DQL/DML, utilisez la fonction ML.PREDICT.

Par exemple, vous pouvez utiliser la requête SQL suivante pour générer une requête de prédiction de modèle de classification semblable à celle envoyée à l'API Vertex AI indiquée dans le tutoriel.

SELECT scores, classes
FROM ML.PREDICT(
  MODEL MyClassificationModel,
  SELECT
    3.6 AS length,
    'cotton' AS material,
    ['abc','def'] AS tag_array
  );

+---------------------------------------------+---------+
| scores                                      | classes |
+---------------------------------------------+---------+
| [0.96771615743637085, 0.032283786684274673] | [0, 1]  |
+---------------------------------------------+---------+

Pour générer une prédiction à partir d'un modèle de régression semblable à la requête API décrite dans le tutoriel sur Vertex AI, utilisez la requête suivante:

SELECT value, lower_bound, upper_bound
FROM ML.PREDICT(
  MODEL MyRegressionModel,
  SELECT
    3.6 AS age,
    5392 AS sq_ft,
    '90331' AS code
  );

+----------+-------------+-------------+
| value    | lower_bound | upper_bound |
+----------+-------------+-------------+
| 65.14233 | 4.6572      | 164.0279    |
+----------+-------------+-------------+

La fonction ML.PREDICT nécessite qu'une relation d'entrée contienne toutes les colonnes d'entrée du modèle cible. En parallèle, elle permet à cette relation de contenir d'autres colonnes. Dans ce cas, ils sont simplement transmis à une relation de sortie.

Cela permet d'associer des identifiants personnalisés (qui n'ont aucune signification pour le processus de prédiction lui-même) aux instances de prédiction. Par exemple, dans l'exemple ci-dessous, nous ajoutons une colonne id à la relation d'entrée. La valeur de la colonne id identifie de manière unique une instance de prédiction et peut être utilisée pour associer la ligne de sortie de prédiction générée à la ligne d'entrée de prédiction au cas où une relation d'entrée contiendrait plusieurs lignes. En général, vous pouvez inclure toutes les colonnes d'une relation d'entrée avec une relation de sortie, comme indiqué dans la colonne age :

SELECT id, value, age
FROM ML.PREDICT(
  MODEL MyRegressionModel,
  SELECT
    1 AS id,
    3.6 AS age,
    5392 AS sq_ft,
    '90331' AS code
  );

+----+----------+-----+
| id | value    | age |
+----+----------+-----+
| 1  | 65.14233 | 3.6 |
+----+----------+-----+