Addestramento di HuggingFace GPT2 su Cloud TPU (TF 2.x)


Se non hai dimestichezza con Cloud TPU, ti consigliamo di consultare la guida rapida per scoprire come creare una VM TPU.

Questo tutorial mostra come addestrare il modello GPT2 di HuggingFace su Cloud TPU.

Obiettivi

  • Crea una Cloud TPU
  • Installa le dipendenze
  • Esegui il job di addestramento

Costi

In questo documento utilizzi i seguenti componenti fatturabili di Google Cloud:

  • Compute Engine
  • Cloud TPU

Per generare una stima dei costi basata sull'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi utenti di Google Cloud potrebbero essere idonei per una prova gratuita.

Prima di iniziare

Prima di iniziare questo tutorial, controlla che il progetto Google Cloud sia configurato correttamente.

  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. Questa procedura dettagliata utilizza i componenti fatturabili di Google Cloud. Consulta la pagina Prezzi per Cloud TPU per stimare i costi. Assicurati di pulire che crei una volta terminato per evitare inutili addebiti.

Addestramento di HuggingFace a GPT2 con le Cloud TPU

  1. Apri una finestra di Cloud Shell.

    Apri Cloud Shell

  2. Crea una variabile di ambiente per l'ID progetto.

    export PROJECT_ID=your-project-id
  3. Configura Google Cloud CLI per utilizzare il tuo progetto Google Cloud in cui vuoi creare una Cloud TPU.

    gcloud config set project ${PROJECT_ID}

    La prima volta che esegui questo comando in una nuova VM Cloud Shell, Pagina Authorize Cloud Shell visualizzata. Fai clic su Authorize in in fondo alla pagina per consentire a gcloud di effettuare chiamate API Google Cloud con le tue credenziali Google Cloud.

  4. Creare un account di servizio per il progetto Cloud TPU.

    Gli account di servizio consentono al servizio Cloud TPU di accedere ad altri servizi Google Cloud i servizi di machine learning.

    $ gcloud beta services identity create --service tpu.googleapis.com --project $PROJECT_ID

    Il comando restituisce un account di servizio Cloud TPU con il seguente formato:

    service-PROJECT_NUMBER@cloud-tpu.iam.gserviceaccount.com
    

Crea una Cloud TPU

  1. Crea una VM Cloud TPU utilizzando il comando gcloud. Il comando seguente crea una TPU v4-8. Puoi anche creare un PodSlice TPU impostando il flag --accelerator-type su un tipo di PodSlice, ad esempio 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

    Descrizioni flag di comando

    zone
    La zona in cui prevedi di creare la tua Cloud TPU.
    accelerator-type
    Il tipo di acceleratore specifica la versione e le dimensioni della Cloud TPU che vuoi creare. Per ulteriori informazioni sui tipi di acceleratori supportati per ogni versione di TPU, vedi Versioni TPU.
    version
    La versione software di Cloud TPU.
  2. Connettiti alla VM TPU tramite SSH. Quando sei connesso alla VM, il prompt della shell cambia da username@projectname a username@vm-name:

    gcloud compute tpus tpu-vm ssh hf-gpt2 --zone=us-central2-b

Installa le dipendenze

  1. Clona il repository HuggingFace Transformers:

    (vm)$ cd /tmp
    (vm)$ git clone https://github.com/huggingface/transformers.git
    (vm)$ cd transformers
  2. Installa le dipendenze:

    (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. Crea la directory temporanea:

    (vm)$ mkdir /tmp/gpt2-wikitext
  4. Quando crei la TPU, se imposti il parametro --version su una versione che termina con -pjrt, imposta le seguenti variabili di ambiente per attivare il runtime PJRT:

      (vm)$ export NEXT_PLUGGABLE_DEVICE_USE_C_API=true
      (vm)$ export TF_PLUGGABLE_DEVICE_LIBRARY_PATH=/lib/libtpu.so

Esegui script di addestramento

(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

Descrizioni flag di comando

model_name_or_path
Il nome del modello da addestrare.
max_train_samples
Il numero massimo di campioni da utilizzare per l'addestramento.
max_eval_samples
Il numero massimo di campioni da utilizzare per la valutazione.
num_train_epochs
Il numero di epoche per addestrare il modello.
output_dir
La directory di output per lo script di addestramento.
dataset_name
Il nome del set di dati da utilizzare.
dataset_config_name
Il nome della configurazione del set di dati

Al termine dell'addestramento, viene visualizzato un messaggio simile al seguente:

  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
  

Esegui la pulizia

  1. Disconnettiti dall'istanza VM TPU:

    (vm)$ exit

    Il tuo prompt dovrebbe ora essere username@projectname, a indicare che ti trovi in Cloud Shell.

  2. Elimina la risorsa TPU.

    $ gcloud compute tpus tpu-vm delete hf-gpt2 \
    --zone=us-central2-b

Passaggi successivi

Prova uno degli altri modelli di riferimento supportati.