Use uma conta de serviço entre projetos

Este documento descreve como usar uma conta de serviço entre projetos quando criar uma VM de TPU. Uma conta de serviço entre projetos é uma conta de serviço que está localizada num projeto diferente da VM da TPU.

Tenha em atenção que as instruções seguintes não têm em consideração a VPC partilhada nem os VPC Service Controls. Podem ser necessárias configurações ou autorizações adicionais para suportar a respetiva utilização. Para mais informações, consulte os artigos Crie e modifique redes de VPC partilhada e Vista geral do VPC Service Controls.

Antes de começar

Defina variáveis de ambiente

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

Defina autorizações de IAM

  1. Permita que a sua conta de serviço use a função de agente do serviço de TPU em tpu_project.

    gcloud projects add-iam-policy-binding ${TPU_PROJECT_ID} \
    --member=serviceAccount:${SERVICE_ACCOUNT_EMAIL} \
    --role=roles/cloudtpu.serviceAgent
  2. Adicione a função serviceAccountUser ao agente de serviço da 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. Se a sua carga de trabalho estiver a ser executada em contentores Docker, permita que o agente de serviço do Compute Engine aceda ao servidor de metadados.

    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

Crie uma VM da TPU no tpu_project

Crie uma VM de TPU no tpu_project com a conta de serviço no 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