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
- Crie dois projetos do Google Cloud . Um deles é destinado à VM de TPU (
tpu_project) e o outro à 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 políticas da organização abaixo. Para mais informações, consulte
Restrições de políticas da organização.
constraints/iam.disableCrossProjectServiceAccountUsagenos dois projetos;constraints/compute.vmExternalIpAccess(para acessar a VM com SSH, opcional).
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
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 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
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