Usar uma conta de serviço entre projetos
Este documento descreve como usar uma conta de serviço entre projetos ao criar uma VM do TPU. Uma conta de serviço entre projetos é uma conta de serviço localizada em um projeto diferente da VM da TPU.
As instruções a seguir não consideram a VPC compartilhada ou o VPC Service Controls. Outras configurações ou permissões podem ser necessárias para oferecer suporte a elas. Para mais informações, consulte Criar e modificar redes VPC compartilhadas e Visão geral do VPC Service Controls.
Antes de começar
- Crie dois Google Cloud projetos. Uma para conter a VM de TPU (
tpu_project
) e outra para conter a conta de serviço (service_project
). Para mais informações, consulte Criar e gerenciar projetos. - Crie uma conta de serviço no
service_project
. Para mais informações, consulte Como criar e gerenciar contas de serviço. - Crie uma rede e ative o Acesso privado do Google. Para mais informações, consulte Criar e gerenciar redes e Configurar o Acesso privado do Google para um endereço IP interno.
- Desative as seguintes políticas da organização. Para mais informações, consulte Restrições da política da organização.
constraints/iam.disableCrossProjectServiceAccountUsage
em ambos os projetosconstraints/compute.vmExternalIpAccess
(para acessar a VM com SSH, opcional)
Definir as 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 permissões do IAM
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
Adicione o papel serviceAccountUser ao agente de serviço do 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
Se a carga de trabalho estiver em execução 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
Crie uma VM de TPU no tpu_project
Crie uma VM TPU no 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