Ce tutoriel explique comment entraîner des modèles de classement DLRM et DCN v2 pouvant être utilisés pour des tâches telles que la prédiction du taux de clics (CTR). Consultez la remarque dans la section Configurer pour exécuter le modèle DLRM ou DCN pour savoir comment définir des paramètres afin d'entraîner un modèle de classement DLRM ou DCN v2.
Les entrées du modèle sont des caractéristiques numériques et catégorielles, et la sortie est un scalaire (par exemple, une probabilité de clic). Le modèle peut être entraîné et évalué sur Cloud TPU. Les modèles de classement profond nécessitent à la fois une utilisation intensive de la mémoire (pour l'intégration de tables/recherches) et une utilisation intensive pour les réseaux profonds (MLP). Les TPU sont conçus pour les deux.
Le modèle utilise une couche d'intégration TPU pour les caractéristiques catégorielles. La couche d'intégration de représentation vectorielle continue TPU accepte les grandes tables d'intégration avec recherche rapide. La taille des tables d'intégration évolue de manière linéaire avec celle d'un pod TPU. Les TPU v3-8 acceptent les tables de représentation vectorielle continue jusqu'à 90 Go, jusqu'à 5,6 To pour un pod v3-512 et jusqu'à 22,4 To pour un pod TPU v3-2048.
Le code du modèle se trouve dans la bibliothèque TensorFlow Recommenders, tandis que le pipeline d'entrée, la configuration et la boucle d'entraînement sont décrits dans le jardin de modèles TensorFlow.
Objectifs
- Configurer l'environnement d'entraînement
- Exécuter la tâche d'entraînement à l'aide de données synthétiques
- Vérifier les résultats
Coûts
Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :
- Compute Engine
- Cloud TPU
- Cloud Storage
Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.
Avant de commencer
Avant de commencer ce tutoriel, vérifiez que votre projet Google Cloud est correctement configuré.
- Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
-
Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.
-
Vérifiez que la facturation est activée pour votre projet Google Cloud. Découvrez comment vérifier si la facturation est activée sur un projet.
-
Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.
-
Vérifiez que la facturation est activée pour votre projet Google Cloud. Découvrez comment vérifier si la facturation est activée sur un projet.
Ce tutoriel utilise des composants facturables de Google Cloud. Consultez la grille tarifaire de Cloud TPU pour estimer vos coûts. Veillez à nettoyer les ressources que vous avez créées lorsque vous avez terminé, afin d'éviter des frais inutiles.
Configurer vos ressources
Cette section fournit des informations sur la configuration des buckets Cloud Storage, des VM et des ressources Cloud TPU utilisées par ce tutoriel.
Ouvrez une fenêtre Cloud Shell.
Créez une variable pour l'ID de votre projet.
export PROJECT_ID=project-id
Configurez Google Cloud CLI pour utiliser le projet dans lequel vous souhaitez créer Cloud TPU.
gcloud config set project ${PROJECT_ID}
La première fois que vous exécutez cette commande dans une nouvelle VM Cloud Shell, une page
Authorize Cloud Shell
s'affiche. Cliquez surAuthorize
en bas de la page pour autorisergcloud
à effectuer des appels d'API avec vos identifiants.Créez un compte de service pour le projet Cloud TPU.
gcloud beta services identity create --service tpu.googleapis.com --project $PROJECT_ID
La commande renvoie un compte de service Cloud TPU au format suivant :
service-PROJECT_NUMBER@cloud-tpu.iam.gserviceaccount.com
Créez un bucket Cloud Storage à l'aide de la commande suivante, où l'option
-l
spécifie la région dans laquelle le bucket doit être créé. Pour en savoir plus sur les zones et les régions, consultez la page Types et zones :gsutil mb -p ${PROJECT_ID} -c standard -l europe-west4 gs://bucket-name
Ce bucket Cloud Storage stocke les données que vous utilisez pour entraîner votre modèle, ainsi que les résultats de l'entraînement. L'outil
gcloud compute tpus execution-groups
utilisé dans ce tutoriel définit les autorisations par défaut pour le compte de service Cloud TPU que vous avez configuré à l'étape précédente. Si vous souhaitez utiliser des autorisations plus précises, vérifiez les autorisations de niveau d'accès.L'emplacement du bucket doit être situé dans la même région que votre Compute Engine (VM) et votre nœud Cloud TPU.
Lancez une VM Compute Engine et Cloud TPU à l'aide de la commande
gcloud
. La commande à utiliser varie selon que vous utilisez une VM TPU ou un nœud TPU. Pour en savoir plus sur les deux architectures de VM, consultez la page Architecture du système. Pour en savoir plus sur la commandegcloud
, consultez la documentation de référence de gcloud.VM TPU
$ gcloud compute tpus tpu-vm create dlrm-dcn-tutorial \ --zone=europe-west4-a \ --accelerator-type=v3-8 \ --version=tpu-vm-tf-2.12.0
Nœud TPU
$ gcloud compute tpus execution-groups create \ --name=dlrm-dcn-tutorial \ --zone=europe-west4-a \ --disk-size=300 \ --machine-type=n1-standard-8 \ --tf-version=2.12.0
Description des options de commande
vm-only
- Pour créer une VM uniquement. Par défaut, la commande
gcloud compute tpus execution-groups
crée une VM et un Cloud TPU. name
- Nom du Cloud TPU à créer.
zone
- Zone dans laquelle vous prévoyez de créer votre Cloud TPU.
disk-size
- Taille du disque dur en Go de la VM créée par la commande
gcloud compute tpus execution-groups
. machine-type
- Type de machine de la VM Compute Engine à créer.
tf-version
- La version de TensorFlow
ctpu
est installée sur la VM.
Si vous n'êtes pas automatiquement connecté à l'instance Compute Engine, connectez-vous en exécutant la commande
ssh
suivante. Lorsque vous êtes connecté à la VM, votre invite d'interface système passe deusername@vm-name
àusername@projectname
:VM TPU
gcloud compute tpus tpu-vm ssh dlrm-dcn-tutorial --zone=europe-west4-a
Nœud TPU
gcloud compute ssh dlrm-dcn-tutorial --zone=europe-west4-a
À mesure que vous appliquez ces instructions, exécutez chaque commande commençant par
(vm)$
dans la fenêtre de session de la VM.
Définir des variables de bucket Cloud Storage
Configurez les variables d'environnement suivantes en remplaçant bucket-name par le nom de votre bucket Cloud Storage :
(vm)$ export STORAGE_BUCKET=gs://bucket-name (vm)$ export PYTHONPATH="/usr/share/tpu/models/:${PYTHONPATH}" (vm)$ export EXPERIMENT_NAME=dlrm-exp
Définissez une variable d'environnement pour le nom du TPU.
VM TPU
(vm)$ export TPU_NAME=local
Nœud TPU
(vm)$ export TPU_NAME=dlrm-dcn-tutorial
L'application d'entraînement s'attend à ce que vos données d'entraînement soient accessibles dans Cloud Storage. Elle exploite également le bucket Cloud Storage pour stocker des points de contrôle lors de l'entraînement.
Configurer pour exécuter le modèle DLRM ou DCN avec des données synthétiques
Le modèle peut être entraîné sur différents ensembles de données. Les plus couramment utilisés sont Criteo Terabyte et Criteo Kaggle.
Ce tutoriel entraîne sur des données synthétiques en définissant l'option use_synthetic_data=True
.
Cet ensemble de données synthétique n'est utile que pour comprendre comment utiliser un Cloud TPU et valider les performances de bout en bout. La précision et le modèle enregistré ne sont pas représentatifs.
Consultez les sites Web Criteo Terabyte et Criteo Kaggle pour savoir comment télécharger et prétraiter ces ensembles de données.
Installez les packages requis.
(vm)$ pip3 install tensorflow-recommenders (vm)$ pip3 install -r /usr/share/tpu/models/official/requirements.txt
Accédez au répertoire du script.
VM TPU
(vm)$ cd /usr/share/tpu/models/official/recommendation/ranking
Nœud TPU
(vm)$ cd /usr/share/models/official/recommendation/ranking
Exécutez le script d'entraînement. Cette méthode utilise un ensemble de données factice de type Criteo pour entraîner le modèle DLRM. L'entraînement dure environ 20 minutes.
export EMBEDDING_DIM=32 python3 train.py --mode=train_and_eval \ --model_dir=${STORAGE_BUCKET}/model_dirs/${EXPERIMENT_NAME} --params_override=" runtime: distribution_strategy: 'tpu' task: use_synthetic_data: true train_data: input_path: '${DATA_DIR}/train/*' global_batch_size: 16384 validation_data: input_path: '${DATA_DIR}/eval/*' global_batch_size: 16384 model: num_dense_features: 13 bottom_mlp: [512,256,${EMBEDDING_DIM}] embedding_dim: ${EMBEDDING_DIM} top_mlp: [1024,1024,512,256,1] interaction: 'dot' vocab_sizes: [39884406, 39043, 17289, 7420, 20263, 3, 7120, 1543, 63, 38532951, 2953546, 403346, 10, 2208, 11938, 155, 4, 976, 14, 39979771, 25641295, 39664984, 585935, 12972, 108, 36] trainer: use_orbit: false validation_interval: 1000 checkpoint_interval: 1000 validation_steps: 500 train_steps: 1000 steps_per_loop: 1000 "
Cet entraînement dure environ 10 minutes sur un TPU v3-8. Une fois l'opération terminée, des messages semblables à ce qui suit s'affichent :
I0621 21:32:58.519792 139675269142336 tpu_embedding_v2_utils.py:907] Done with log of TPUEmbeddingConfiguration. I0621 21:32:58.540874 139675269142336 tpu_embedding_v2.py:389] Done initializing TPU Embedding engine. 1000/1000 [==============================] - 335s 335ms/step - auc: 0.7360 - accuracy: 0.6709 - prediction_mean: 0.4984 - label_mean: 0.4976 - loss: 0.0734 - regularization_loss: 0.0000e+00 - total_loss: 0.0734 - val_auc: 0.7403 - val_accuracy: 0.6745 - val_prediction_mean: 0.5065 - val_label_mean: 0.4976 - val_loss: 0.0749 - val_regularization_loss: 0.0000e+00 - val_total_loss: 0.0749 Model: "ranking" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= tpu_embedding (TPUEmbedding) multiple 1 _________________________________________________________________ mlp (MLP) multiple 154944 _________________________________________________________________ mlp_1 (MLP) multiple 2131969 _________________________________________________________________ dot_interaction (DotInteract multiple 0 _________________________________________________________________ ranking_1 (Ranking) multiple 0 ================================================================= Total params: 2,286,914 Trainable params: 2,286,914 Non-trainable params: 0 _________________________________________________________________ I0621 21:43:54.977140 139675269142336 train.py:177] Train history: {'auc': [0.7359596490859985], 'accuracy': [0.67094486951828], 'prediction_mean': [0.4983849823474884], 'label_mean': [0.4975697994232178], 'loss': [0.07338511198759079], 'regularization_loss': [0], 'total_loss': [0.07338511198759079], 'val_auc': [0.7402724623680115], 'val_accuracy': [0.6744520664215088], 'val_prediction_mean': [0.5064718723297119], 'val_label_mean': [0.4975748658180237], 'val_loss': [0.07486172765493393], 'val_regularization_loss': [0], 'val_total_loss': [0.07486172765493393]}
Effectuer un nettoyage
Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles.
Déconnectez-vous de l'instance Compute Engine, si vous ne l'avez pas déjà fait :
(vm)$ exit
Votre invite devrait maintenant être
username@projectname
, indiquant que vous êtes dans Cloud Shell.Supprimez vos ressources Cloud TPU et Compute Engine. La commande à utiliser pour supprimer vos ressources varie selon que vous utilisez des VM TPU ou des nœuds TPU. Pour en savoir plus, consultez la page Architecture du système.
VM TPU
$ gcloud compute tpus tpu-vm delete dlrm-dcn-tutorial \ --zone=europe-west4-a
Nœud TPU
$ gcloud compute tpus execution-groups delete dlrm-dcn-tutorial \ --zone=europe-west4-a
Vérifiez que les ressources ont été supprimées en exécutant la commande
gcloud compute tpus execution-groups list
. La suppression peut prendre plusieurs minutes. La sortie de la commande suivante ne doit inclure aucune des ressources créées dans ce tutoriel :VM TPU
$ gcloud compute tpus tpu-vm list --zone=europe-west4-a
Nœud TPU
$ gcloud compute tpus execution-groups list --zone=europe-west4-a
Supprimez votre bucket Cloud Storage à l'aide de
gsutil
, comme indiqué ci-dessous. Remplacez bucket-name par le nom de votre bucket Cloud Storage.$ gsutil rm -r gs://bucket-name
Étapes suivantes
Les tutoriels TensorFlow Cloud TPU permettent généralement d'entraîner le modèle à l'aide d'un exemple d'ensemble de données. Les résultats de cet entraînement ne sont pas utilisables pour l'inférence. Pour utiliser un modèle d'inférence, vous pouvez entraîner les données sur un ensemble de données public ou sur votre propre ensemble de données. Les modèles TensorFlow entraînés sur des Cloud TPU nécessitent généralement des ensembles de données au format TFRecord.
Vous pouvez utiliser l'exemple d'outil de conversion d'ensemble de données pour convertir un ensemble de données de classification d'images au format TFRecord. Si vous n'utilisez pas de modèle de classification d'images, vous devez convertir vous-même votre ensemble de données au format TFRecord. Pour en savoir plus, consultez la page TFRecord et tf.Example.
Réglages d'hyperparamètres
Pour améliorer les performances du modèle sur votre ensemble de données, vous pouvez régler ses hyperparamètres. Vous trouverez des informations sur les hyperparamètres communs à tous les modèles compatibles avec des TPU sur GitHub. Des informations sur les hyperparamètres spécifiques aux modèles sont disponibles dans le code source de chaque modèle. Pour en savoir plus sur ces réglages, consultez les pages Présentation des réglages d'hyperparamètres, Utiliser le service de réglage d'hyperparamètres et Régler les hyperparamètres.
Inférence
Une fois votre modèle entraîné, vous pouvez l'utiliser pour l'inférence (également appelée prédiction). AI Platform est une solution cloud permettant de développer, d'entraîner et de déployer des modèles de machine learning. Une fois un modèle déployé, vous pouvez utiliser le service AI Platform Prediction.