Vertex AI Workbench: créer un modèle de classification d'images à l'aide de l'apprentissage par transfert et de l'exécuteur de notebooks

1. Aperçu

Dans cet atelier, vous allez apprendre à configurer et à lancer des exécutions de notebooks avec Vertex AI Workbench.

Objectifs

Vous apprendrez à effectuer les tâches suivantes :

  • Utiliser des paramètres dans un notebook
  • Configurer et lancer des exécutions de notebook depuis l'interface utilisateur de Vertex AI Workbench

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 solution d'IA la plus récente de Google Cloud. Vertex AI intègre toutes les offres de ML de Google Cloud pour créer une expérience de développement fluide. Auparavant, les modèles entraînés avec AutoML et les modèles personnalisés étaient accessibles via des services distincts. La nouvelle offre regroupe ces deux types de modèles en une seule API, ainsi que d'autres nouveaux produits. Vous pouvez également migrer des projets existants vers Vertex AI. Pour envoyer des commentaires, accédez à 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 portera sur Vertex AI Workbench.

Vertex AI Workbench aide les utilisateurs à créer rapidement des workflows basés sur les notebooks de bout en bout grâce à une intégration approfondie avec les services de données (Dataproc, Dataflow, BigQuery et Dataplex, par exemple) et Vertex AI. Elle permet aux data scientists de se connecter aux services de données GCP, d'analyser des ensembles de données, de tester différentes techniques de modélisation, de déployer des modèles entraînés en production et de gérer le MLOps tout au long du cycle de vie des modèles.

3. Présentation du cas d'utilisation

Dans cet atelier, vous allez utiliser l'apprentissage par transfert pour entraîner un modèle de classification d'images à partir de l'ensemble de données DeepDeepeds à partir d'ensembles de données TensorFlow. Vous utiliserezTensorFlow Hub pour tester des vecteurs de caractéristiques extraits de différentes architectures de modèles, tels queResNet50 , leInception etMobileNet , toutes pré-entraînées dansEnsemble de données de benchmark ImageNet dans le menu déroulant ; En exploitant l'exécuteur de notebook via l'UI de Vertex AI, vous allez lancer des tâches sur Vertex AI Training à l'aide de ces modèles pré-entraînés et réentraîner la dernière couche pour qu'elle reconnaisse les classes de l'ensemble de données DeepWeeds.

4. Configurer votre environnement

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

Étape 1: Activez l'API Compute Engine

Accédez à Compute Engine et sélectionnez Enable (Activer) si ce n'est pas déjà fait.

É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 Vertex AI Workbench

Dans la section Vertex AI de Cloud Console, cliquez sur Workbench:

Menu Vertex AI

Activez l'API Notebooks si elle ne l'est pas encore.

API pour notebooks

Une fois l'option activée, cliquez sur NOTEG Notebooks:

Interface utilisateur de notebook

Sélectionnez ensuite NOUVEAU NOTEBOOK.

new_notebook

Attribuez un nom à votre notebook, puis cliquez sur Advanced Settings (Paramètres avancés).

créer_notebook

Sous "Paramètres avancés", activez l'arrêt en cas d'inactivité et définissez le nombre de minutes sur 60. Cela signifie que votre notebook s'arrête automatiquement lorsqu'il n'est pas utilisé. Vous ne payez donc pas de frais inutiles.

idle_timeout

Vous pouvez conserver tous les autres paramètres avancés tels quels.

Cliquez ensuite sur Create (Créer).

Une fois l'instance créée, sélectionnez Ouvrir JupyterLab.

open_jupyterlab.

La première fois que vous utilisez une nouvelle instance, vous êtes invité à vous authentifier.

authentifier

Vertex AI Workbench dispose d'une couche de compatibilité de calcul qui vous permet de lancer des noyaux pour TensorFlow, PySpark, R, etc., le tout à partir d'une seule instance de notebook. Après l'authentification, vous pourrez sélectionner le type de notebook que vous souhaitez utiliser depuis le lanceur d'applications.

Pour cet atelier, sélectionnez le noyau TensorFlow 2.

tf_kernel

5. Rédiger le code d'entraînement

L'ensemble de données DeepWeeds se compose de 17 509 images représentant huit espèces différentes de mauvaises herbes indigènes d'Australie. Dans cette section, vous allez écrire le code permettant de prétraiter l'ensemble de données DeepWeeds, puis créer et entraîner un modèle de classification d'images à l'aide de vecteurs de caractéristiques téléchargés depuis TensorFlow Hub.

Vous devez copier les extraits de code suivants dans les cellules de votre notebook. L'exécution des cellules est facultative.

Étape 1: Télécharger et prétraiter l'ensemble de données

Commencez par importer les bibliothèques nécessaires:

import tensorflow as tf
import tensorflow_datasets as tfds
import tensorflow_hub as hub

Téléchargez les données à partir des ensembles de données TensorFlow, puis extrayez le nombre de classes et la taille de l'ensemble de données.

data, info = tfds.load(name='deep_weeds', as_supervised=True, with_info=True)
NUM_CLASSES = info.features['label'].num_classes
DATASET_SIZE = info.splits['train'].num_examples

Définissez une fonction de prétraitement pour effectuer le scaling des données d'image de 255.

def preprocess_data(image, label):
  image = tf.image.resize(image, (300,300))
  return tf.cast(image, tf.float32) / 255., label

L'ensemble de données DeepWeeds n'inclut pas de répartitions train/validation. Il ne contient qu'un ensemble de données d'entraînement. Dans le code ci-dessous, vous utiliserez 80% de ces données pour l'entraînement et les 20% restants pour la validation.

# Create train/validation splits

# Shuffle dataset
dataset = data['train'].shuffle(1000)

train_split = 0.8
val_split = 0.2
train_size = int(train_split * DATASET_SIZE)
val_size = int(val_split * DATASET_SIZE)

train_data = dataset.take(train_size)
train_data  = train_data.map(preprocess_data)
train_data  = train_data.batch(64)

validation_data = dataset.skip(train_size)
validation_data  = validation_data.map(preprocess_data)
validation_data  = validation_data.batch(64)

Étape 2: Créer un modèle

Maintenant que vous avez créé des ensembles de données d'entraînement et de validation, vous êtes prêt à créer votre modèle. TensorFlow Hub propose des vecteurs de caractéristiques, c'est-à-dire des modèles pré-entraînés sans couche de classification supérieure. Vous allez créer un extracteur de caractéristiques en encapsulant le modèle pré-entraîné avec hub.KerasLayer, qui encapsule un TensorFlow SavedModel en tant que couche Keras. Vous allez ensuite ajouter une couche de classification et créer un modèle à l'aide de l'API Keras Sequential.

Commencez par définir le paramètre feature_extractor_model, qui correspond au nom du vecteur de caractéristiques TensorFlow Hub que vous utiliserez comme base pour votre modèle.

feature_extractor_model = "inception_v3"

Vous allez maintenant transformer cette cellule en une cellule de paramètre, qui vous permettra de transmettre une valeur pour feature_extractor_model au moment de l'exécution.

Commencez par sélectionner la cellule, puis cliquez sur l'inspecteur de propriétés dans le panneau de droite.

propriété_inspecteur

Les tags constituent un moyen simple d'ajouter des métadonnées à votre notebook. Saisissez "parameters" dans la zone d'ajout de tag, puis appuyez sur Entrée. Plus tard, lors de la configuration de votre exécution, vous transmettrez les différentes valeurs (dans le cas présent, le modèle TensorFlow Hub) que vous souhaitez tester. Notez que vous devez saisir le mot "parameters" (et aucun autre mot), car c'est ainsi que l'exécuteur de notebooks sait quelles cellules collecter.

ajouter_tag

Vous pouvez fermer l'inspecteur de propriétés en cliquant de nouveau sur l'icône en forme de double roue dentée.

Créez une cellule et définissez tf_hub_uri, où vous utiliserez l'interpolation de chaîne pour remplacer le nom du modèle pré-entraîné que vous souhaitez utiliser comme modèle de base pour une exécution spécifique de votre notebook. Par défaut, vous avez défini feature_extractor_model sur "inception_v3", mais d'autres valeurs valides sont "resnet_v2_50" ou "mobilenet_v1_100_224". Vous pouvez consulter d'autres options dans le catalogue TensorFlow Hub.

tf_hub_uri = f"https://tfhub.dev/google/imagenet/{feature_extractor_model}/feature_vector/5"

Créez ensuite l'extracteur de caractéristiques à l'aide de hub.KerasLayer et transmettez le tf_hub_uri que vous avez défini plus haut. Configurez l'argument trainable=False pour figer les variables afin que l'entraînement ne modifie que le nouveau calque de classificateur que vous ajouterez en haut.

feature_extractor_layer = hub.KerasLayer(
    tf_hub_uri,
    trainable=False)

Pour compléter le modèle, encapsulez la couche de l'extracteur de caractéristiques dans un modèle tf.keras.Sequential, puis ajoutez une couche entièrement connectée à la classification. Le nombre d'unités dans cette tête de classification doit être égal au nombre de classes dans l'ensemble de données:

model = tf.keras.Sequential([
  feature_extractor_layer,
  tf.keras.layers.Dense(units=NUM_CLASSES)
])

Enfin, compilez et ajustez le modèle.

model.compile(
  optimizer=tf.keras.optimizers.Adam(),
  loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
  metrics=['acc'])

model.fit(train_data, validation_data=validation_data, epochs=20)

6. Exécuter le notebook

Cliquez sur l'icône Exécuteur en haut du notebook.

exécuteur

Étape 1: Configurez la tâche d'entraînement

Attribuez un nom à votre exécution et fournissez un bucket de stockage dans votre projet.

Exécuteur_configuration

Définissez le type de machine sur 4 CPUs, 15 Go RAM (4 processeurs et 15 Go de RAM).

Et ajoutez 1 GPU NVIDIA.

Définissez l'environnement sur TensorFlow Enterprise 2.6 (GPU).

Choisissez l'exécution unique.

Étape 2: Configurez les paramètres

Cliquez sur la liste déroulante OPTIONS AVANCÉES pour définir vos paramètres. Dans le champ, saisissez feature_extractor_model=resnet_v2_50. Cette valeur remplace inception_v3, la valeur par défaut définie pour ce paramètre dans le notebook, par resnet_v2_50.

options avancées

Vous pouvez laisser l'option Use default service account (Utiliser le compte de service par défaut) cochée.

Ensuite, cliquez sur SUBMIT (ENVOYER).

Étape 3: Examinez les résultats

L'onglet "Executions" (Exécutions) de l'interface utilisateur de la console vous permet de consulter l'état d'exécution du notebook.

exécutions_UI

Lorsque vous cliquez sur le nom de l'exécution, vous êtes redirigé vers la tâche d'entraînement Vertex AI dans laquelle votre notebook est exécuté.

sommet_entraînement

Une fois votre tâche terminée, vous pouvez afficher le notebook de sortie en cliquant sur VIEW Result (AFFICHER LE RÉSULTAT).

view_result (Résultat de la vue)

Dans le notebook de sortie, vous constaterez que la valeur de feature_extractor_model a été remplacée par la valeur que vous avez transmise au moment de l'exécution.

cellules param

🎉 Félicitations ! 🎉

Vous avez appris à utiliser Vertex AI Workbench pour:

  • Utiliser des paramètres dans un notebook
  • Configurer et lancer des exécutions de notebook depuis l'interface utilisateur de Vertex AI Workbench

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

7. Nettoyage

Par défaut, les notebooks gérés s'arrêtent automatiquement après 180 minutes d'inactivité. Si vous souhaitez arrêter manuellement l'instance, cliquez sur le bouton "Stop" (Arrêter) dans la section "Vertex AI Workbench" de la console. Si vous souhaitez supprimer entièrement le notebook, cliquez sur le bouton "Supprimer".

delete

Pour supprimer le bucket de stockage, utilisez le menu de navigation de Cloud Console, accédez à Storage et sélectionnez votre bucket, puis cliquez sur "Delete" (Supprimer) :

Supprimer l'espace de stockage