Usar uma conta de serviço entre projetos

Neste documento, descrevemos como usar uma conta de serviço entre projetos ao criar uma VM de TPU. Essa conta de serviço entre projetos fica em um projeto diferente da VM de TPU.

As instruções a seguir não consideram a VPC compartilhada nem o VPC Service Controls. Outras configurações ou permissões podem ser necessárias para permitir esse uso. Para mais informações, consulte Criar e modificar redes VPC compartilhadas e Visão geral do VPC Service Controls.

Antes de começar

Definir 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

Definir as permissões do IAM

  1. Permita que a conta de serviço use o papel de Agente de serviço da TPU no tpu_project.

    gcloud projects add-iam-policy-binding ${TPU_PROJECT_ID} \
    --member=serviceAccount:${SERVICE_ACCOUNT_EMAIL} \
    --role=roles/cloudtpu.serviceAgent
  2. Adicione o papel 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 carga de trabalho for executada em contêineres do Docker, permita que o Agente de serviço do Compute Engine acesse o 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

Criar uma VM de TPU em tpu_project

Crie uma VM de TPU em tpu_project usando 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