Vertex AI: exporter et déployer un modèle de machine learning BigQuery pour la prédiction

1. Présentation

Dans cet atelier, vous allez entraîner un modèle à l'aide de BigQuery Machine Learning, puis l'exporter et le déployer vers Vertex AI. Il s'agit de la toute dernière offre de produits d'IA de Google Cloud.

Objectifs

Vous allez apprendre à effectuer les opérations suivantes :

  • Entraîner un modèle avec BigQuery Machine Learning (BQML)
  • Exporter votre modèle BQML vers Cloud Storage
  • Déployer votre BigQuery ML entraîné sur Vertex AI
  • Obtenir des prédictions à partir de votre modèle déployé

Le coût total d'exécution de cet atelier sur Google Cloud est d'environ 2 $.

2. Présentation de Vertex AI

Cet atelier utilise la toute dernière offre de produits d'IA de Google Cloud. Vertex AI simplifie l'expérience de développement en intégrant toutes les offres de ML de Google Cloud. Auparavant, les modèles entraînés avec AutoML et les modèles personnalisés étaient accessibles depuis des services distincts. La nouvelle offre regroupe ces deux types de modèles mais aussi d'autres nouveaux produits en une seule API. Vous pouvez également migrer des projets existants vers Vertex AI. Pour envoyer un commentaire, consultez la page d'assistance.

Vertex AI comprend de nombreux produits différents qui permettent de gérer les workflows de ML de bout en bout. Cet atelier se concentre sur les produits mis en évidence ci-dessous: Prediction et Notebooks.

Présentation des produits Vertex

3. Configurer votre environnement

Pour suivre cet atelier de programmation, vous aurez besoin d'un projet Google Cloud Platform dans lequel la facturation est activée. Pour créer un projet, suivez ces instructions.

Étape 1 : Activez l'API Compute Engine

Accédez à Compute Engine et cliquez sur Activer si ce n'est pas déjà fait. Vous en aurez besoin pour créer votre instance de notebook.

Étape 2: Activez l'API Vertex AI

Accédez à la section Vertex AI de Cloud Console, puis cliquez sur Activer l'API Vertex AI.

Tableau de bord Vertex AI

Étape 3: Créez une instance Notebooks

Nous utiliserons Notebooks pour obtenir des prédictions après avoir déployé notre modèle. Dans la section Vertex AI de la console Cloud, cliquez sur "Notebooks" :

Menu Vertex AI

Ensuite, sélectionnez Nouvelle instance. Sélectionnez ensuite le type d'instance TensorFlow Enterprise 2.3 sans GPU:

Instance TFE

Utilisez les options par défaut, puis cliquez sur Créer. Une fois l'instance créée, sélectionnez Ouvrir JupyterLab:

Ouvrir le notebook CAIP

4. Entraîner un modèle BigQuery ML.

BigQuery ML vous permet d'entraîner des modèles de machine learning personnalisés à l'aide de données stockées dans BigQuery. Vous pouvez entraîner des modèles et obtenir des prédictions en langage SQL. Dans cet atelier, nous allons utiliser un ensemble de données accessible publiquement dans BigQuery pour prédire la probabilité de défaut d'un paiement par carte de crédit.

Étape 1: Créez un ensemble de données BigQuery dans votre projet

Pour entraîner un modèle dans BigQuery ML, vous devez créer un ensemble de données dans votre projet afin de stocker ce modèle. Cliquez sur votre projet dans la barre de menu de gauche, puis sélectionnez Créer un ensemble de données:

Créer un ensemble de données BigQuery

Dans le champ ID de l'ensemble de données, saisissez cc_default. Laissez les autres champs tels quels et cliquez sur Créer l'ensemble de données.

Étape 2: Exécuter une requête CREATE MODEL

Dans l'éditeur de requête BigQuery, exécutez la requête CREATE MODEL suivante pour créer et entraîner un modèle BigQuery ML sur l'ensemble de données public que nous allons utiliser. Veillez à remplacer your-project par le nom de votre projet Cloud:

CREATE OR REPLACE MODEL
  `your-project.cc_default.logistic_model` OPTIONS(model_type='LOGISTIC_REG',
    input_label_cols=['default_payment_next_month']) AS
SELECT
  limit_balance,
  sex,
  education_level,
  marital_status,
  age,
  pay_0,
  pay_2,
  pay_3,
  pay_4,
  pay_5,
  pay_6,
  bill_amt_1,
  bill_amt_2,
  bill_amt_3,
  bill_amt_4,
  bill_amt_5,
  bill_amt_6,
  pay_amt_1,
  pay_amt_2,
  pay_amt_3,
  pay_amt_4,
  pay_amt_5,
  pay_amt_6,
  default_payment_next_month
FROM
  `bigquery-public-data.ml_datasets.credit_card_default`

Cette opération entraîne la création d'un modèle de régression logistique qui génère une valeur numérique comprise entre 0 et 1, indiquant que l'exécution prend environ une minute. Une fois l'opération terminée, le modèle s'affiche sous votre ensemble de données:

Détails du modèle BQML

Vous pouvez cliquer sur le modèle pour consulter ses métriques d'entraînement et d'évaluation.

5. Exporter votre modèle BigQuery ML

Avec un modèle BQML entraîné, nous pouvons utiliser la syntaxe SQL BQML pour obtenir des prédictions ou exporter le modèle pour le déployer ailleurs. Ici, nous allons exporter notre modèle afin de pouvoir le déployer sur Vertex AI pour l'inférer de manière évolutive et obtenir des prédictions.

Étape 1: Créez un bucket Cloud Storage pour votre modèle

Dans les détails du modèle, cliquez sur Export Model (Exporter le modèle) :

Exporter le modèle BQML

Vous êtes alors invité à indiquer l'emplacement Google Cloud Storage (GCS) dans lequel vous souhaitez exporter les éléments de votre modèle. Si vous n'avez pas encore de bucket GCS, ne vous inquiétez pas. Nous sommes sur le point d’en créer une. Tout d'abord, cliquez sur Parcourir:

Parcourir les buckets GCS

Cliquez ensuite sur l'icône + pour créer un bucket:

Nouveau bucket GCS

Attribuez-lui un nom unique (les noms des buckets de stockage doivent être uniques). Cliquez sur Continuer. À l'étape suivante, sous Type d'emplacement, sélectionnez Région et choisissez l'une des régions dans le menu déroulant:

Emplacement du bucket

Utilisez la classe de stockage par défaut, et sous contrôle des accès, assurez-vous que l'option Uniforme est sélectionnée:

Contrôle des accès uniforme

Cliquez sur "Continuer" et utilisez les valeurs par défaut pour les autres options. Ensuite, cliquez sur Créer.

Étape 2: Exporter le modèle BQML

Une fois le bucket créé, saisissez model-assets (ou tout autre élément de votre choix) dans le champ Nom, puis cliquez sur Sélectionner:

Chemin d'exportation du modèle

Cliquez ensuite sur Exporter. Un job est alors créé dans BigQuery pour exporter votre modèle au format SavedModel de TensorFlow vers le nouveau bucket GCS que vous avez spécifié. L'exportation prend environ une minute.

Pendant l'exportation de votre modèle, accédez à la section Stockage de la console Cloud. Une fois votre job terminé, les ressources de votre modèle doivent être exportées vers le bucket que vous venez de créer dans un sous-répertoire model-assets:

Éléments du modèle exporté

6. Importer le modèle dans Vertex AI

Au cours de cette étape, nous allons faire référence à l'emplacement de stockage GCS dans lequel nous venons d'exporter les éléments du modèle pour le créer et l'importer dans Vertex AI.

Étape 1: Importez le modèle

Dans la console Cloud, accédez à la section Modèles de Vertex AI. Ensuite, sélectionnez Import (Importer) :

Importer le modèle

Lors de la première étape, nommez votre modèle predict_default. Sélectionnez la région dans laquelle vous avez créé votre bucket (us-central1, europe-west4 ou asia-east1). Cliquez ensuite sur Continuer. Dans Paramètres du modèle, conservez l'option "Importer les artefacts du modèle dans un nouveau conteneur prédéfini". sélectionnée.

Dans le menu déroulant Framework de modèle, sélectionnez TensorFlow. Sélectionnez ensuite 2.3 comme version du framework.

Dans le champ "Emplacement de l'artefact de modèle", cliquez sur Parcourir, sélectionnez le bucket GCS que vous venez de créer, puis cliquez sur le répertoire model-assets:

Chemin d'accès aux éléments du modèle

Cliquez ensuite sur Importer. L'importation du modèle prend quelques minutes. Une fois le modèle créé, il apparaît dans la section "Modèles" de la console Cloud:

Section "Modèles"

7. Déployer le modèle sur un point de terminaison

Maintenant que nous avons importé notre modèle, l'étape suivante consiste à créer un point de terminaison dans Vertex. Une ressource de modèle dans Vertex peut être associée à plusieurs points de terminaison, et vous pouvez répartir le trafic entre ces points de terminaison.

Étape 1: Créer un point de terminaison

Sur la page de votre modèle, accédez à l'onglet Déployer et tester, puis cliquez sur Déployer sur un point de terminaison:

Déployer et tester

Attribuez un nom à votre point de terminaison, tel que default_pred_v1, laissez les paramètres de répartition du trafic tels quels, puis sélectionnez un type de machine pour le déploiement de votre modèle. Nous avons utilisé un n1-highcpu-2 ici, mais vous pouvez choisir le type de machine que vous souhaitez.

Sélectionnez ensuite "OK", puis cliquez sur Continuer. Laissez les paramètres d'emplacement sélectionnés tels quels, puis cliquez sur Déployer. Le déploiement de votre point de terminaison va prendre quelques minutes. Une fois l'opération terminée, une coche verte s'affiche à côté de celui-ci:

Point de terminaison déployé

Le filet se resserre ! Vous pouvez maintenant obtenir des prédictions à partir de votre modèle déployé.

8. Obtenir des prédictions à partir du modèle déployé

Lorsque vous souhaitez obtenir des prédictions à partir d'un modèle, vous avez le choix entre les options suivantes :

  • Interface utilisateur de Vertex AI
  • API Vertex AI

Nous allons voir comment obtenir des prédictions via l'API

Étape 1: Obtenir des prédictions à partir d'un modèle avec l'API Vertex AI

Pour vous montrer comment obtenir des prédictions à partir d'un modèle, nous allons utiliser l'instance de notebook Vertex que vous avez créée au début de cet atelier.

Ensuite, ouvrez l'instance de notebook que vous avez créée, puis ouvrez un notebook Python 3 à partir du lanceur:

Ouvrir le notebook

Dans votre notebook, exécutez le code suivant dans une cellule pour écrire un exemple de test dans un fichier JSON nommé default-pred.json. Nous allons envoyer l'exemple suivant à notre modèle pour effectuer une prédiction:

%%writefile default-pred.json
{
  "instances": [
    {"age": 39,
    "bill_amt_1": 47174,
    "bill_amt_2": 47974,
    "bill_amt_3": 48630,
    "bill_amt_4": 50803,
    "bill_amt_5": 30789,
    "bill_amt_6": 15874,
    "education_level": "1",
    "limit_balance": 50000,
    "marital_status": "2",
    "pay_0": 0,
    "pay_2":0,
    "pay_3": 0,
    "pay_4": 0,
    "pay_5": "0",
    "pay_6": "0",
    "pay_amt_1": 1800,
    "pay_amt_2": 2000,
    "pay_amt_3": 3000,
    "pay_amt_4": 2000,
    "pay_amt_5": 2000,
    "pay_amt_6": 2000,
    "sex": "1"}
  ]
}

Ensuite, dans l'interface utilisateur de Vertex, cliquez sur Sample Request (Exemple de requête) pour le point de terminaison que vous venez de déployer:

Exemple de requête

Copiez dans votre notebook le code obtenu à l'étape 4 de l'onglet REST et exécutez la cellule suivante:

Variables de requête

Ajoutez ensuite une variable pour la région dans laquelle vous avez créé votre bucket et votre modèle. Remplacez your-region dans la chaîne ci-dessous:

REGION="your-region" # either us-central1, europe-west4, or asia-east1

Enfin, envoyez une requête de prédiction à votre point de terminaison avec curl en copiant le code suivant dans votre notebook:

!curl \
-X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://us-central1-prediction-aiplatform.googleapis.com/v1alpha1/projects/$PROJECT_ID/locations/$REGION/endpoints/$ENDPOINT_ID:predict \
-d "@default-pred.json"

Le résultat doit ressembler à ce qui suit (les valeurs de prédiction exactes peuvent légèrement varier):

{
  "predictions": [
    {
      "default_payment_next_month_values": [
        "1",
        "0"
      ],
      "default_payment_next_month_probs": [
        0.180815295299778,
        0.819184704700222
      ],
      "predicted_default_payment_next_month": [
        "0"
      ]
    }
  ],
  "deployedModelId": "your-model-id"
}

Les valeurs de default_payment_next_month_probs indiquent la probabilité pour chaque classe. Pour cet exemple, notre modèle prédit qu'il y a 81% de chances que cette personne ne soit pas en défaut de paiement lors de son prochain paiement. La valeur .819 correspond à la classe 0 (pas celle par défaut).

🎉 Félicitations ! 🎉

Vous avez appris à effectuer les tâches suivantes :

  • Entraîner un modèle dans BQML
  • Exporter votre modèle BQML vers Cloud Storage
  • Importer le modèle BQML dans Vertex AI pour la prédiction
  • Créer un modèle Vertex AI et le déployer sur un point de terminaison
  • Obtenir des prédictions sur votre point de terminaison déployé via des notebooks Vertex et curl

Pour en savoir plus sur les différents composants de Vertex AI, consultez la documentation.

9. Nettoyage

Si vous souhaitez continuer à utiliser le notebook que vous avez créé dans cet atelier, nous vous recommandons de le désactiver quand vous ne vous en servez pas. À partir de l'interface utilisateur de Notebooks dans Cloud Console, sélectionnez le notebook, puis cliquez sur Arrêter:

Arrêter l'instance

Si vous souhaitez supprimer le notebook définitivement, il vous suffit de cliquer sur le bouton "Supprimer" en haut à droite.

Pour supprimer le point de terminaison que vous avez déployé, accédez à la section Points de terminaison de votre console Vertex AI et cliquez sur l'icône de suppression:

Supprimer un point de terminaison

Pour supprimer le bucket de stockage, utilisez le menu de navigation de la console Cloud pour accéder à Stockage, sélectionnez votre bucket puis cliquez sur "Supprimer" :

Supprimer l'espace de stockage