Effectuer des prédictions à l'aide de modèles distants sur Vertex AI

Vous pouvez enregistrer un point de terminaison Vertex AI en tant que modèle distant et l'appeler directement depuis BigQuery avec ML.PREDICT.

Cela peut être utile lorsqu'un modèle est trop volumineux pour être importé dans BigQuery ou lorsque vous souhaitez utiliser un point d'inférence unique pour les cas d'utilisation en ligne, par lot et par micro-lot.

Ce tutoriel utilise un modèle d'analyse des sentiments personnalisé en ajustant un modèle BERT à l'aide d'avis sur des films IMDB en texte brut. Le modèle obtenu utilise des entrées de texte (avis de films) et renvoie des scores de sentiments compris entre (0, 1). Le modèle est enregistré dans Vertex AI Model Registry et diffusé sur un point de terminaison Vertex AI. De là, le modèle est ajouté à BigQuery en tant que modèle distant. Vous pouvez utiliser le modèle distant dans BigQuery pour obtenir des prédictions de sentiments dans une colonne de texte (avis de films issus de la table de 100 000 lignes bigquery-public-data.imdb.reviews).

Consultez le tutoriel sur le modèle distant BQML pour obtenir un tutoriel GitHub sur la version en Python.

Présentation du workflow

Configuration du tutoriel

Ce tutoriel utilise les composants facturables suivants de Google Cloud : Cloud Storage, Vertex AI et BigQuery. À la fin du tutoriel, vous supprimerez les composants facturables.

  1. Cliquez ici pour activer les API pour les connexions aux ressources Vertex AI, Cloud Storage et BigQuery.
  2. Cloud Storage : pour créer un bucket dans l'emplacement multirégional US par défaut, suivez ces instructions.

Créer un modèle de ML

Créez un modèle à l'aide du tutoriel sur le modèle distant BQML, qui inclut un modèle de prédiction d'analyse des sentiments créé par réglage d'un modèle BERT avec ajout d'une couche de classification.

Nous avons déjà entraîné un exemple de modèle et l'avons importé dans gs://cloud-samples-data/bigquery/ml/remote_model_tutorial/ pour vous permettre de l'utiliser directement.

Déployer un modèle sur Vertex AI

Suivez les instructions pour enregistrer le modèle dans Vertex AI Model Registry.

Suivez les instructions pour déployer le modèle de Vertex AI Model Registry sur un point de terminaison Vertex AI.

Nous vous recommandons de définir le nombre maximal de nœuds de calcul. La fonctionnalité d'autoscaling est ainsi activée du côté de Vertex AI et permet au point de terminaison de traiter plus de requêtes lorsque votre table de données BigQuery contient un grand nombre de lignes.

Modèle distant BigQuery ML

La création d'un modèle distant BigQuery ML se compose de deux éléments : une connexion de ressource cloud BigQuery et un modèle distant BigQuery qui utilise la connexion.

Créer une connexion de ressource cloud BigQuery

Vous devez disposer d'une connexion à une ressource cloud pour vous connecter à Vertex AI.

Sélectionnez l'une des options suivantes :

Console

  1. Accédez à la page BigQuery.

    Accéder à BigQuery

  2. Pour créer une connexion, cliquez sur Ajouter, puis sur Connexions aux sources de données externes.

  3. Dans la liste Type de connexion, sélectionnez Modèles distants Vertex AI, fonctions distantes et BigLake (ressource Cloud).

  4. Dans le champ ID de connexion, saisissez un nom pour votre connexion.

  5. Cliquez sur Create connection (Créer une connexion).

  6. Cliquez sur Accéder à la connexion.

  7. Dans le volet Informations de connexion, copiez l'ID du compte de service à utiliser à l'étape suivante.

bq

  1. Dans un environnement de ligne de commande, créez une connexion :

    bq mk --connection --location=REGION --project_id=PROJECT_ID \
        --connection_type=CLOUD_RESOURCE CONNECTION_ID

    Le paramètre --project_id remplace le projet par défaut.

    Remplacez les éléments suivants :

    • REGION : votre région de connexion
    • PROJECT_ID : ID de votre projet Google Cloud
    • CONNECTION_ID : ID de votre connexion

    Lorsque vous créez une ressource de connexion, BigQuery crée un compte de service système unique et l'associe à la connexion.

    Dépannage : Si vous obtenez l'erreur de connexion suivante, mettez à jour le Google Cloud SDK :

    Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
    
  2. Récupérez et copiez l'ID du compte de service pour l'utiliser lors d'une prochaine étape :

    bq show --connection PROJECT_ID.REGION.CONNECTION_ID

    Le résultat ressemble à ce qui suit :

    name                          properties
    1234.REGION.CONNECTION_ID     {"serviceAccountId": "connection-1234-9u56h9@gcp-sa-bigquery-condel.iam.gserviceaccount.com"}
    

Terraform

Utilisez la ressource google_bigquery_connection.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

L'exemple suivant crée une connexion de ressources Cloud nommée my_cloud_resource_connection dans la région US:


# This queries the provider for project information.
data "google_project" "default" {}

# This creates a cloud resource connection in the US region named my_cloud_resource_connection.
# Note: The cloud resource nested object has only one output field - serviceAccountId.
resource "google_bigquery_connection" "default" {
  connection_id = "my_cloud_resource_connection"
  project       = data.google_project.default.project_id
  location      = "US"
  cloud_resource {}
}

Pour appliquer votre configuration Terraform dans un projet Google Cloud, suivez les procédures des sections suivantes.

Préparer Cloud Shell

  1. Lancez Cloud Shell.
  2. Définissez le projet Google Cloud par défaut dans lequel vous souhaitez appliquer vos configurations Terraform.

    Vous n'avez besoin d'exécuter cette commande qu'une seule fois par projet et vous pouvez l'exécuter dans n'importe quel répertoire.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Les variables d'environnement sont remplacées si vous définissez des valeurs explicites dans le fichier de configuration Terraform.

Préparer le répertoire

Chaque fichier de configuration Terraform doit avoir son propre répertoire (également appelé module racine).

  1. Dans Cloud Shell, créez un répertoire et un nouveau fichier dans ce répertoire. Le nom du fichier doit comporter l'extension .tf, par exemple main.tf. Dans ce tutoriel, le fichier est appelé main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Si vous suivez un tutoriel, vous pouvez copier l'exemple de code dans chaque section ou étape.

    Copiez l'exemple de code dans le fichier main.tf que vous venez de créer.

    Vous pouvez également copier le code depuis GitHub. Cela est recommandé lorsque l'extrait Terraform fait partie d'une solution de bout en bout.

  3. Examinez et modifiez les exemples de paramètres à appliquer à votre environnement.
  4. Enregistrez les modifications.
  5. Initialisez Terraform. Cette opération n'est à effectuer qu'une seule fois par répertoire.
    terraform init

    Vous pouvez également utiliser la dernière version du fournisseur Google en incluant l'option -upgrade :

    terraform init -upgrade

Appliquer les modifications

  1. Examinez la configuration et vérifiez que les ressources que Terraform va créer ou mettre à jour correspondent à vos attentes :
    terraform plan

    Corrigez les modifications de la configuration si nécessaire.

  2. Appliquez la configuration Terraform en exécutant la commande suivante et en saisissant yes lorsque vous y êtes invité :
    terraform apply

    Attendez que Terraform affiche le message "Apply completed!" (Application terminée).

  3. Ouvrez votre projet Google Cloud pour afficher les résultats. Dans la console Google Cloud, accédez à vos ressources dans l'interface utilisateur pour vous assurer que Terraform les a créées ou mises à jour.

Configurer l'accès

Attribuez le rôle d'utilisateur Vertex AI au compte de service de la connexion. Vous devez accorder ce rôle dans le même projet que celui que vous prévoyez de spécifier dans l'URL du point de terminaison du modèle distant (ou dans votre projet de modèle si vous utilisez un point de terminaison abrégé) dans la section Créer un modèle distant BigQuery ML. L'attribution du rôle dans un autre projet génère l'erreur bqcx-1234567890-xxxx@gcp-sa-bigquery-condel.iam.gserviceaccount.com does not have the permission to access resource.

Pour accorder le rôle, procédez comme suit :

  1. Accédez à la page IAM et administration.

    Accéder à IAM et administration

  2. Cliquez sur Accorder l'accès.

  3. Dans le champ Nouveaux comptes principaux, saisissez l'ID du compte de service que vous avez copié précédemment.

  4. Dans le champ Sélectionner un rôle, sélectionnez Vertex AI, puis le rôle Utilisateur Vertex AI.

  5. Cliquez sur Enregistrer.

Créer votre ensemble de données

Vous allez créer un ensemble de données BigQuery pour stocker votre modèle de ML :

  1. Dans la console Google Cloud, accédez à la page "BigQuery".

    Accéder à la page "BigQuery"

  2. Dans le volet Explorateur, cliquez sur le nom de votre projet.

  3. Cliquez sur Afficher les actions > Créer un ensemble de données.

    Créer l'ensemble de données

  4. Sur la page Créer un ensemble de données, procédez comme suit :

    • Dans le champ ID de l'ensemble de données, saisissez bqml_tutorial.

    • Pour Type d'emplacement, sélectionnez Multirégional, puis sélectionnez US (plusieurs régions aux États-Unis).

      Les ensembles de données publics sont stockés dans l'emplacement multirégional US. Par souci de simplicité, stockez votre ensemble de données dans le même emplacement.

    • Conservez les autres paramètres par défaut, puis cliquez sur Créer un ensemble de données.

      Créer une page d'ensemble de données

Créer un modèle distant BigQuery ML

Pour afficher le schéma d'entrée et de sortie du modèle TensorFlow en envoyant une requête au point de terminaison :

Exemple de requête :

curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/endpoints/ENDPOINT_ID:predict -d "{'instances': [{ 'text': 'This is an amazing movie'}, { 'text': 'The movie was terrible'}]}"

Exemple de réponse :

{
  "predictions": [
    [
      [ 0.999410391 ]
    ],
    [
      [ 0.000628352049 ]
    ]
  ]
}

Lors de la création d'un modèle distant, les noms et les types de champs d'entrée et de sortie doivent être identiques aux entrées et aux sorties de Vertex AI.

Pour le modèle avec un seul résultat, Vertex AI ne renvoie pas le nom du champ. Dans CREATE MODEL, vous pouvez spécifier n'importe quel nom de champ.

L'exemple suivant montre comment créer un modèle distant à l'aide d'une connexion :

CREATE OR REPLACE MODEL `PROJECT_ID.bqml_tutorial.bert_sentiment`
    INPUT (text STRING)
    OUTPUT(scores ARRAY<FLOAT64>)
    REMOTE WITH CONNECTION `PROJECT_ID.REGION.CONNECTION_ID`
    OPTIONS(endpoint = 'ENDPOINT_URL')

Obtenir des prédictions avec ML.PREDICT

Obtenez des prédictions à partir du modèle distant dans BigQuery à l'aide de la fonction ML.PREDICT. Ici, 10 000 enregistrements sont sélectionnés et envoyés pour la prédiction. Le modèle distant utilise par défaut une taille de lot de 128 instances pour ses requêtes.

SELECT *
FROM ML.PREDICT (
    MODEL `PROJECT_ID.bqml_tutorial.bert_sentiment`,
    (
        SELECT review as text
        FROM `bigquery-public-data.imdb.reviews`
        LIMIT 10000
    )
)

Régions où le service est disponible

Il existe deux types de zones dans BigQuery :

  • Une région est un emplacement géographique spécifique, par exemple Londres.
  • Une zone multirégionale correspond à un secteur géographique de grande étendue, par exemple les États-Unis, et comporte au moins deux emplacements géographiques.

Région unique

Dans un ensemble de données BigQuery dans une seule région, vous ne pouvez créer qu'un modèle distant utilisant un point de terminaison Vertex AI déployé dans la même région. Un modèle distant dans la région BigQuery us-central1 ne peut utiliser qu'un Vertex AI dans us-central1. Ainsi, pour les régions uniques, les modèles distants ne sont disponibles que dans les régions compatibles à la fois avec Vertex AI et BigQuery.

Emplacements multirégionaux

Dans un ensemble de données BigQuery multirégional (US, EU), vous ne pouvez créer qu'un modèle distant qui utilise un modèle distant déployé dans une région située dans la même zone géographique (US, EU). Par exemple, un modèle distant dans BigQuery multirégional aux États-Unis ne peut utiliser qu'un point de terminaison Vertex AI déployé dans une seule région de la zone géographique des États-Unis, par exemple, us-central1, us-east4, us-west2, etc.

Un modèle distant dans un emplacement BigQuery multirégional de l'UE ne peut utiliser qu'un point de terminaison Vertex AI déployé dans une région unique des États membres de l'Union européenne, par exemple europe-north1, europe-west3, etc.

Pour en savoir plus sur les régions et les zones multirégionales BigQuery, consultez la page Emplacements des ensembles de données. Pour en savoir plus sur les régions Vertex AI, consultez les emplacements Vertex AI.

Utiliser VPC Service Controls

VPC Service Controls est une fonctionnalité de Google Cloud qui vous permet de configurer un périmètre sécurisé pour vous protéger contre l'exfiltration de données. Pour utiliser VPC Service Controls avec des modèles distants afin de renforcer la sécurité, suivez le guide VPC Service Controls pour créer un périmètre de service.

Ajoutez le projet BigQuery de la requête en utilisant la fonction distante dans le périmètre. Ajoutez le projet de point de terminaison au périmètre et définissez l'API Vertex AI dans les services restreints en fonction de votre type de point de terminaison. Pour en savoir plus, consultez la page Vertex AI VPC Service Controls.

Effectuer un nettoyage

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.