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 avec BigQuery Machine Learning, puis l'exporter et le déployer sur 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 modèle BQML 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. Configurez 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 allons utiliser 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 des données stockées dans BigQuery. Vous pouvez entraîner des modèles et obtenir des prédictions à partir de ceux-ci, le tout en SQL. Pour cet atelier, nous allons utiliser un ensemble de données public dans BigQuery afin de prédire la probabilité de défaut de paiement d'une carte de crédit.

Étape 1 : Créer 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 pour 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 BQ

Dans le champ ID de l'ensemble de données, saisissez cc_default. Laissez les valeurs par défaut des autres champs et cliquez sur Créer un 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`

Cela créera un modèle de régression logistique qui génère une valeur numérique comprise entre 0 et 1. 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. Nous allons maintenant exporter notre modèle afin de pouvoir le déployer sur Vertex AI pour le diffuser 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 Exporter le modèle :

Exporter un modèle BQML

Vous serez alors invité à saisir l'emplacement Google Cloud Storage (GCS) où vous souhaitez exporter les composants de votre modèle. Si vous n'avez pas encore de bucket GCS, ne vous inquiétez pas. Nous allons en créer un. Commencez par cliquer 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, puis choisissez l'une des régions dans le menu déroulant :

Emplacement du bucket

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

Uniformité du contrôle des accès

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 votre bucket créé, saisissez model-assets (ou le nom de votre choix) dans le champ Nom, puis cliquez sur Sélectionner :

Chemin d'accès à l'exportation du modèle

Cliquez ensuite sur Exporter. Cela créera un job dans BigQuery pour exporter votre modèle au format SavedModel de TensorFlow vers le bucket GCS que vous venez de créer. L'exportation prendra 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 :

Ressources de modèle exportées

6. Importer le modèle dans Vertex AI

Dans cette étape, nous allons faire référence à l'emplacement de stockage GCS où nous venons d'exporter les ressources de notre modèle pour créer et importer le modèle dans Vertex AI.

Étape 1 : Importer le modèle

Dans la console Cloud, accédez à la section Modèles de Vertex AI. Sélectionnez ensuite Importer :

Importer le modèle

À la première étape, donnez à votre modèle le nom 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 des artefacts de 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, puis sur le bucket GCS que vous venez de créer, et enfin sur le répertoire model-assets :

Chemin d'accès aux ressources du modèle

Cliquez ensuite sur Importer. L'importation de votre modèle prendra quelques minutes. Une fois créé, il s'affiche dans la section des 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. Dans Vertex, une ressource de modèle peut être associée à plusieurs points de terminaison, qui permettent alors de répartir le trafic.

É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, par exemple default_pred_v1, conservez les paramètres de répartition du trafic et 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 de votre choix.

Sélectionnez ensuite "OK", puis cliquez sur Continuer. Conservez les paramètres d'emplacement et 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é :

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 vous montrer 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 de cette façon, 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 enverrons cet exemple à notre modèle pour obtenir 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 Vertex, cliquez sur Exemple de requête pour le point de terminaison que vous venez de déployer :

Exemple de requête

Copiez le code de l'étape 4 de l'onglet "REST" dans votre notebook, puis exécutez la cellule :

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 demande 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 obtenu devrait ressembler à ce qui suit (les valeurs de prédiction exactes peuvent varier légèrement) :

{
  "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é de chaque classe. Dans cet exemple, notre modèle prédit qu'il y a 81 % de chances que cette personne ne manque pas son prochain paiement. La valeur .819 correspond à la classe 0 (et non à la classe 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 Vertex Notebooks 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 la console Cloud, sélectionnez le notebook et 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, puis 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