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
- Crie dois Google Cloud projetos. Um para conter a VM da TPU (
tpu_project
) e outro para conter a conta de serviço (service_project
). Para mais informações, consulte o artigo Criar e gerir projetos. - Crie uma conta de serviço no
service_project
. Para mais informações, consulte o artigo Criar e gerir contas de serviço. - Crie uma rede e ative o acesso privado à Google. Para mais informações, consulte os artigos Criar e gerir redes e Configure o acesso privado da Google para um endereço IP interno.
- Desative as seguintes políticas da organização. Para mais informações, consulte as
restrições da política da organização.
constraints/iam.disableCrossProjectServiceAccountUsage
em ambos os projetosconstraints/compute.vmExternalIpAccess
(para aceder à VM com SSH, opcional)
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
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
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
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