使用跨專案服務帳戶
本文說明如何建立 TPU VM 時使用跨專案服務帳戶。跨專案服務帳戶是指位於 TPU VM 以外專案的服務帳戶。
請注意,下列操作說明未考量共用虛擬私有雲或 VPC Service Controls。可能需要額外設定或權限才能使用。詳情請參閱「建立及修改共用虛擬私有雲網路」和「VPC Service Controls 總覽」。
事前準備
- 建立兩個 Google Cloud 專案。一個用於存放 TPU VM (
tpu_project),另一個用於存放服務帳戶 (service_project)。詳情請參閱建立及管理專案。 - 在
service_project中建立服務帳戶。詳情請參閱「建立及管理服務帳戶」。 - 建立網路並啟用 Private Google 存取權。詳情請參閱「建立及管理網路」和「為內部 IP 位址設定私人 Google 存取權」。
- 停用下列機構政策。詳情請參閱「組織政策限制」。
constraints/iam.disableCrossProjectServiceAccountUsage兩個專案中constraints/compute.vmExternalIpAccess(透過 SSH 存取 VM,選用)
定義環境變數
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 服務代理人角色。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 VM
在 tpu_project 中使用 service_project 的服務帳戶建立 TPU VM。
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