Le TPU (Tensor Processing Unit) sono ASIC sviluppati appositamente da Google, utilizzati per
per velocizzare i carichi di lavoro
di machine learning. Puoi eseguire i job di addestramento
AI Platform Training, con l'utilizzo di Cloud TPU. AI Platform Training offre
dei job in modo da non dover gestire personalmente la TPU.
In alternativa, puoi utilizzare l'API AI Platform Training jobs
nella
nello stesso modo in cui lo usi per l'addestramento su una CPU o una GPU.
Le API TensorFlow di alto livello ti aiutano a eseguire i tuoi modelli sull'hardware Cloud TPU.
Configurazione dell'ambiente Google Cloud
Configura il tuo ambiente Google Cloud eseguendo la configurazione della Guida introduttiva.
Autorizzazione di Cloud TPU ad accedere al progetto
Segui questi passaggi per autorizzare il nome dell'account di servizio Cloud TPU associati al tuo progetto Google Cloud:
Ottieni il nome del tuo account di servizio Cloud TPU chiamando
projects.getConfig
Esempio:PROJECT_ID=PROJECT_ID curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \ https://ml.googleapis.com/v1/projects/$PROJECT_ID:getConfig
Salva il valore dei campi
serviceAccountProject
etpuServiceAccount
restituiti dall'API.Inizializza l'account di servizio Cloud TPU:
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" -d '{}' \ https://serviceusage.googleapis.com/v1beta1/projects/<serviceAccountProject>/services/tpu.googleapis.com:generateServiceIdentity
Ora aggiungi l'account di servizio Cloud TPU come membro del progetto,
con il ruolo Agente di servizio Cloud ML. Completa i seguenti passaggi nella
console Google Cloud o utilizzando il comando gcloud
:
Console
- Accedi alla console Google Cloud e scegli il progetto in cui utilizzi la TPU.
- Scegli IAM e Amministratore > IAM.
- Fai clic sul pulsante Aggiungi per aggiungere un membro al progetto.
- Inserisci l'account di servizio TPU nella casella di testo Membri.
- Fai clic sull'elenco a discesa Ruoli.
- Abilita il ruolo Agente di servizio Cloud ML (Agenti di servizio > Agente di servizio Cloud ML).
gcloud
Imposta le variabili di ambiente contenenti l'ID progetto e Account di servizio Cloud TPU:
PROJECT_ID=PROJECT_ID SVC_ACCOUNT=your-tpu-sa-123@your-tpu-sa.google.com.iam.gserviceaccount.com
Concedi il ruolo
ml.serviceAgent
al servizio Cloud TPU :gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SVC_ACCOUNT --role roles/ml.serviceAgent
Per ulteriori dettagli sulla concessione dei ruoli agli account di servizio, consulta le documentazione IAM.
Esempio: addestramento di un modello MNIST di esempio
Questa sezione mostra come addestrare un modello MNIST di esempio utilizzando
una TPU e un runtime versione 2.11. Il job di esempio utilizza
livello di scalabilità BASIC_TPU
predefinito per la configurazione della tua macchina.
Le sezioni successive della guida spiegano come impostare una configurazione personalizzata.
Questo esempio presuppone che tu stia utilizzando una shell Bash con gcloud CLI installato. Esegui questi comandi per ottenere il codice e inviare l'addestramento su AI Platform Training:
Scarica il codice per i modelli di riferimento di TensorFlow e vai alla sezione con il codice campione:
git clone https://github.com/tensorflow/models.git \ --branch=v2.11.0 \ --depth=1 cd models
Crea un file
setup.py
nella directorymodels
. Questo garantisce che Comandogcloud ai-platform jobs submit training
include tutti i sottopacchetti necessari all'interno della directorymodels/official
quando crea un tarball del codice di addestramento e garantisce che AI Platform Training installa TensorFlow Set di dati come dipendenza quando viene eseguito il job di addestramento. Questo il codice di addestramento si basa su set di dati TensorFlow per caricare i dati MNIST.Per creare il file
setup.py
, esegui questo comando nella shell:cat << END > setup.py from setuptools import find_packages from setuptools import setup setup( name='official', install_requires=[ 'tensorflow-datasets~=3.1', 'tensorflow-model-optimization>=0.4.1' ], packages=find_packages() ) END
Invia il job di addestramento utilizzando Comando
gcloud ai-platform jobs submit training
:gcloud ai-platform jobs submit training tpu_mnist_1 \ --staging-bucket=gs://BUCKET_NAME \ --package-path=official \ --module-name=official.vision.image_classification.mnist_main \ --runtime-version=2.11 \ --python-version=3.7 \ --scale-tier=BASIC_TPU \ --region=us-central1 \ -- \ --distribution_strategy=tpu \ --data_dir=gs://tfds-data/datasets \ --model_dir=gs://BUCKET_NAME/tpu_mnist_1_output
Sostituisci BUCKET_NAME con il nome di un bucket Cloud Storage nel tuo progetto Google Cloud. L'interfaccia a riga di comando gcloud carica il file il codice di addestramento in questo bucket e AI Platform Training salva nel bucket.
Monitora il job di addestramento. Una volta che il job ha completato, puoi visualizzarne l'output Directory
gs://BUCKET_NAME/tpu_mnist_1_output
.
Scopri di più sull'addestramento di un modello su Cloud TPU
Questa sezione illustra di più sulla configurazione di un job e sull'addestramento di un modello AI Platform Training con Cloud TPU.
Specifica di una regione che offre TPU
Devi eseguire il job in una regione in cui sono disponibili le TPU. La le seguenti regioni attualmente forniscono l'accesso alle TPU:
us-central1
europe-west4
Per comprendere appieno le regioni disponibili per i servizi AI Platform Training, tra cui l'addestramento del modello e la previsione online/batch, guida alle regioni.
Controllo delle versioni di TensorFlow e AI Platform Training
Versioni runtime di AI Platform Training 1.15, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9 e 2.11 sono disponibili per l'addestramento dei modelli con Cloud TPU. Scopri di più su AI Platform Training versioni runtime e le versioni TensorFlow corrispondenti.
Il criterio di controllo delle versioni è lo stesso Cloud TPU. Nella richiesta del job di addestramento, specifica una versione di runtime disponibile per le TPU e che corrisponda al utilizzata nel codice di addestramento.
Connessione al server gRPC TPU
Nel programma TensorFlow, utilizza TPUClusterResolver
per connetterti al server gRPC TPU
in esecuzione sulla VM TPU.
La guida di TensorFlow all'utilizzo delle TPU mostra come utilizzare TPUClusterResolver
con
la distribuzione di TPUStrategy
strategia.
Tuttavia, devi apportare una modifica importante quando usi TPUClusterResolver
per il codice eseguito su AI Platform Training: non fornire argomenti quando
crei l'istanza TPUClusterResolver
. Quando tpu
, zone
e
project
argomenti parola chiave sono tutti impostati sul valore predefinito di None
,
AI Platform Training fornisce automaticamente al resolver del cluster
i dettagli di connessione necessari
tramite le variabili di ambiente.
L'esempio di TensorFlow 2 seguente mostra come inizializzare un resolver di cluster e una strategia di distribuzione per la formazione su AI Platform Training:
import tensorflow as tf
resolver = tf.distribute.cluster_resolver.TPUClusterResolver()
tf.config.experimental_connect_to_cluster(resolver)
tf.tpu.experimental.initialize_tpu_system(resolver)
strategy = tf.distribute.experimental.TPUStrategy(resolver)
Utilizzo di TPU nel codice TensorFlow
Per utilizzare le TPU su una macchina, usa il comando
API TPUStrategy
. La
La guida di TensorFlow all'utilizzo delle TPU mostra come fare.
Per eseguire l'addestramento con le TPU in TensorFlow 1, puoi utilizzare il TPUEstimator
API. La
Guida di Cloud TPU per la versione TPUEstimator
API mostra come fare.
La documentazione di Cloud TPU fornisce anche un elenco di Operazioni di TensorFlow disponibili su Cloud TPU.
Utilizzo di TPU nel codice PyTorch
Per utilizzare una TPU quando usi una architettura PyTorch predefinita
containerizzato, utilizza
pacchetto torch_xla
. Scopri come utilizzare torch_xla
per TPU nell'addestramento nel
documentazione di PyTorch. Per altri esempi
sull'utilizzo di torch_xla
, guarda i tutorial nel GitHub PyTorch XLA
repository
Tieni presente che quando esegui l'addestramento con una TPU su AI Platform Training, utilizzi una un singolo dispositivo XLA, non più dispositivi XLA.
Consulta anche la sezione seguente in questa pagina sulla configurazione dell'addestramento per PyTorch e TPU.
Configurazione di una macchina TPU personalizzata
Un job di addestramento TPU viene eseguito su una configurazione con due VM. Una VM (la master) esegue il codice Python. Il master guida il server TensorFlow in esecuzione su un worker TPU.
Per utilizzare una TPU con AI Platform Training, configura il job di addestramento per accedere su una macchina abilitata per TPU in uno dei tre seguenti modi:
- Utilizza il livello di scalabilità
BASIC_TPU
. Puoi utilizzare questo metodo per accedere a TPU v2 acceleratori. - Utilizza un worker
cloud_tpu
e un tipo di macchina legacy per la VM master. Puoi utilizza questo metodo per accedere agli acceleratori TPU v2. - Usa un worker
cloud_tpu
e un tipo di macchina Compute Engine per il e la VM master. Puoi utilizzare questo metodo per accedere agli acceleratori TPU v2 o TPU v3. Gli acceleratori TPU v3 sono disponibili in versione beta.
Macchina abilitata per TPU di base
Imposta il livello di scalabilità su BASIC_TPU
per ottenere una VM master e una VM TPU di cui una
TPU con otto core TPU v2, come facevi durante l'esperienza precedente
esempio.
Worker TPU in una configurazione di un tipo di macchina legacy
In alternativa, puoi definire una configurazione di macchina personalizzata hai bisogno di più risorse di calcolo sulla VM master:
- Imposta il livello di scalabilità su
CUSTOM
. - Configura la VM master per l'utilizzo di una macchina legacy di testo adatto al tuo lavoro i tuoi requisiti.
- Imposta
workerType
sucloud_tpu
per ottenere una VM TPU di cui una Cloud TPU con otto core TPU v2. - Imposta
workerCount
su 1. - Non specificare un server dei parametri quando utilizzi una Cloud TPU. La
servizio rifiuta la richiesta di job se
parameterServerCount
è maggiore di zero.
L'esempio seguente mostra un file config.yaml
che utilizza questo tipo di
configurazione:
trainingInput:
scaleTier: CUSTOM
masterType: complex_model_m
workerType: cloud_tpu
workerCount: 1
Worker TPU in una configurazione di tipo di macchina Compute Engine
Puoi anche impostare una configurazione di macchina personalizzata
Macchina Compute Engine
tipo per l'istanza principale
VM e una acceleratorConfig
collegata
VM TPU.
Puoi utilizzare questo tipo di configurazione per impostare un worker TPU con otto TPU v2
(simile a una configurazione senza acceleratorConfig
) o una TPU
con otto core TPU v3 (beta). Scopri di più sulla differenza tra
Acceleratori TPU v2 e TPU v3
Utilizzo di una macchina Compute Engine type fornisce anche di configurare la VM master con maggiore flessibilità:
- Imposta il livello di scalabilità su
CUSTOM
. - Configura la VM master per l'utilizzo di una macchina Compute Engine tipo di testo adatto i requisiti del tuo job.
- Imposta
workerType
sucloud_tpu
. - Aggiungi un
workerConfig
con un campoacceleratorConfig
. Interno cheacceleratorConfig
, impostaretype
suTPU_V2
oTPU_V3
ecount
su8
, Non puoi collegare altri numeri di core TPU. - Imposta
workerCount
su 1. - Non specificare un server dei parametri quando utilizzi una Cloud TPU. La
servizio rifiuta la richiesta di job se
parameterServerCount
è maggiore di zero.
L'esempio seguente mostra un file config.yaml
che utilizza questo tipo di
configurazione:
TPU v2
trainingInput:
scaleTier: CUSTOM
masterType: n1-highcpu-16
workerType: cloud_tpu
workerCount: 1
workerConfig:
acceleratorConfig:
type: TPU_V2
count: 8
TPU v3 (beta)
trainingInput:
scaleTier: CUSTOM
masterType: n1-highcpu-16
workerType: cloud_tpu
workerCount: 1
workerConfig:
acceleratorConfig:
type: TPU_V3
count: 8
Utilizzo dei pod TPU
Un pod di TPU è una raccolta di dispositivi TPU connessi da una piattaforma di archiviazione interfacce di rete. Un pod di TPU può avere fino a 2048 core TPU, consentendoti per distribuire il carico di elaborazione su più TPU.
Per utilizzare i pod TPU, devi prima inviare una richiesta di aumento delle quote.
Il seguente esempio di file config.yaml
mostra come utilizzare i pod TPU:
Pod TPU v2
trainingInput:
scaleTier: CUSTOM
masterType: n1-highcpu-16
workerType: cloud_tpu
workerCount: 1
workerConfig:
acceleratorConfig:
type: TPU_V2_POD
count: 128
Pod TPU v3
trainingInput:
scaleTier: CUSTOM
masterType: n1-highcpu-16
workerType: cloud_tpu
workerCount: 1
workerConfig:
acceleratorConfig:
type: TPU_V3_POD
count: 32
Esistono limitazioni al numero di core pod che possono essere utilizzati per ogni TPU di testo. Configurazioni disponibili:
Tipo di pod TPU | Numero di core pod disponibili da utilizzare |
---|---|
TPU_V2_POD |
32, 128, 256, 512 |
TPU_V3_POD |
32, 128, 256 |
Per maggiori dettagli su come sfruttare appieno i core dei pod di TPU, consulta Documentazione di Cloud TPU sui pod TPU.
Utilizzo di un container PyTorch predefinito su un worker TPU
Se vuoi eseguire l'addestramento PyTorch con una TPU,
devi specificare il campo tpuTfVersion
nel campo trainingInput
del job di addestramento.
Imposta tpuTfVersion
in modo che corrisponda alla versione di PyTorch predefinita
del container che stai
per l'addestramento.
AI Platform Training supporta l'addestramento con TPU per le seguenti Container PyTorch:
URI immagine container | tpuTfVersion |
---|---|
gcr.io/cloud-ml-public/training/pytorch-xla.1-11 |
pytorch-1.11 |
gcr.io/cloud-ml-public/training/pytorch-xla.1-10 |
pytorch-1.10 |
gcr.io/cloud-ml-public/training/pytorch-xla.1-9 |
pytorch-1.9 |
gcr.io/cloud-ml-public/training/pytorch-xla.1-7 |
pytorch-1.7 |
gcr.io/cloud-ml-public/training/pytorch-xla.1-6 |
pytorch-1.6 |
Ad esempio, per addestrare utilizzando il container predefinito PyTorch 1.11, potresti usare
il seguente file config.yaml
per configurare l'addestramento:
trainingInput:
scaleTier: CUSTOM
masterType: n1-highcpu-16
masterConfig:
imageUri: gcr.io/cloud-ml-public/training/pytorch-xla.1-11
workerType: cloud_tpu
workerCount: 1
workerConfig:
imageUri: gcr.io/cloud-ml-public/training/pytorch-xla.1-11
tpuTfVersion: pytorch-1.11
acceleratorConfig:
type: TPU_V2
count: 8
Consulta anche la sezione precedente di questa pagina dedicata all'utilizzo di TPU in PyTorch Google Cloud.
Utilizzo di un container personalizzato su un worker TPU
Se vuoi eseguire un container personalizzato
sul worker TPU, invece di utilizzare uno dei runtime di AI Platform Training
che supportano le TPU, devi specificare
campo di configurazione aggiuntivo quando invii il job di addestramento. Imposta il parametro
tpuTfVersion
a una versione di runtime che
include la versione di TensorFlow utilizzata dal container. Devi specificare un
attualmente supportata per l'addestramento con
TPU.
Poiché stai configurando il job per l'utilizzo di un container personalizzato, AI Platform Training non utilizza l'ambiente di questa versione di runtime quando esegue il job di addestramento. Tuttavia, AI Platform Training richiede questo campo per poter preparare correttamente la TPU worker per la versione di TensorFlow utilizzata dal tuo container personalizzato.
L'esempio seguente mostra un file config.yaml
con una TPU simile
configurazione a quella della sezione precedente, tranne che in questo caso
la VM master e il worker TPU eseguono ciascuno container personalizzati diversi:
TPU v2
trainingInput:
scaleTier: CUSTOM
masterType: n1-highcpu-16
masterConfig:
imageUri: gcr.io/YOUR_PROJECT_ID/your-master-image-name:your-master-tag-name
workerType: cloud_tpu
workerCount: 1
workerConfig:
imageUri: gcr.io/YOUR_PROJECT_ID/your-worker-image-name:your-worker-tag-name
tpuTfVersion: 2.11
acceleratorConfig:
type: TPU_V2
count: 8
TPU v3 (beta)
trainingInput:
scaleTier: CUSTOM
masterType: n1-highcpu-16
masterConfig:
imageUri: gcr.io/YOUR_PROJECT_ID/your-master-image-name:your-master-tag-name
workerType: cloud_tpu
workerCount: 1
workerConfig:
imageUri: gcr.io/YOUR_PROJECT_ID/your-worker-image-name:your-worker-tag-name
tpuTfVersion: 2.11
acceleratorConfig:
type: TPU_V3
count: 8
Se utilizzi
gcloud beta ai-platform jobs submit training
per inviare il job di addestramento, puoi specificare l'API tpuTfVersion
campo con il flag --tpu-tf-version
anziché in un file config.yaml
.
Utilizzo di TPUClusterResolver
dopo il provisioning della TPU
Quando utilizzi un container personalizzato, devi attendere che la TPU venga
di cui è stato eseguito il provisioning prima di poter chiamare TPUClusterResolver
per utilizzarlo. Le seguenti
codice campione mostra come gestire la logica TPUClusterResolver
:
def wait_for_tpu_cluster_resolver_ready():
"""Waits for `TPUClusterResolver` to be ready and return it.
Returns:
A TPUClusterResolver if there is TPU machine (in TPU_CONFIG). Otherwise,
return None.
Raises:
RuntimeError: if failed to schedule TPU.
"""
tpu_config_env = os.environ.get('TPU_CONFIG')
if not tpu_config_env:
tf.logging.info('Missing TPU_CONFIG, use CPU/GPU for training.')
return None
tpu_node = json.loads(tpu_config_env)
tf.logging.info('Waiting for TPU to be ready: \n%s.', tpu_node)
num_retries = 40
for i in range(num_retries):
try:
tpu_cluster_resolver = (
tf.contrib.cluster_resolver.TPUClusterResolver(
tpu=[tpu_node['tpu_node_name']],
zone=tpu_node['zone'],
project=tpu_node['project'],
job_name='worker'))
tpu_cluster_resolver_dict = tpu_cluster_resolver.cluster_spec().as_dict()
if 'worker' in tpu_cluster_resolver_dict:
tf.logging.info('Found TPU worker: %s', tpu_cluster_resolver_dict)
return tpu_cluster_resolver
except Exception as e:
if i < num_retries - 1:
tf.logging.info('Still waiting for provisioning of TPU VM instance.')
else:
# Preserves the traceback.
raise RuntimeError('Failed to schedule TPU: {}'.format(e))
time.sleep(10)
# Raise error when failed to get TPUClusterResolver after retry.
raise RuntimeError('Failed to schedule TPU.')
Scopri di più sull'addestramento distribuito con containerizzati.
Passaggi successivi
- Scopri di più sull'addestramento di modelli su AI Platform Training.
- Scopri di più sull'ottimizzazione degli iperparametri in AI Platform Training, con un'attenzione particolare ai dettagli ottimizzazione degli iperparametri con Cloud TPU.
- Esplora altri modelli di riferimento per Cloud TPU.
- Ottimizza i tuoi modelli per Cloud TPU seguendo le Best practice per Cloud TPU.
- Consulta le domande frequenti sulla risoluzione dei problemi di Cloud TPU per per diagnosticare e risolvere i problemi.