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 note dans Configurez le modèle pour exécuter le modèle DLRM ou DCN pour découvrir comment définir les paramètres. pour 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é 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 et de 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. Jusqu'à 90 Go de données de représentations vectorielles continues utilisés pour les TPU v3-8, 5,6 To pour les pods v3-512 et 22,4 To pour les pods 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 TensorFlow Model Garden :
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é.
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
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 TPU que vous créez vous avez terminé avec elles pour é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 la Google Cloud CLI pour utiliser le projet dans lequel vous souhaitez créer Cloud TPU.
Pour en savoir plus sur la commande
gcloud
, consultez la documentation de référence de Google Cloud CLI.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
--location
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 :gcloud storage buckets create gs://bucket-name --project=${PROJECT_ID} --location=europe-west4
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 tpu-vm
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
.$ gcloud compute tpus tpu-vm create dlrm-dcn-tutorial \ --zone=europe-west4-a \ --accelerator-type=v3-8 \ --version=tpu-vm-tf-2.17.0-se
Description des options de commande
zone
- Zone dans laquelle vous prévoyez de créer votre Cloud TPU.
accelerator-type
- Le type d'accélérateur spécifie la version et la taille de la ressource Cloud TPU que vous souhaitez créer. Pour en savoir plus sur les types d'accélérateurs compatibles avec chaque version de TPU, consultez Versions de TPU.
version
- Version logicielle de Cloud TPU.
Connectez-vous à l'instance Compute Engine à l'aide de SSH. Lorsque vous êtes connecté à la VM, votre invite de l'interface système passe de
username@projectname
àusername@vm-name
:gcloud compute tpus tpu-vm ssh dlrm-dcn-tutorial --zone=europe-west4-a
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)$ export TPU_NAME=local
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 les chiffres et le modèle enregistré ne seront pas significatifs.
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)$ cd /usr/share/tpu/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
, ce qui indique que vous êtes dans Cloud Shell.Supprimez vos ressources Cloud TPU.
$ gcloud compute tpus tpu-vm 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 tpu-vm list
. La suppression peut prendre plusieurs minutes. Le résultat de la commande suivante ne doit inclure aucune des ressources créées dans ce tutoriel:$ gcloud compute tpus tpu-vm list --zone=europe-west4-a
Supprimez votre bucket Cloud Storage à l'aide de gcloud CLI. Remplacez bucket-name par le nom de votre bucket Cloud Storage.
$ gcloud storage rm gs://bucket-name --recursive
Étape suivante
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. À utiliser un modèle pour l'inférence, vous pouvez entraîner les données sur un modèle public ensemble de données ou votre propre jeu 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'outil de conversion des ensembles de données exemple pour convertir une image de classification 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 TFRecord et tf.Example.
Réglages d'hyperparamètres
Pour améliorer les performances du modèle avec votre ensemble de données, vous pouvez régler hyperparamètres. Vous trouverez des informations sur les hyperparamètres communs à tous les modèles compatibles avec des TPU sur GitHub. Pour en savoir plus sur les hyperparamètres propres au modèle, consultez la source de code pour chaque du modèle. Pour en savoir plus sur ces réglages, consultez les pages Présentation des réglages d'hyperparamètres et Régler les hyperparamètres.
Inférence
Une fois que vous avez entraîné votre modèle, vous pouvez l'utiliser pour l'inférence (également appelée prédiction). Vous pouvez utiliser l'outil de conversion d'inférence Cloud TPU pour préparer et optimiser un modèle TensorFlow pour l'inférence sur Cloud TPU v5e. Pour en savoir plus sur l'inférence sur Cloud TPU v5e, consultez la présentation de l'inférence Cloud TPU v5e.