Inférence MaxDiffusion sur les TPU v6e
Ce tutoriel explique comment diffuser des modèles MaxDiffusion sur TPU v6e. Dans ce tutoriel, vous allez générer des images à l'aide du modèle Stable Diffusion XL.
Avant de commencer
Préparez-vous à provisionner un TPU v6e avec quatre puces:
Suivez le guide Configurer l'environnement Cloud TPU pour vous assurer que vous disposez des droits d'accès appropriés pour utiliser Cloud TPU.
Créez une identité de service pour la VM TPU.
gcloud alpha compute tpus tpu-vm service-identity create --zone=zone
Créez un compte de service TPU et accordez l'accès aux services Google Cloud .
Les comptes de service permettent au service Google Cloud TPU d'accéder à d'autres services Google Cloud. Un compte de service géré par l'utilisateur est recommandé. Vous pouvez créer un compte de service à partir de la console Google Cloud ou à l'aide de la commande
gcloud
.Créez un compte de service à l'aide de l'outil de ligne de commande
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
Créez un compte de service à partir de la console Google Cloud:
- Accédez à la page "Comptes de service" dans la console Google Cloud.
- Cliquez sur Créer un compte de service.
- Saisissez le nom du compte de service.
- (Facultatif) Saisissez une description du compte de service.
- Cliquez sur Créer et continuez.
- Choisissez les rôles que vous souhaitez accorder au compte de service.
- Cliquez sur Continuer.
- (Facultatif) Spécifiez les utilisateurs ou les groupes autorisés à gérer le compte de service.
- Cliquez sur OK pour terminer la création du compte de service.
Une fois votre compte de service créé, procédez comme suit pour accorder des rôles de compte de service.
Les rôles suivants sont nécessaires:
- Administrateur TPU: rôle nécessaire pour créer un TPU
- Storage Admin: rôle nécessaire pour accéder à Cloud Storage
- Rédacteur de journaux
- Rédacteur de métriques Monitoring: nécessaire pour écrire des métriques dans Cloud Monitoring
Votre administrateur doit vous accorder le rôle
roles/resourcemanager.projectIamAdmin
pour que vous puissiez attribuer des rôles IAM aux utilisateurs. Un utilisateur disposant du rôleroles/resourcemanager.projectIamAdmin
Administrateur IAM de projet peut également attribuer ce rôle.Utilisez les commandes
gcloud
suivantes pour ajouter des rôles de compte de service: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
Vous pouvez également attribuer des rôles à l'aide de la console Google Cloud.
Dans la console Google Cloud, sélectionnez les rôles suivants:
- Sélectionnez votre compte de service, puis cliquez sur Ajouter un compte principal.
- Dans le champ Nouveaux comptes principaux, saisissez l'adresse e-mail de votre compte de service.
- Dans le menu déroulant Sélectionner un rôle, recherchez le rôle (par exemple, Storage Admin) et sélectionnez-le.
- Cliquez sur Enregistrer.
Authentifiez-vous avec Google Cloud et configurez le projet et la zone par défaut pour Google Cloud CLI.
gcloud auth login gcloud config set project PROJECT_ID gcloud config set compute/zone ZONE
Sécuriser la capacité
Lorsque vous êtes prêt à sécuriser la capacité de TPU, consultez la page sur les quotas pour en savoir plus sur le système Cloud Quotas. Si vous avez d'autres questions sur la sécurisation de la capacité, contactez votre équipe commerciale ou votre équipe chargée de votre compte Cloud TPU.
Provisionner l'environnement Cloud TPU
Vous pouvez provisionner des VM TPU avec GKE, avec GKE et XPK, ou en tant que ressources mises en file d'attente.
Prérequis
- Ce tutoriel a été testé avec Python 3.10 ou version ultérieure.
- Vérifiez que votre projet dispose d'un quota
TPUS_PER_TPU_FAMILY
suffisant, qui spécifie le nombre maximal de chips auxquels vous pouvez accéder dans votre projetGoogle Cloud . - Vérifiez que votre projet dispose d'un quota TPU suffisant pour :
- Quota de VM TPU
- Quota d'adresses IP
- Quota Hyperdisk équilibré
- Autorisations de projet utilisateur
- Si vous utilisez GKE avec XPK, consultez la section Autorisations de la console Cloud sur le compte utilisateur ou de service pour connaître les autorisations requises pour exécuter XPK.
Provisionner un 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
Utilisez les commandes list
ou describe
pour interroger l'état de votre ressource mise en file d'attente.
gcloud alpha compute tpus queued-resources describe ${QUEUED_RESOURCE_ID} \
--project ${PROJECT_ID} --zone ${ZONE}
Pour obtenir la liste complète des états des requêtes de ressources en file d'attente, consultez la documentation sur les ressources en file d'attente.
Se connecter au TPU à l'aide de SSH
gcloud compute tpus tpu-vm ssh TPU_NAME
Créer un environnement Conda
Créez un répertoire pour Miniconda:
mkdir -p ~/miniconda3
Téléchargez le script d'installation de Miniconda:
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh
Installez Miniconda:
bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3
Supprimez le script d'installation Miniconda:
rm -rf ~/miniconda3/miniconda.sh
Ajoutez Miniconda à votre variable
PATH
:export PATH="$HOME/miniconda3/bin:$PATH"
Actualisez
~/.bashrc
pour appliquer les modifications à la variablePATH
:source ~/.bashrc
Créez un environnement Conda:
conda create -n tpu python=3.10
Activez l'environnement Conda:
source activate tpu
Configurer MaxDiffusion
Clonez le dépôt MaxDiffusion et accédez au répertoire MaxDiffusion:
git clone https://github.com/google/maxdiffusion.git && cd maxdiffusion
Passez à la branche
mlperf-4.1
:git checkout mlperf4.1
Installez MaxDiffusion:
pip install -e .
Installez les dépendances :
pip install -r requirements.txt
Installez 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
Installez des dépendances supplémentaires:
pip install huggingface_hub==0.25 absl-py flax tensorboardX google-cloud-storage torch tensorflow transformers
Générer des images
Définissez des variables d'environnement pour configurer l'environnement d'exécution TPU:
LIBTPU_INIT_ARGS="--xla_tpu_rwb_fusion=false --xla_tpu_dot_dot_fusion_duplicated=true --xla_tpu_scoped_vmem_limit_kib=65536"
Générez des images à l'aide de la requête et des configurations définies dans
src/maxdiffusion/configs/base_xl.yml
:python -m src.maxdiffusion.generate_sdxl src/maxdiffusion/configs/base_xl.yml run_name="my_run"
Une fois les images générées, veillez à nettoyer les ressources TPU.
Effectuer un nettoyage
Supprimez le TPU:
gcloud compute tpus queued-resources delete QUEUED_RESOURCE_ID \ --project PROJECT_ID \ --zone ZONE \ --force \ --async