Se non hai dimestichezza con Cloud TPU, ti consigliamo vivamente di consultare la guida rapida per scoprire come creare una VM TPU.
Questo tutorial ti mostra come addestrare un modello del trasformatore su Cloud TPU. Il trasformatore è un'architettura di rete neurale che risolve i problemi delle sequenze in sequenza utilizzando meccanismi di attenzione. A differenza dei tradizionali modelli seq2seq neurali, il trasformatore non prevede connessioni ricorrenti. Il meccanismo di attenzione impara le dipendenze tra i token in due sequenze. Poiché la ponderazione dell'attenzione si applica a tutti i token nelle sequenze, il modello Transformer è in grado di acquisire facilmente le dipendenze a lunga distanza.
La struttura complessiva del trasformatore segue il pattern standard del codificatore-decoder. Il codificatore utilizza l'autoattenzione per calcolare una rappresentazione della sequenza di input. Il decodificatore genera la sequenza di output un token alla volta, considerando l'output del codificatore e i token di output del decodificatore precedenti.
Il modello applica anche gli incorporamenti sui token di input e output e aggiunge una codifica della posizione costante. La codifica posizionale aggiunge informazioni sulla posizione di ogni token.
Obiettivi
- Crea un bucket Cloud Storage per conservare l'output del set di dati e del modello.
- Scarica e pre-elabora il set di dati utilizzato per addestrare il modello.
- Eseguire il job di addestramento.
- Verifica i risultati di output.
Costi
Questo tutorial utilizza i seguenti componenti fatturabili di Google Cloud:
- Compute Engine
- Cloud TPU
Per generare una stima dei costi in base all'utilizzo previsto,
utilizza il Calcolatore prezzi.
Prima di iniziare
Prima di iniziare questo tutorial, verifica che il tuo progetto Google Cloud sia configurato correttamente.
- Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
-
Nella pagina del selettore dei progetti in Google Cloud Console, seleziona o crea un progetto Google Cloud.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata su un progetto.
-
Nella pagina del selettore dei progetti in Google Cloud Console, seleziona o crea un progetto Google Cloud.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata su un progetto.
Questa procedura dettagliata utilizza i componenti fatturabili di Google Cloud. Controlla la pagina dei prezzi di Cloud TPU per una stima dei costi. Al termine, pulisci le risorse che crei per evitare addebiti inutili.
Esegui l'addestramento con un singolo dispositivo Cloud TPU
Questa sezione fornisce informazioni sulla configurazione di un bucket Cloud Storage e su una VM TPU per l'addestramento per un singolo dispositivo.
Apri una finestra di Cloud Shell.
Crea una variabile di ambiente per il tuo ID progetto.
export PROJECT_ID=project-id
Configurare Google Cloud CLI in modo da 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 di Cloud Shell, viene visualizzata una pagina
Authorize Cloud Shell
. Fai clic suAuthorize
in fondo alla pagina per consentire agcloud
di effettuare chiamate API Google Cloud con le tue credenziali.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.
$ 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 un bucket Cloud Storage utilizzando il comando seguente:
$ gsutil mb -p ${PROJECT_ID} -c standard -l us-central2 gs://bucket-name
Questo bucket Cloud Storage archivia i dati che utilizzi per addestrare il modello e i risultati dell'addestramento. Il comando
gcloud
utilizzato in questo tutorial per configurare la TPU configura anche le autorizzazioni predefinite per l'account di servizio Cloud TPU configurato nel passaggio precedente. Se vuoi autorizzazioni granulari, consulta le autorizzazioni per il livello di accesso.
Addestra il modello Transformer su una singola Cloud TPU
Avvia una VM Cloud TPU utilizzando il comando
gcloud
.$ gcloud compute tpus tpu-vm create transformer-tutorial \ --zone=us-central2-b \ --accelerator-type=v4-8 \ --version=tpu-vm-tf-2.11.0
Per connetterti alla VM Cloud TPU, esegui questo comando
ssh
.gcloud compute tpus tpu-vm ssh transformer-tutorial --zone=us-central2-b
Esporta le variabili di ambiente.
(vm)$ export STORAGE_BUCKET=gs://bucket-name (vm)$ export SENTENCEPIECE_MODEL=sentencepiece (vm)$ export SENTENCEPIECE_MODEL_PATH=${STORAGE_BUCKET}/${SENTENCEPIECE_MODEL}.model (vm)$ export TFDS_DIR=${STORAGE_BUCKET}/tfds (vm)$ export PARAM_SET=big (vm)$ export TPU_NAME=local (vm)$ export MODEL_DIR=${STORAGE_BUCKET}/transformer/model_${PARAM_SET} (vm)$ export PYTHONPATH="/usr/share/tpu/models:$PYTHONPATH"
Installare i requisiti di Tensorflow.
(vm)$ pip3 install -r /usr/share/tpu/models/official/requirements.txt
Scarica ed preelabora il set di dati
(vm)$ python3 -c "import tensorflow_datasets as tfds; tfds.load('wmt14_translate/de-en', split='train+validation', shuffle_files=True, download=True)" (vm)$ python3 /usr/share/tpu/models/official/nlp/data/train_sentencepiece.py --output_model_path=${SENTENCEPIECE_MODEL}
Copia il set di dati nel bucket Cloud Storage
(vm)$ gsutil -m cp ${SENTENCEPIECE_MODEL}.model ${STORAGE_BUCKET} (vm)$ gsutil -m cp ${SENTENCEPIECE_MODEL}.vocab ${STORAGE_BUCKET} (vm)$ gsutil -m cp -r tensorflow_datasets/wmt14_translate ${TFDS_DIR}/wmt14_translate
Vai alla directory di addestramento
(vm)$ cd /usr/share/tpu/models/
Eseguire lo script per l'addestramento
(vm)$ python3 official/nlp/train.py \ --tpu=${TPU_NAME} \ --experiment=wmt_transformer/large \ --mode=train_and_eval \ --model_dir=${MODEL_DIR} \ --params_override="runtime.distribution_strategy=tpu, task.train_data.tfds_data_dir=${TFDS_DIR}, task.validation_data.tfds_data_dir=${TFDS_DIR}, task.sentencepiece_model_path=${SENTENCEPIECE_MODEL_PATH}, trainer.train_steps=10000, trainer.validation_interval=10000"
Descrizioni flag comando
tpu
- Il nome della Cloud TPU. Per farlo, specifica la variabile di ambiente (
TPU_NAME
). experiment
- Il modello da addestrare.
mode
- La modalità in cui eseguire lo script.
model_dir
- Il bucket Cloud Storage in cui vengono archiviati checkpoint e riepiloghi durante l'addestramento. Puoi utilizzare una cartella esistente per caricare i checkpoint generati in precedenza creati su una TPU della stessa dimensione e della stessa versione di TensorFlow.
params_override
- Imposta i parametri del modello.
Per impostazione predefinita, il modello esegue una valutazione ogni 10.000 passi. Puoi aumentare il numero di passaggi di addestramento o specificare la frequenza di esecuzione delle valutazioni impostando questi parametri:
train.train_steps
: numero totale di passaggi di addestramento da eseguire.trainer.validation_interval
: numero di passaggi di addestramento da eseguire tra le valutazioni.
L'addestramento e la valutazione richiedono circa 20 minuti su Cloud TPU v4-8. Al termine dell'addestramento e della valutazione, viene visualizzato un messaggio simile al seguente:
I0208 20:57:19.309512 140039467895872 controller.py:310] eval | step: 10000 | eval time: 69.2 sec | output: {'bleu_score': 19.204771518707275, 'sacrebleu_score': 18.307039308307356, 'validation_loss': 2.0654342} eval | step: 10000 | eval time: 69.2 sec | output: {'bleu_score': 19.204771518707275, 'sacrebleu_score': 18.307039308307356, 'validation_loss': 2.0654342}
Hai completato l'addestramento su un solo dispositivo. Per eliminare le risorse TPU per un singolo dispositivo, procedi nel seguente modo.
Disconnettiti dall'istanza Compute Engine:
(vm)$ exit
Il prompt ora dovrebbe essere
username@projectname
, a indicare che ti trovi in Cloud Shell.Elimina la risorsa TPU.
$ gcloud compute tpus tpu-vm delete transformer-tutorial \ --zone=us-central2-b
Descrizioni flag comando
zone
- La zona in cui si trovava la tua Cloud TPU.
A questo punto, puoi completare questo tutorial e ripulire oppure continuare ed esplorare l'esecuzione del modello sui pod Cloud TPU.
Scala il tuo modello con i pod Cloud TPU
L'addestramento del modello su pod Cloud TPU potrebbe richiedere alcune modifiche allo script di addestramento. Per informazioni, vedi Formazione sui pod TPU.
Addestramento dei pod TPU
Apri una finestra di Cloud Shell.
Crea una variabile per l'ID progetto.
export PROJECT_ID=project-id
Configurare Google Cloud CLI in modo da utilizzare il progetto in cui vuoi creare una Cloud TPU.
gcloud config set project ${PROJECT_ID}
La prima volta che esegui questo comando in una nuova VM di Cloud Shell, viene visualizzata una pagina
Authorize Cloud Shell
. Fai clic suAuthorize
in fondo alla pagina per consentire agcloud
di effettuare chiamate API con le tue credenziali.Creare un account di servizio per il progetto Cloud TPU.
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 un bucket Cloud Storage utilizzando il comando seguente o utilizza un bucket creato in precedenza per il progetto:
gsutil mb -p ${PROJECT_ID} -c standard -l us-central1 gs://bucket-name
Questo bucket Cloud Storage archivia i dati utilizzati per addestrare il modello e i risultati dell'addestramento. Il comando
gcloud
utilizzato in questo tutorial configura le autorizzazioni predefinite per l'account di servizio Cloud TPU configurato nel passaggio precedente. Se vuoi autorizzazioni granulari, consulta le autorizzazioni per il livello di accesso.
Avvia le risorse VM TPU
Avvia un pod VM TPU con il comando
gcloud
. Questo tutorial specifica un pod v4-32. Per altre opzioni pod, consulta la pagina relativa ai tipi di TPU disponibili.$ gcloud compute tpus tpu-vm create transformer-tutorial \ --zone=us-central2-b \ --accelerator-type=v3-32 \ --version=tpu-vm-tf-2.11.0-pod
Connettiti alla VM TPU eseguendo il seguente comando
ssh
. Dopo aver eseguito l'accesso alla VM, il prompt di shell passa dausername@projectname
ausername@vm-name
:gcloud compute tpus tpu-vm ssh transformer-tutorial --zone=us-central2-b
Installare i requisiti di TensorFlow.
(vm)$ pip3 install -r /usr/share/tpu/models/official/requirements.txt
Configura e avvia l'addestramento del pod
Esporta le variabili di configurazione di Cloud TPU:
(vm)$ export PYTHONPATH="/usr/share/tpu/models:$PYTHONPATH" (vm)$ export STORAGE_BUCKET=gs://bucket-name (vm)$ export SENTENCEPIECE_MODEL=sentencepiece (vm)$ export SENTENCEPIECE_MODEL_PATH=${STORAGE_BUCKET}/${SENTENCEPIECE_MODEL}.model (vm)$ export TFDS_DIR=${STORAGE_BUCKET}/tfds (vm)$ export TPU_NAME=transformer-tutorial (vm)$ export PARAM_SET=big (vm)$ export MODEL_DIR=${STORAGE_BUCKET}/transformer/model_${PARAM_SET} (vm)$ export TPU_LOAD_LIBRARY=0
Scarica il set di dati
(vm)$ python3 -c "import tensorflow_datasets as tfds; tfds.load('wmt14_translate/de-en', split='train+validation', shuffle_files=True, download=True)" (vm)$ python3 /usr/share/tpu/models/official/nlp/data/train_sentencepiece.py --output_model_path=${SENTENCEPIECE_MODEL}
Copia il set di dati nel bucket Cloud Storage
(vm)$ gsutil -m cp ${SENTENCEPIECE_MODEL}.model ${STORAGE_BUCKET} (vm)$ gsutil -m cp ${SENTENCEPIECE_MODEL}.vocab ${STORAGE_BUCKET} (vm)$ gsutil -m cp -r tensorflow_datasets/wmt14_translate ${TFDS_DIR}/wmt14_translate
Passa alla directory di addestramento:
(vm)$ cd /usr/share/tpu/models/
Esegui lo script di addestramento:
(vm)$ python3 official/nlp/train.py
--tpu=${TPU_NAME}
--experiment=wmt_transformer/large
--mode=train_and_eval
--model_dir=${MODEL_DIR}
--params_override="runtime.distribution_strategy=tpu, task.train_data.tfds_data_dir=${TFDS_DIR}, task.validation_data.tfds_data_dir=${TFDS_DIR}, task.sentencepiece_model_path=${SENTENCEPIECE_MODEL_PATH}, trainer.train_steps=10000, trainer.validation_interval=10000"Command flag descriptions
tpu
- The name of the Cloud TPU. This is set by specifying
the environment variable (
TPU_NAME
). experiment
- The model to train.
mode
- The mode in which to run the script.
model_dir
- The Cloud Storage bucket where checkpoints and summaries are stored during training. You can use an existing folder to load previously generated checkpoints created on a TPU of the same size and TensorFlow version.
params_override
- Set model parameters.
Per impostazione predefinita, il modello esegue la valutazione ogni 10.000 passi. Per passare all'addestramento, imposta train_steps
su 200000.
Puoi aumentare il numero di passaggi di addestramento o specificare la frequenza di esecuzione delle valutazioni impostando questi parametri:
trainer.train_steps
: imposta il numero totale di passaggi di addestramento da eseguire.trainer.validation_interval
: imposta il numero di passaggi di addestramento da eseguire tra le valutazioni.
L'addestramento e la valutazione richiedono circa 14 minuti su una Cloud TPU v4-32. Al termine dell'addestramento e della valutazione, vengono visualizzati messaggi simili ai seguenti:
I0209 22:19:49.143219 139751309618240 controller.py:310] eval | step: 10000 | eval time: 73.6 sec | output: {'bleu_score': 19.401752948760986, 'sacrebleu_score': 18.442741330886378, 'validation_loss': 2.0558002} eval | step: 10000 | eval time: 73.6 sec | output: {'bleu_score': 19.401752948760986, 'sacrebleu_score': 18.442741330886378, 'validation_loss': 2.0558002}
Questo script di addestramento viene addestrato per 20.000 passi ed esegue la valutazione ogni 2000 passaggi. Questo particolare addestramento e valutazione richiede circa 8 minuti su un pod Cloud TPU v3-32. Al termine dell'addestramento e della valutazione, viene visualizzato un messaggio simile al seguente:
INFO:tensorflow:Writing to file /tmp/tmpdmlanxcf I0218 21:09:19.100718 140509661046592 translate.py:184] Writing to file /tmp/tmpdmlanxcf I0218 21:09:28.043537 140509661046592 transformer_main.py:118] Bleu score (uncased): 1.799112930893898 I0218 21:09:28.043911 140509661046592 transformer_main.py:119] Bleu score (cased): 1.730366237461567
Per passare all'addestramento, imposta train_steps
su 200000. Puoi aumentare il numero di passaggi di addestramento o specificare la frequenza di esecuzione delle valutazioni impostando questi parametri:
--train_steps
: imposta il numero totale di passaggi di addestramento da eseguire.--steps_between_evals
: numero di passaggi di addestramento da eseguire tra le valutazioni.
Al termine dell'addestramento e della valutazione, viene visualizzato un messaggio simile al seguente:
0509 00:27:59.984464 140553148962624 translate.py:184] Writing to file /tmp/tmp_rk3m8jp I0509 00:28:11.189308 140553148962624 transformer_main.py:119] Bleu score (uncased): 1.3239131309092045 I0509 00:28:11.189623 140553148962624 transformer_main.py:120] Bleu score (cased): 1.2855342589318752
Esegui la pulizia
Per evitare che al tuo Account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.
Disconnettiti dall'istanza Compute Engine, se non lo hai già fatto:
(vm)$ exit
Il prompt ora dovrebbe essere
username@projectname
, a indicare che ti trovi in Cloud Shell.Elimina le risorse Cloud TPU e Compute Engine.
$ gcloud compute tpus tpu-vm delete transformer-tutorial \ --zone=us-central2-b
Esegui
gsutil
come mostrato, sostituendo bucket-name con il nome del bucket Cloud Storage che hai creato per questo tutorial:$ gsutil rm -r gs://bucket-name
Passaggi successivi
In generale, i tutorial di TensorFlow Cloud TPU addestrano il modello utilizzando un set di dati di esempio. I risultati di questo addestramento non sono utilizzabili per l'inferenza. Per utilizzare un modello per l'inferenza, puoi addestrare i dati in un set di dati disponibile pubblicamente o nel tuo set di dati. In genere, i modelli TensorFlow addestrati sulle Cloud TPU richiedono set di dati in formato TFRecord.
Puoi utilizzare l'esempio dello strumento di conversione dei set di dati per convertire un set di dati di classificazione delle immagini in formato TFRecord. Se non utilizzi un modello di classificazione delle immagini, dovrai convertire il set di dati nel formato TFRecord autonomamente. Per ulteriori informazioni, consulta TFRecord e tf.Example.
Ottimizzazione degli iperparametri
Per migliorare le prestazioni del modello con il tuo set di dati, puoi regolare gli iperparametri del modello. Puoi trovare informazioni sugli iperparametri comuni per tutti i modelli TPU supportati su GitHub. Puoi trovare informazioni sugli iperparametri specifici del modello nel codice sorgente di ciascun modello. Per ulteriori informazioni sull'ottimizzazione degli iperparametri, consulta Panoramica sull'ottimizzazione degli iperparametri, Utilizzo del servizio di ottimizzazione degli iperparametri e Iperparametri dell'iperparametro.
Inferenza
Dopo aver addestrato il modello, puoi utilizzarlo per l'inferenza (detta anche previsione). AI Platform è una soluzione basata su cloud per lo sviluppo, l'addestramento e il deployment dei modelli di machine learning. Una volta eseguito il deployment di un modello, puoi utilizzare il servizio AI Platform Prediction.