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


Si vous ne connaissez pas Cloud TPU, nous vous recommandons de consulter le quickstart pour apprendre à créer une VM TPU.

Ce tutoriel vous explique comment entraîner le modèle HuggingFace GPT2 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. 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.
  2. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  3. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  4. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  5. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  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 HuggingFace GPT2 à 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. Configurez Google Cloud CLI pour utiliser le projet Google Cloud 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 sur Authorize en bas de la page pour autoriser gcloud à effectuer des appels d'API Google Cloud avec vos identifiants.

  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 Google Cloud.

    $ 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 l'option --accelerator-type sur 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.16.1-pjrt
    

    Description des options de commande

    zone
    Zone dans laquelle vous prévoyez de créer la ressource 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 la section Versions de TPU.
    version
    Version du logiciel Cloud TPU.
  2. Connectez-vous à la VM Cloud TPU en exécutant la commande ssh suivante.

    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
    

Étapes suivantes

Essayez l'un des autres modèles de référence compatibles.