使用跨專案服務帳戶
本文件將概略說明如何在建立 TPU VM 時使用跨專案服務帳戶。跨專案服務帳戶是指位於 TPU VM 以外專案中的服務帳戶。
請注意,以下說明不考慮共用虛擬私人雲端或 VPC Service Controls。您可能需要額外設定或權限才能使用這些功能。詳情請參閱「建立及修改共用虛擬私有雲網路」和「VPC Service Controls 總覽」。
事前準備
- 建立兩個 Google Cloud 專案。一個用於容納 TPU VM (
tpu_project),另一個用於容納服務帳戶 (service_project)。詳情請參閱「建立及管理專案」一文。 - 在
service_project中建立服務帳戶。詳情請參閱「建立及管理服務帳戶」。 - 建立網路並啟用私人 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
設定身分與存取權管理權限
允許服務帳戶在
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
使用 service_project 中的服務帳戶,在 tpu_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