Entraîner HuggingFace GPT2 sur Cloud TPU (TF 2.x)


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. Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit.

Avant de commencer

Avant de commencer ce tutoriel, vérifiez que votre projet Google Cloud est correctement configuré.

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. 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

  1. Ouvrez une fenêtre Cloud Shell.

    Ouvrir Cloud Shell

  2. Créez une variable d'environnement pour l'ID de votre projet.

    export PROJECT_ID=your-project-id
    
  3. 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 sur Authorize au niveau bas de la page pour permettre à gcloud d'effectuer des appels d'API Google Cloud avec vos identifiants Google Cloud.

  4. 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

  1. Créez une VM Cloud TPU à l'aide de la commande gcloud. La commande suivante crée un TPU v4-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 exemple v4-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.
  2. 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

  1. Clonez le dépôt HuggingFace Transformers:

    (vm)$ cd /tmp
    (vm)$ git clone https://github.com/huggingface/transformers.git
    (vm)$ cd transformers
    
  2. 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
    
  3. Créez un répertoire temporaire:

    (vm)$ mkdir /tmp/gpt2-wikitext
    
  4. 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

  1. 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.

  2. 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.