使用跨项目服务账号

本文档简要介绍了如何在创建 TPU 虚拟机时使用跨项目服务账号。跨项目服务账号是指位于与 TPU 虚拟机位于不同项目中的服务账号。

请注意,以下说明未考虑共享 VPC 或 VPC Service Controls。您可能需要进行额外的配置或获得额外的权限,才能使用这些功能。如需了解详情,请参阅创建和修改共享 VPC 网络以及 VPC Service Controls 概览

准备工作

定义环境变量

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

设置 IAM 权限

  1. 允许您的服务账号在 tpu_project 中使用 TPU Service Agent 角色。

    gcloud projects add-iam-policy-binding ${TPU_PROJECT_ID} \
    --member=serviceAccount:${SERVICE_ACCOUNT_EMAIL} \
    --role=roles/cloudtpu.serviceAgent
  2. 将 serviceAccountUser 角色添加到 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
  3. 如果您的工作负载在 Docker 容器中运行,请允许 Compute Engine 服务代理访问元数据服务器。

    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

tpu_project 中创建 TPU 虚拟机

使用 service_project 中的服务账号在 tpu_project 中创建 TPU 虚拟机。

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