Si vous ne connaissez pas Cloud TPU, nous vous recommandons de consulter la guide de démarrage rapide créer une VM TPU.
Ce tutoriel explique comment entraîner le modèle GPT2 de HuggingFace sur Cloud TPU.
Objectifs
- Créer une instance Cloud TPU
- Installer des dépendances
- Exécuter la tâche d'entraînement
Coûts
Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :
- Compute Engine
- Cloud TPU
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 que vous avez créées lorsque vous avez terminé, afin d'éviter des frais inutiles.
Entraîner GPT2 de HuggingFace à l'aide de Cloud TPU
Ouvrez une fenêtre Cloud Shell.
Créez une variable d'environnement pour l'ID de votre projet.
export PROJECT_ID=your-project-id
Configurer la Google Cloud CLI pour utiliser votre projet Google Cloud où vous voulez 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, La page
Authorize Cloud Shell
s'affiche. Cliquez surAuthorize
au niveau bas de la page pour permettre àgcloud
d'effectuer des appels d'API Google Cloud avec vos identifiants Google Cloud.Créez un compte de service pour le projet Cloud TPU.
Les comptes de service permettent au service Cloud TPU d'accéder à d'autres services.
$ 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éer une instance Cloud TPU
Créez une VM Cloud TPU à l'aide de la commande
gcloud
. La commande suivante crée un TPUv4-8
. Vous pouvez également créer une tranche de pod TPU en définissant le paramètre L'option--accelerator-type
à un type de tranche de pod, par exemplev4-32
.$ gcloud compute tpus tpu-vm create hf-gpt2 \ --zone=us-central2-b \ --accelerator-type=v4-8 \ --version=tpu-vm-tf-2.17.0-pjrt
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 à la VM TPU à l'aide de SSH. Lorsque vous êtes connecté à la VM, l'invite de l'interface système passe de
username@projectname
àusername@vm-name
:gcloud compute tpus tpu-vm ssh hf-gpt2 --zone=us-central2-b
Installer des dépendances
Clonez le dépôt HuggingFace Transformers:
(vm)$ cd /tmp (vm)$ git clone https://github.com/huggingface/transformers.git (vm)$ cd transformers
Installez les dépendances :
(vm)$ pip install . (vm)$ pip install -r examples/tensorflow/_tests_requirements.txt (vm)$ cd /tmp/transformers/examples/tensorflow/language-modeling (vm)$ pip install -r requirements.txt
Créez un répertoire temporaire:
(vm)$ mkdir /tmp/gpt2-wikitext
Lors de la création de votre TPU, si vous définissez le paramètre
--version
sur une version se terminant par-pjrt
, définissez les variables d'environnement suivantes pour activer l'environnement d'exécution PJRT:(vm)$ export NEXT_PLUGGABLE_DEVICE_USE_C_API=true (vm)$ export TF_PLUGGABLE_DEVICE_LIBRARY_PATH=/lib/libtpu.so
Exécuter le script d'entraînement
(vm)$ python3 run_clm.py \
--model_name_or_path distilgpt2 \
--max_train_samples 1000 \
--max_eval_samples 100 \
--num_train_epochs 1 \
--output_dir /tmp/gpt2-wikitext \
--dataset_name wikitext \
--dataset_config_name wikitext-103-raw-v1
Description des options de commande
model_name_or_path
- Nom du modèle à entraîner.
max_train_samples
- Nombre maximal d'échantillons à utiliser pour l'entraînement.
max_eval_samples
- Nombre maximal d'échantillons à utiliser pour l'évaluation.
num_train_epochs
- Nombre d'époques d'entraînement du modèle.
output_dir
- Répertoire de sortie du script d'entraînement.
dataset_name
- Nom de l'ensemble de données à utiliser.
dataset_config_name
- Nom de la configuration de l'ensemble de données
Une fois l'entraînement terminé, un message semblable au suivant s'affiche:
125/125 [============================] - ETA: 0s - loss: 3.61762023-07-07 21:38:17.902850: W tensorflow/core/framework/dataset.cc:956] Input of GeneratorDatasetOp::Dataset will not be optimized because the dataset does not implement the AsGraphDefInternal() method needed to apply optimizations. 125/125 [============================] - 763s 6s/step - loss: 3.6176 - val_loss: 3.4233 Configuration saved in /tmp/gpt2-wikitext/config.json Configuration saved in /tmp/gpt2-wikitext/generation_config.json Model weights saved in /tmp/gpt2-wikitext/tf_model.h5 D0707 21:38:45.640973681 12027 init.cc:191] grpc_shutdown starts clean-up now
Effectuer un nettoyage
Déconnectez-vous de l'instance de VM TPU:
(vm)$ exit
Votre invite devrait maintenant être
username@projectname
, indiquant que vous êtes dans Cloud Shell.Supprimez la ressource TPU.
$ gcloud compute tpus tpu-vm delete hf-gpt2 \ --zone=us-central2-b
Étape suivante
Essayez l'un des autres modèles de référence compatibles.