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

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

  1. 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
  2. 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
  3. 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