Questo tutorial ti mostra come addestrare il modello Transformer (da Warning Is All You Need) con Tensor2Tensor su Cloud TPU.
Descrizione del modello
Il modello Transformer utilizza gli stack di livelli di attenzione automatica e i livelli con feed in avanti per elaborare l'input sequenziale, come il testo. Supporta le seguenti varianti:
transformer
(solo decodificatore) per la modellazione a sequenza singola. Esempio di utilizzo: la definizione del linguaggio.transformer
(codificatore-decodificatore) per la sequenza in sequenza. Esempio di esempio: traduzione.transformer_encoder
(solo codificatore) esegue solo il codificatore per la modellazione da sequenza a classe. Esempio di caso d'uso: classificazione del sentiment.
Transformer è solo uno dei modelli della libreria Tensor2Tensor. Tensor2Tensor (T2T) è una libreria di modelli e set di dati di deep learning, nonché un insieme di script che consentono di addestrare i modelli e scaricare e preparare i dati.
Obiettivi
- Generare il set di dati di addestramento
- Addestra un modello di linguaggio su una singola Cloud TPU o un pod Cloud TPU
- Addestra un modello di traduzione inglese-tedesco su una singola Cloud TPU
- Addestrare un classificatore di sentiment su una singola Cloud TPU
- Pulisci le risorse Cloud TPU
Costi
In questo documento utilizzi i seguenti componenti fatturabili di Google Cloud:
- Compute Engine
- Cloud TPU
- Cloud Storage
Per generare una stima dei costi basata sull'utilizzo previsto,
utilizza il Calcolatore prezzi.
Prima di iniziare
Se prevedi di addestrare una sezione di un pod di TPU, assicurati di leggere la pagina Formazione sui pod di TPU, che spiega le considerazioni speciali durante l'addestramento su una sezione di un pod.
Prima di iniziare questo tutorial, segui i passaggi riportati di seguito per verificare che il tuo progetto Google Cloud sia configurato correttamente.
Questa sezione fornisce informazioni sulla configurazione di bucket Cloud Storage e una VM di Compute Engine.
Apri una finestra di Cloud Shell.
Crea una variabile per l'ID del tuo progetto.
export PROJECT_ID=project-id
Configura l'interfaccia a riga di comando di Google Cloud per utilizzare il progetto in cui vuoi creare 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 GCP con le tue credenziali.Crea 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 formato seguente:
service-PROJECT_NUMBER@cloud-tpu.iam.gserviceaccount.com
Crea un bucket Cloud Storage utilizzando il seguente comando:
gsutil mb -p ${PROJECT_ID} -c standard -l europe-west4 -b on gs://bucket-name
Questo bucket Cloud Storage archivia i dati che utilizzi per addestrare il modello e i risultati dell'addestramento. Lo strumento
gcloud compute tpus execution-groups
utilizzato in questo tutorial configura le autorizzazioni predefinite per l'account di servizio Cloud TPU. Se vuoi le autorizzazioni finin-grain, consulta le autorizzazioni per il livello di accesso.La località del bucket deve essere nella stessa area geografica della macchina virtuale (VM) e del nodo TPU. Le VM e i nodi TPU si trovano in zone specifiche, che sono suddivisioni all'interno di un'area geografica.
Avvia una VM di Compute Engine utilizzando il comando
gcloud
.$ gcloud compute tpus execution-groups create \ --vm-only \ --name=transformer-tutorial \ --zone=europe-west4-a \ --disk-size=300 \ --machine-type=n1-standard-8 \ --tf-version=1.15.5
Descrizioni flag comando
vm-only
- Crea solo una VM. Per impostazione predefinita, il comando
gcloud compute tpus execution-groups
crea una VM e una Cloud TPU. name
- Il nome della Cloud TPU da creare.
zone
- La zona in cui prevedi di creare Cloud TPU.
disk-size
- Le dimensioni del disco rigido in GB della VM creata dal comando
gcloud compute tpus execution-groups
. machine-type
- Il tipo di macchina della VM di Compute Engine da creare.
tf-version
- La versione di Tensorflow
gcloud compute tpus execution-groups
viene installata sulla VM.
Per maggiori informazioni sul comando
gcloud
, consulta la sezione Riferimento gcloud.Viene visualizzata la configurazione da te specificata. Inserisci y per approvare o n per annullare.
Al termine dell'esecuzione del comando
gcloud compute tpus execution-groups
, verifica che il prompt di Cloud Shell sia cambiato dausername@projectname
ausername@vm-name
. Questa modifica mostra che hai eseguito l'accesso alla tua VM di Compute Engine.gcloud compute ssh transformer-tutorial --zone=europe-west4-a
Mentre continui a seguire queste istruzioni, esegui ciascun comando che inizia con
(vm)$
nella tua istanza di Compute Engine.
Nella tua VM di Compute Engine:
Crea le seguenti variabili di ambiente:
(vm)$ export STORAGE_BUCKET=gs://bucket-name
(vm)$ export MODEL_DIR=${STORAGE_BUCKET}/transformer (vm)$ export DATA_DIR=${STORAGE_BUCKET}/data (vm)$ export TMP_DIR=${HOME}/t2t_tmp
Crea una directory per archiviare i file temporanei:
(vm)$ mkdir ${TMP_DIR}
Aggiungi il percorso agli script
tensor2tensor
utilizzati per elaborare i dati del modello:(vm)$ export PATH=.local/bin:${PATH}
Addestra un modello linguistico su una singola Cloud TPU
Genera il set di dati di addestramento per il modello linguistico.
(vm)$ t2t-datagen --problem=languagemodel_lm1b32k_packed \ --data_dir=${DATA_DIR} \ --tmp_dir=${TMP_DIR}
Descrizioni flag comando
problem
- Il nome del problema.
data_dir
- Il percorso Cloud Storage di input dell'addestramento.
tmp_dir
- La directory di archiviazione temporanea.
Esegui questo comando per creare la risorsa Cloud TPU.
(vm)$ gcloud compute tpus execution-groups create --tpu-only \ --zone=europe-west4-a \ --tf-version=1.15.5 \ --name=transformer-tutorial
Descrizioni flag comando
tpu-only
- Crea solo Cloud TPU. Per impostazione predefinita, il comando
gcloud compute tpus execution-groups
crea una VM e una Cloud TPU. zone
- La zona in cui prevedi di creare Cloud TPU. Deve essere la stessa zona utilizzata per la VM di Compute Engine. Ad
esempio,
europe-west4-a
. tf-version
- La versione di Tensorflow
ctpu
viene installata sulla VM. name
- Il nome della Cloud TPU da creare.
Imposta una variabile di ambiente per il nome TPU.
(vm)$ export TPU_NAME=transformer-tutorial
Esegui lo script di addestramento.
(vm)$ t2t-trainer \ --model=transformer \ --hparams_set=transformer_tpu \ --problem=languagemodel_lm1b32k_packed \ --eval_steps=3 \ --data_dir=${DATA_DIR} \ --output_dir=${MODEL_DIR}/language_lm1b32k \ --use_tpu=True \ --cloud_tpu_name=${TPU_NAME} \ --train_steps=10
Descrizioni flag comando
model
- Il modello da addestrare.
hparams_set
- Gli iperparametri da utilizzare durante l'addestramento.
problem
- Il nome del problema.
eval-steps
- Il numero di passaggi da valutare.
data_dir
- Il percorso Cloud Storage in cui sono archiviati i dati di addestramento.
output_dir
- Directory di output di base per l'esecuzione.
use_tpu
- Imposta il valore su "true" per utilizzare Cloud TPU, altrimenti su "false".
cloud_tpu_name
- Il nome della Cloud TPU da utilizzare per l'addestramento.
train_steps
- Il numero di passi per l'addestramento.
Il comando riportato sopra prevede 10 passaggi di addestramento, quindi 3 passaggi di valutazione. Viene eseguito in circa 5 minuti su un nodo TPU v3-8. Per rendere questo modello più accurato, devi aumentare il numero di passaggi di addestramento regolando il flag
--train_steps
. Ti consigliamo di addestrare il modello tramite almeno 40.000 passi. In genere il modello converge alla sua massima qualità dopo circa 250.000 passi.Elimina la risorsa Cloud TPU che hai creato.
$ gcloud compute tpus execution-groups delete transformer-tutorial \ --zone=europe-west4-a \ --tpu-only
Addestra un modello di linguaggio su un pod di Cloud TPU
Esegui il comando
gcloud
, utilizzando il parametroaccelerator-type
per specificare la sezione del pod da utilizzare. Ad esempio, il comando seguente utilizza una sezione di pod v2-32.(vm)$ gcloud compute tpus execution-groups create \ --tpu-only \ --accelerator-type=v2-32 \ --name=transformer-tutorial-pod \ --zone=europe-west4-a \ --tf-version=1.15.5
Descrizioni flag comando
tpu-only
- Crea la Cloud TPU senza creare una VM. Per impostazione predefinita, il comando
gcloud compute tpus execution-groups
crea una VM e una Cloud TPU. accelerator-type
- Il tipo di Cloud TPU da creare.
name
- Il nome della Cloud TPU da creare.
zone
- La zona in cui prevedi di creare Cloud TPU.
tf-version
- La versione di Tensorflow
ctpu
viene installata sulla VM.
Imposta una variabile di ambiente per il nuovo nome della TPU.
(vm)$ export TPU_NAME=transformer-tutorial-pod
Esegui lo script di addestramento.
(vm)$ t2t-trainer \ --model=transformer \ --hparams_set=transformer_tpu \ --problem=languagemodel_lm1b32k_packed \ --eval_steps=3 \ --data_dir=${DATA_DIR} \ --output_dir=${MODEL_DIR}/language_lm1b32k_pod \ --use_tpu=True \ --cloud_tpu_name=${TPU_NAME} \ --tpu_num_shards=32 \ --schedule=train \ --train_steps=25000
Descrizioni flag comando
model
- Il modello da addestrare.
hparams_set
- Gli iperparametri da utilizzare durante l'addestramento.
problem
- Il nome del problema.
eval-steps
- Il numero di passaggi da valutare.
data_dir
- Il percorso Cloud Storage in cui sono archiviati i dati di addestramento.
output_dir
- Directory di output di base per l'esecuzione.
use_tpu
- Imposta il valore su "true" per utilizzare Cloud TPU, altrimenti su "false".
cloud_tpu_name
- Il nome della Cloud TPU da utilizzare per l'addestramento.
tpu_num_shards
- Il numero di shard di Cloud TPU. Il valore predefinito è '8'.
schedule
- Il metodo di esecuzione di un esperimento.
train_steps
- Il numero di passaggi per addestrare il modello.
Il comando riportato sopra esegue 25.000 passaggi di addestramento, quindi esegue tre passaggi di valutazione. Per completare l'addestramento su Cloud TPU v2-32 sono necessari circa 30 minuti.
Ti consigliamo di addestrare il modello utilizzando almeno 40.000 passi. In genere il modello converge alla sua massima qualità dopo circa 250.000 passi.
Elimina la risorsa Cloud TPU che hai creato per l'addestramento.
(vm)$ gcloud compute tpus execution-groups delete transformer-tutorial \ --zone=europe-west4-a \ --tpu-only
Addestra un modello di traduzione inglese-tedesco su una singola Cloud TPU
Utilizza lo script
t2t-datagen
per generare i dati di addestramento e valutazione per il modello di traduzione nel bucket Cloud Storage:(vm)$ t2t-datagen \ --problem=translate_ende_wmt32k_packed \ --data_dir=${DATA_DIR} \ --tmp_dir=${TMP_DIR}
Descrizioni flag comando
problem
- Il nome del problema.
data_dir
- Il percorso Cloud Storage di input dell'addestramento.
tmp_dir
- La directory di archiviazione temporanea.
Esegui questo comando per creare la risorsa Cloud TPU.
(vm)$ gcloud compute tpus execution-groups create --tpu-only \ --zone=europe-west4-a \ --tf-version=1.15.5 \ --name=transformer-tutorial
Descrizioni flag comando
tpu-only
- Crea solo Cloud TPU. Per impostazione predefinita, il comando
gcloud compute tpus execution-groups
crea una VM e una Cloud TPU. zone
- La zona in cui prevedi di creare Cloud TPU.
tf-version
- La versione di Tensorflow
gcloud compute tpus execution-groups
viene installata sulla VM. name
- Il nome della Cloud TPU da creare.
Imposta una variabile di ambiente per il nuovo nome della TPU.
(vm)$ export TPU_NAME=transformer-tutorial
Esegui
t2t-trainer
per addestrare e valutare il modello:(vm)$ t2t-trainer \ --model=transformer \ --hparams_set=transformer_tpu \ --problem=translate_ende_wmt32k_packed \ --eval_steps=3 \ --data_dir=${DATA_DIR} \ --output_dir=${MODEL_DIR}/translate_ende \ --use_tpu=True \ --cloud_tpu_name=${TPU_NAME} \ --train_steps=10
Descrizioni flag comando
model
- Il modello da addestrare.
hparams_set
- Gli iperparametri da utilizzare durante l'addestramento.
problem
- Il nome del problema.
eval-steps
- Il numero di passaggi da valutare.
data_dir
- Il percorso Cloud Storage in cui sono archiviati i dati di addestramento.
output_dir
- Directory di output di base per l'esecuzione.
use_tpu
- Imposta il valore su"true"per utilizzare Cloud TPU, altrimenti su"false".
cloud_tpu_name
- Il nome della Cloud TPU da utilizzare per l'addestramento.
train_steps
- Il numero di passaggi per addestrare il modello.
Il comando riportato sopra prevede 10 passaggi di addestramento, quindi 3 passaggi di valutazione. Viene eseguito in circa 5 minuti su un nodo TPU v3-8. Puoi (e dovresti) aumentare il numero di passaggi di addestramento modificando il flag
--train_steps
. In genere le traduzioni iniziano a essere ragionevoli dopo circa 40.000 passi. In genere il modello converge alla sua massima qualità dopo circa 250.000 passi.Elimina la risorsa Cloud TPU creata per addestrare il modello su un singolo dispositivo.
(vm)$ gcloud compute tpus execution-groups delete transformer-tutorial \ --tpu-only \ --zone=europe-west4-a
Addestra un modello di classificazione del sentiment su una singola Cloud TPU
Genera il set di dati per il modello del classificatore di sentiment.
(vm)$ t2t-datagen --problem=sentiment_imdb \ --data_dir=${DATA_DIR} \ --tmp_dir=${TMP_DIR}
Esegui questo comando per creare la risorsa Cloud TPU.
(vm)$ gcloud compute tpus execution-groups create --tpu-only \ --zone=europe-west4-a \ --tf-version=1.15.5 \ --name=transformer-tutorial
Descrizioni flag comando
tpu-only
- Crea solo Cloud TPU. Per impostazione predefinita, il comando
gcloud compute tpus execution-groups
crea una VM e una Cloud TPU. zone
- La zona in cui prevedi di creare Cloud TPU.
tf-version
- La versione di Tensorflow
gcloud compute tpus execution-groups
viene installata sulla VM. name
- Il nome della Cloud TPU da creare.
Esegui lo script di addestramento.
(vm)$ t2t-trainer \ --model=transformer_encoder \ --hparams_set=transformer_tiny_tpu \ --problem=sentiment_imdb \ --eval_steps=1 \ --data_dir=${DATA_DIR} \ --output_dir=${MODEL_DIR}/sentiment_classifier \ --use_tpu=True \ --cloud_tpu_name=${TPU_NAME} \ --train_steps=10
Descrizioni flag comando
model
- Il modello da addestrare.
hparams_set
- Gli iperparametri da utilizzare durante l'addestramento.
problem
- Il nome del problema.
eval-steps
- Il numero di passaggi da valutare.
data_dir
- Il percorso Cloud Storage in cui sono archiviati i dati di addestramento.
output_dir
- Directory di output di base per l'esecuzione.
use_tpu
- Imposta il valore su "true" per utilizzare Cloud TPU, altrimenti su "false".
cloud_tpu_name
- Il nome della Cloud TPU da utilizzare per l'addestramento.
train_steps
- Il numero di passaggi per addestrare il modello.
Il comando riportato sopra prevede 10 passaggi di addestramento, quindi 3 passaggi di valutazione. Viene eseguito in circa 5 minuti su un nodo TPU v3-8. Questo modello raggiunge una precisione di circa l'85% dopo circa 2000 passi.
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 di Compute Engine, se non l'hai ancora fatto:
(vm)$ exit
Il tuo prompt dovrebbe ora essere
username@projectname
, a indicare che ti trovi in Cloud Shell.In Cloud Shell, esegui
gcloud compute tpus execution-groups
con il flag --zone che hai utilizzato quando hai configurato Cloud TPU per eliminare la VM di Compute Engine e la Cloud TPU:$ gcloud compute tpus execution-groups delete transformer-tutorial \ --zone=europe-west4-a
Verifica che le risorse siano state eliminate eseguendo
gcloud compute tpus execution-groups list
. L'eliminazione può richiedere qualche minuto. Una risposta simile alla seguente indica che le istanze sono state eliminate correttamente.$ gcloud compute tpus execution-groups list \ --zone=europe-west4-a
Dovresti vedere un elenco vuoto di TPU come segue:
NAME STATUS
Elimina il bucket Cloud Storage utilizzando
gsutil
come mostrato di seguito. Sostituisci bucket-name con il nome del tuo bucket Cloud Storage.$ gsutil rm -r gs://bucket-name
Passaggi successivi
I tutorial di TensorFlow Cloud TPU in genere addestrano il modello utilizzando un set di dati di esempio. I risultati di questo corso di formazione non sono utilizzabili per inferenza. Per utilizzare un modello di inferenza, puoi addestrare i dati su un set di dati disponibile pubblicamente o sul tuo set di dati. In genere, i modelli TensorFlow addestrati su Cloud TPU richiedono che i set di dati siano in formato TFRecord.Puoi utilizzare l'esempio di strumento di conversione del 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 personalmente il set di dati in formato TFRecord. Per ulteriori informazioni, vedi TFRecord e tf.Example.
Ottimizzazione degli iperparametri
Per migliorare le prestazioni del modello con il tuo set di dati, puoi regolare gli iperparametri di questo modello. Puoi trovare informazioni sugli iperparametri in comune in tutti i modelli supportati da TPU 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 dell'ottimizzazione degli iperparametri, Utilizzo del servizio di ottimizzazione degli iperparametri e Perfezionamento degli iperparametri.
Inferenza
Dopo aver addestrato il modello, puoi utilizzarlo per inferenza (chiamato anche previsione). AI Platform è una soluzione basata su cloud per lo sviluppo, l'addestramento e il deployment di modelli di machine learning. Una volta eseguito il deployment di un modello, puoi utilizzare il servizio AI Platform Prediction.
- Scopri altri modelli Tensor2Tensor per TPU.
- Sperimenta con altri esempi di TPU.
- Esplora gli strumenti TPU in TensorBoard.