Usar una cuenta de servicio entre proyectos
En este documento se explica cómo usar una cuenta de servicio entre proyectos al crear una VM de TPU. Una cuenta de servicio entre proyectos es una cuenta de servicio que se encuentra en un proyecto distinto al de la VM de TPU.
Ten en cuenta que las siguientes instrucciones no tienen en cuenta la VPC compartida ni los Controles de Servicio de VPC. Es posible que se necesiten configuraciones o permisos adicionales para poder usarlos. Para obtener más información, consulta los artículos Crear y modificar redes de VPC compartida y Descripción general de Controles de Servicio de VPC.
Antes de empezar
- Crea dos Google Cloud proyectos. Uno para la VM de TPU (
tpu_project) y otro para la cuenta de servicio (service_project). Para obtener más información, consulta Crear y gestionar proyectos. - Crea una cuenta de servicio en la
service_project. Para obtener más información, consulta el artículo sobre cómo crear y gestionar cuentas de servicio. - Crea una red y habilita Acceso privado de Google. Para obtener más información, consulta los artículos Crear y gestionar redes y Configurar Acceso privado a Google para una dirección IP interna.
- Inhabilita las siguientes políticas de organización. Para obtener más información, consulta Restricciones de políticas de la organización.
constraints/iam.disableCrossProjectServiceAccountUsageen ambos proyectosconstraints/compute.vmExternalIpAccess(para acceder a la VM con SSH, opcional)
Definir 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
Establecer permisos de gestión de identidades y accesos
Permite que tu cuenta de servicio use el rol Agente de servicio de TPU en
tpu_project.gcloud projects add-iam-policy-binding ${TPU_PROJECT_ID} \ --member=serviceAccount:${SERVICE_ACCOUNT_EMAIL} \ --role=roles/cloudtpu.serviceAgent
Añade 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 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 de 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