Utiliser un compte de service multiprojet
Ce document explique comment utiliser un compte de service interprojet lors de la création d'une VM TPU. Un compte de service multiprojet est un compte de service situé dans un projet différent de celui de la VM TPU.
Notez que les instructions suivantes ne tiennent pas compte du VPC partagé ni de VPC Service Controls. Des configurations ou autorisations supplémentaires peuvent être nécessaires pour les utiliser. Pour en savoir plus, consultez les pages Créer et modifier des réseaux VPC partagés et Présentation de VPC Service Controls.
Avant de commencer
- Créez deux projets Google Cloud . L'un pour contenir la VM TPU (
tpu_project
) et l'autre pour contenir le compte de service (service_project
). Pour en savoir plus, consultez Créer et gérer des projets. - Créez un compte de service dans
service_project
. Pour en savoir plus, consultez la section Créer et gérer des comptes de service. - Créez un réseau et activez l'accès privé à Google. Pour en savoir plus, consultez les pages Créer et gérer des réseaux et Configurer l'accès privé à Google pour une adresse IP interne.
- Désactivez les règles d'administration suivantes. Pour en savoir plus, consultez la section Contraintes de règles d'administration.
constraints/iam.disableCrossProjectServiceAccountUsage
dans les deux projetsconstraints/compute.vmExternalIpAccess
(pour accéder à la VM avec SSH, facultatif)
Définir des variables d'environnement
export TPU_PROJECT_ID=tpu-project-id export SERVICE_PROJECT_ID=service-project-id export SERVICE_ACCOUNT_EMAIL=your_service_account@$(SERVICE_PROJECT_ID).iam.gserviceaccount.com export ZONE=your-zone export TPU_NAME=your-tpu-name export NETWORK=your-network export SUBNET=your-subnet
Définir les autorisations IAM
Autorisez votre compte de service à utiliser le rôle Agent de service TPU dans
tpu_project
.gcloud projects add-iam-policy-binding ${TPU_PROJECT_ID} \ --member=serviceAccount:${SERVICE_ACCOUNT_EMAIL} \ --role=roles/cloudtpu.serviceAgent
Ajoutez le rôle serviceAccountUser à l'agent de service TPU.
gcloud projects add-iam-policy-binding $SERVICE_PROJECT_ID \ --member=serviceAccount:service-$TPU_PROJECT_ID@gcp-sa-tpu.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountUser
Si votre charge de travail s'exécute dans des conteneurs Docker, autorisez l'agent de service Compute Engine à accéder au serveur de métadonnées.
gcloud iam service-accounts add-iam-policy-binding \ --project $SERVICE_PROJECT_ID $SERVICE_ACCOUNT_EMAIL \ --role roles/iam.serviceAccountTokenCreator \ --member serviceAccount:service-$TPU_PROJECT_ID@compute-system.iam.gserviceaccount.com
Créer une VM TPU dans tpu_project
Créez une VM TPU dans le tpu_project
à l'aide du compte de service dans le service_project
.
gcloud alpha compute tpus tpu-vm create $TPU_NAME \ --description=$TPU_NAME \ --accelerator-type=v5litepod-8 \ --version=tpu-vm-tf-2.17.0-pod \ --network=projects/$PROJECT_A/global/networks/$NETWORK \ --subnetwork=$SUBNET \ --internal-ips \ --service-account=$SERVICE_ACCOUNT_EMAIL \ --project=$TPU_PROJECT_ID \ --zone=$ZONE