Inferenza MaxDiffusion su TPU v6e
Questo tutorial mostra come pubblicare modelli MaxDiffusion su TPU v6e. In questo tutorial, generi immagini utilizzando il modello Stable Diffusion XL.
Prima di iniziare
Preparati a eseguire il provisioning di una TPU v6e con 4 chip:
Segui la guida Configurare l'ambiente Cloud TPU per assicurarti di disporre dell'accesso appropriato per utilizzare le Cloud TPU.
Crea un'identità di servizio per la VM TPU.
gcloud alpha compute tpus tpu-vm service-identity create --zone=zone
Crea un account di servizio TPU e concedi accesso ai servizi Google Cloud .
Gli account di servizio consentono al Google Cloud servizio TPU di accedere ad altri Google Cloud servizi. È consigliato un account di servizio gestito dall'utente. Puoi creare un account di servizio dalla console Google Cloud o tramite il comando
gcloud
.Crea un account di servizio utilizzando lo strumento a riga di comando
gcloud
:gcloud iam service-accounts create your-service-account-name \ --description="your-sa-description" \ --display-name="your-sa-display-name" export SERVICE_ACCOUNT_NAME=your-service-account-name
Crea un account di servizio dalla console Google Cloud:
- Vai alla pagina Account di servizio nella console Google Cloud.
- Fai clic su Crea account di servizio.
- Inserisci il nome dell'account di servizio.
- (Facoltativo) Inserisci una descrizione per l'account di servizio.
- Fai clic su Crea e continua.
- Scegli i ruoli da concedere all'account di servizio.
- Fai clic su Continua.
- (Facoltativo) Specifica gli utenti o i gruppi che possono gestire l'account di servizio.
- Fai clic su Fine per completare la creazione del account di servizio.
Dopo aver creato l'account di servizio, segui questi passaggi per concedere i ruoli dell'account di servizio.
Sono necessari i seguenti ruoli:
- TPU Admin: necessario per creare una TPU
- Amministratore Storage: necessario per accedere a Cloud Storage
- Writer log
- Monitoring Metric Writer: necessario per scrivere le metriche in Cloud Monitoring
L'amministratore deve concederti il ruolo
roles/resourcemanager.projectIamAdmin
per consentirti di assegnare i ruoli IAM agli utenti. Anche un utente con il ruolo Amministratore IAM progettoroles/resourcemanager.projectIamAdmin
può assegnare questo ruolo.Utilizza i seguenti comandi
gcloud
per aggiungere i ruoli dell'account di servizio:gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member serviceAccount:${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com \ --role roles/tpu.admin gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member serviceAccount:${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com \ --role roles/storage.admin gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member serviceAccount:${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com \ --role roles/logging.logWriter gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member serviceAccount:${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com \ --role roles/monitoring.metricWriter
Puoi assegnare i ruoli anche utilizzando la console Google Cloud.
Nella console Google Cloud, seleziona i seguenti ruoli:
- Seleziona il tuo account di servizio e fai clic su Aggiungi principale.
- Nel campo Nuove entità, inserisci l'indirizzo email del tuo account di servizio.
- Nel menu a discesa Seleziona un ruolo, cerca il ruolo (ad esempio Amministratore Storage) e selezionalo.
- Fai clic su Salva.
Esegui l'autenticazione con Google Cloud e configura il progetto e la zona predefiniti per Google Cloud CLI.
gcloud auth login gcloud config set project PROJECT_ID gcloud config set compute/zone ZONE
Capacità sicura
Quando è tutto pronto per assicurarti la capacità TPU, consulta la pagina delle quote per saperne di più sul sistema delle quote di Cloud. Se hai altre domande su come assicurarti la capacità, contatta il team di vendita o dell'account Cloud TPU.
Esegui il provisioning dell'ambiente Cloud TPU
Puoi eseguire il provisioning delle VM TPU con GKE, con GKE e XPK, o come risorse in coda.
Prerequisiti
- Questo tutorial è stato testato con Python 3.10 o versioni successive.
- Verifica che il tuo progetto disponga di una quota
TPUS_PER_TPU_FAMILY
sufficiente, che specifica il numero massimo di chip a cui puoi accedere all'interno del progettoGoogle Cloud . - Verifica che il tuo progetto disponga di una quota TPU sufficiente per:
- Quota VM TPU
- Quota di indirizzi IP
- Quota Hyperdisk bilanciata
- Autorizzazioni del progetto per gli utenti
- Se utilizzi GKE con XPK, consulta Autorizzazioni di Cloud Console per l'account utente o di servizio per conoscere le autorizzazioni necessarie per eseguire XPK.
Esegui il provisioning di una TPU v6e
gcloud alpha compute tpus queued-resources create QUEUED_RESOURCE_ID \ --node-id TPU_NAME \ --project PROJECT_ID \ --zone ZONE \ --accelerator-type v6e-4 \ --runtime-version v2-alpha-tpuv6e \ --service-account SERVICE_ACCOUNT
Utilizza i comandi list
o describe
per eseguire query sullo stato della risorsa in coda.
gcloud alpha compute tpus queued-resources describe ${QUEUED_RESOURCE_ID} \
--project ${PROJECT_ID} --zone ${ZONE}
Per un elenco completo degli stati delle richieste di risorse in coda, consulta la documentazione relativa alle risorse in coda.
Connettiti alla TPU tramite SSH
gcloud compute tpus tpu-vm ssh TPU_NAME
Creare un ambiente Conda
Crea una directory per Miniconda:
mkdir -p ~/miniconda3
Scarica lo script di installazione di Miniconda:
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh
Installa Miniconda:
bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3
Rimuovi lo script di installazione di Miniconda:
rm -rf ~/miniconda3/miniconda.sh
Aggiungi Miniconda alla variabile
PATH
:export PATH="$HOME/miniconda3/bin:$PATH"
Ricarica
~/.bashrc
per applicare le modifiche alla variabilePATH
:source ~/.bashrc
Crea un nuovo ambiente Conda:
conda create -n tpu python=3.10
Attiva l'ambiente Conda:
source activate tpu
Configurare MaxDiffusion
Clona il repository MaxDiffusion e vai alla directory MaxDiffusion:
git clone https://github.com/google/maxdiffusion.git && cd maxdiffusion
Passa al branch
mlperf-4.1
:git checkout mlperf4.1
Installa MaxDiffusion:
pip install -e .
Installa le dipendenze:
pip install -r requirements.txt
Installa JAX:
pip install -U --pre jax[tpu] -f https://storage.googleapis.com/jax-releases/jax_nightly_releases.html -f https://storage.googleapis.com/jax-releases/libtpu_releases.html
Installa le dipendenze aggiuntive:
pip install huggingface_hub==0.25 absl-py flax tensorboardX google-cloud-storage torch tensorflow transformers
Genera immagini
Imposta le variabili di ambiente per configurare il runtime TPU:
LIBTPU_INIT_ARGS="--xla_tpu_rwb_fusion=false --xla_tpu_dot_dot_fusion_duplicated=true --xla_tpu_scoped_vmem_limit_kib=65536"
Genera le immagini utilizzando il prompt e le configurazioni definite in
src/maxdiffusion/configs/base_xl.yml
:python -m src.maxdiffusion.generate_sdxl src/maxdiffusion/configs/base_xl.yml run_name="my_run"
Una volta generate le immagini, assicurati di ripulire le risorse TPU.
Esegui la pulizia
Elimina la TPU:
gcloud compute tpus queued-resources delete QUEUED_RESOURCE_ID \ --project PROJECT_ID \ --zone ZONE \ --force \ --async