Ce tutoriel vous explique comment entraîner le modèle BERT (Bidirectional Encoder Representations from Transformers) sur Cloud TPU.
BERT est une méthode permettant de pré-entraîner des représentations du langage. Le pré-entraînement fait référence à la façon dont le modèle BERT est entraîné pour la première fois à partir d'une importante source de texte, telle que Wikipédia. Vous pouvez ensuite appliquer les résultats de l'entraînement à d'autres tâches de traitement du langage naturel, tels que des systèmes de questions-réponses et l'analyse des sentiments. BERT et Cloud TPU vous permettent d'entraîner de nombreux modèles de traitement du langage naturel en environ 30 minutes.
Pour en savoir plus sur BERT, consultez les ressources suivantes :
- Open Sourcing BERT: State-of-the-Art Pre-training for Natural Language Processing (BERT en Open source : pré-entraînement de pointe pour le traitement du langage naturel)
- BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding (BERT : pré-entraînement de transformateurs bidirectionnels profonds pour la compréhension du langage)
Objectifs
- Créer un bucket Cloud Storage pour stocker votre ensemble de données et la sortie du modèle
- Cloner le dépôt BERT et d'autres fichiers requis
- Exécuter la tâche d'entraînement
- Vérifier les résultats
Coûts
Ce tutoriel utilise 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
Cette section fournit des informations sur la configuration du bucket Cloud Storage et d'une VM Compute Engine.
Ouvrez une fenêtre Cloud Shell.
Créez une variable pour l'ID de votre projet.
export PROJECT_ID=project-id
Configurez la CLI Google Cloud pour utiliser le projet dans lequel vous souhaitez créer un 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 permettre àgcloud
d'effectuer des appels d'API GCP 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 :
gsutil mb -p ${PROJECT_ID} -c standard -l us-central1 -b on 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.
Pour que Cloud TPU puisse lire et écrire dans le bucket de stockage, le compte de service de votre projet doit disposer d'autorisations de lecture/écriture ou d'administrateur. Consultez la section sur les buckets de stockage pour savoir comment afficher et définir ces autorisations.
Lancez une VM Compute Engine et Cloud TPU à l'aide de la commande
gcloud compute tpus execution-groups
.$ gcloud compute tpus execution-groups create \ --name=bert-tutorial \ --zone=us-central1-b \ --tf-version=1.15.5 \ --machine-type=n1-standard-8 \ --accelerator-type=v3-8
Description des options de commande
name
- Nom du Cloud TPU à créer.
zone
- Zone dans laquelle vous prévoyez de créer votre Cloud TPU.
tf-version
- Version de TensorFlow
gcloud
installée sur la VM. machine-type
- Type de machine de la VM Compute Engine à créer.
accelerator-type
- Type du Cloud TPU à créer.
Pour en savoir plus sur la commande
gcloud
, consultez la documentation de référence de gcloud.La configuration que vous avez spécifiée apparaît. Saisissez y pour approuver ou n pour annuler.
Une fois l'exécution de la commande
gcloud
terminée, vérifiez que l'invite de l'interface système est passée deusername@project
àusername@vm-name
. Cette modification indique que vous êtes maintenant connecté à votre VM Compute Engine.gcloud compute ssh bert-tutorial --zone=us-central1-b
À 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 certaines variables d'environnement
(vm)$ export STORAGE_BUCKET=gs://bucket-name
(vm)$ export TPU_NAME=bert-tutorial (vm)$ export PYTHONPATH="${PYTHONPATH}:/usr/share/tpu/models" (vm)$ export BERT_BASE_DIR=gs://cloud-tpu-checkpoints/bert/uncased_L-12_H-768_A-12 (vm)$ export GLUE_DIR=$HOME/glue_data (vm)$ export TASK_NAME=MRPC
Cloner le dépôt BERT
Clonez le dépôt BERT à partir de votre machine virtuelle (VM) Compute Engine.
(vm)$ git clone https://github.com/google-research/bert
Télécharger download_glue_data.py
Ce tutoriel utilise l'analyse comparative GLUE (General Language Understanding Evaluation, évaluation de la compréhension générale du langage) pour évaluer et analyser les performances du modèle. Pour utiliser ce benchmark, téléchargez le script download_glue_data.py
à l'aide de la commande git clone
suivante :
(vm)$ git clone https://gist.github.com/7f702beb69199612a039004f42c9982e.git download_glue_data
Télécharger les données GLUE
Exécutez maintenant le script download_glue_data.py
sur votre VM Compute Engine.
(vm)$ python3 download_glue_data/download_glue_data.py --data_dir $HOME/glue_data --tasks ${TASK_NAME}
Entraîner le modèle
Exécutez la commande suivante depuis votre VM Compute Engine :
python3 ./bert/run_classifier.py \ --task_name=${TASK_NAME} \ --do_train=true \ --do_eval=true \ --data_dir=${GLUE_DIR}/${TASK_NAME} \ --vocab_file=${BERT_BASE_DIR}/vocab.txt \ --bert_config_file=${BERT_BASE_DIR}/bert_config.json \ --init_checkpoint=${BERT_BASE_DIR}/bert_model.ckpt \ --max_seq_length=128 \ --train_batch_size=32 \ --learning_rate=2e-5 \ --num_train_epochs=3.0 \ --output_dir=${STORAGE_BUCKET}/${TASK_NAME}-output/ \ --use_tpu=True \ --tpu_name=${TPU_NAME}
Description des options de commande
task_name
- Nom de la tâche. Dans ce tutoriel, nous utilisons la tâche Microsoft Research Paraphrase Corpus (MSRPC).
do_train
- Effectuer l'entraînement du modèle.
do_eval
- Effectuer l'évaluation du modèle.
data_dir
- Chemin d'accès Cloud Storage où les données d'entraînement sont stockées.
vocab_file
- Fichier de vocabulaire BERT.
bert_config_file
- Fichier de configuration BERT.
init_checkpoint
- Chemin d'accès au fichier JSON contenant le point de contrôle initial du modèle BERT pré-entraîné.
max_seq_length
- Longueur maximale de la séquence de texte. BERT limite la longueur maximale d'une séquence de texte tokenisée à 512. Vous pouvez définir une longueur de séquence inférieure ou égale à cette valeur.
train_batch_size
- Taille du lot d'entraînement.
learning_rate
- Taux d'apprentissage.
num_train_epochs
- Nombre d'étapes d'entraînement du modèle.
output_dir
- Répertoire de sortie du script d'entraînement.
use_tpu
- Définissez la valeur sur
true
pour effectuer l'entraînement sur un Cloud TPU. tpu_name
- Nom de la ressource Cloud TPU à utiliser pour l'entraînement.
Vérifier les résultats
L'entraînement ne devrait pas prendre plus de cinq minutes. Une fois l'entraînement terminé, vous devriez obtenir les résultats suivants :
I1109 21:55:34.984220 139985090225920 run_classifier.py:923] ***** Eval results ***** INFO:tensorflow: eval_accuracy = 0.8455882 I1109 21:55:34.984345 139985090225920 run_classifier.py:925] eval_accuracy = 0.8455882 INFO:tensorflow: eval_loss = 0.77791333 I1109 21:55:34.984572 139985090225920 run_classifier.py:925] eval_loss = 0.77791333 INFO:tensorflow: global_step = 343 I1109 21:55:34.984693 139985090225920 run_classifier.py:925] global_step = 343 INFO:tensorflow: loss = 0.88203496 I1109 21:55:34.984774 139985090225920 run_classifier.py:925] loss = 0.88203496
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 la VM Compute Engine :
(vm)$ exit
Votre invite devrait maintenant être
user@projectname
, indiquant que vous êtes dans Cloud Shell.Dans Cloud Shell, utilisez la commande
gcloud compute tpus execution-groups
présentée ci-dessous pour supprimer votre VM Compute Engine et la ressource Cloud TPU.$ gcloud compute tpus execution-groups delete bert-tutorial \ --zone=us-central1-b
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. Une réponse semblable à la suivante indique que vos instances ont bien été supprimées.$ gcloud compute tpus execution-groups list \ --zone=us-central1-b
NAME STATUS
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 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.
- En savoir plus sur
gcloud
, y compris sur la façon de l'installer sur un ordinateur local. - Testez d'autres exemples TPU.
- Découvrez les outils TPU dans TensorBoard.