使用跨项目服务账号
本文档简要介绍了如何在创建 TPU 虚拟机时使用跨项目服务账号。跨项目服务账号是指位于与 TPU 虚拟机位于不同项目中的服务账号。
请注意,以下说明未考虑共享 VPC 或 VPC Service Controls。您可能需要进行额外的配置或获得额外的权限,才能使用这些功能。如需了解详情,请参阅创建和修改共享 VPC 网络以及 VPC Service Controls 概览。
准备工作
- 创建两个 Google Cloud 项目。一个用于包含 TPU 虚拟机 (
tpu_project
),另一个用于包含服务账号 (service_project
)。如需了解详情,请参阅创建和管理项目。 - 在
service_project
中创建一个服务账号。如需了解详情,请参阅创建和管理服务账号。 - 创建网络并启用专用 Google 访问通道。如需了解详情,请参阅创建和管理网络以及为内部 IP 地址配置专用 Google 访问通道。
- 停用以下组织政策。如需了解详情,请参阅组织政策限制条件。
- 两个项目中的
constraints/iam.disableCrossProjectServiceAccountUsage
constraints/compute.vmExternalIpAccess
(用于通过 SSH 访问虚拟机,可选)
- 两个项目中的
定义环境变量
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 权限
允许您的服务账号在
tpu_project
中使用 TPU Service Agent 角色。gcloud projects add-iam-policy-binding ${TPU_PROJECT_ID} \ --member=serviceAccount:${SERVICE_ACCOUNT_EMAIL} \ --role=roles/cloudtpu.serviceAgent
将 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
如果您的工作负载在 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