Usa una cuenta de servicio entre proyectos
En este documento, se describe cómo usar una cuenta de servicio entre proyectos cuando se crea una VM de TPU. Una cuenta de servicio entre proyectos es una cuenta de servicio que se encuentra en un proyecto diferente al de la VM de TPU.
Ten en cuenta que las siguientes instrucciones no tienen en cuenta la VPC compartida ni los Controles del servicio de VPC. Es posible que se requieran configuraciones o permisos adicionales para admitir su uso. Para obtener más información, consulta Crea y modifica VPC compartida compartidas y Descripción general de los Controles del servicio de VPC.
Antes de comenzar
- Crea dos Google Cloud proyectos. Uno para contener la VM de TPU (
tpu_project
) y otro para contener la cuenta de servicio (service_project
). Para obtener más información, consulta Cómo crear y administrar proyectos. - Crea una cuenta de servicio en
service_project
. Para obtener más información, consulta Crea y administra cuentas de servicio. - Crea una red y habilita el Acceso privado a Google. Para obtener más información, consulta Cómo crear y administrar redes y Configura el Acceso privado a Google para una dirección IP interna.
- Inhabilita las siguientes políticas de la organización. Para obtener más información, consulta las restricciones de las políticas de la organización.
constraints/iam.disableCrossProjectServiceAccountUsage
en ambos proyectosconstraints/compute.vmExternalIpAccess
(para acceder a la VM con SSH, opcional)
Define las variables de entorno.
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
Configura los permisos de IAM
Permite que tu cuenta de servicio use el rol de agente de servicios de TPU en
tpu_project
.gcloud projects add-iam-policy-binding ${TPU_PROJECT_ID} \ --member=serviceAccount:${SERVICE_ACCOUNT_EMAIL} \ --role=roles/cloudtpu.serviceAgent
Agrega el rol serviceAccountUser al agente de servicio de 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
Si tu carga de trabajo se ejecuta en contenedores de Docker, permite que el agente de servicio de Compute Engine acceda al servidor de metadatos.
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
Crea una VM de TPU en tpu_project
Crea una VM de TPU en tpu_project
con la cuenta de servicio en 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