교차 프로젝트 서비스 계정 사용
이 문서에서는 TPU VM을 만들 때 교차 프로젝트 서비스 계정을 사용하는 방법을 간략히 설명합니다. 교차 프로젝트 서비스 계정은 TPU VM과 다른 프로젝트에 있는 서비스 계정입니다.
다음 안내는 공유 VPC 또는 VPC 서비스 제어를 고려하지 않습니다. 사용을 지원하려면 추가 구성이나 권한이 필요할 수 있습니다. 자세한 내용은 공유 VPC 네트워크 만들기 및 수정 및 VPC 서비스 제어 개요를 참고하세요.
시작하기 전에
- 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
IAM 권한 설정
서비스 계정이
tpu_project
에서 TPU 서비스 에이전트 역할을 사용하도록 허용합니다.gcloud projects add-iam-policy-binding ${TPU_PROJECT_ID} \ --member=serviceAccount:${SERVICE_ACCOUNT_EMAIL} \ --role=roles/cloudtpu.serviceAgent
TPU 서비스 에이전트에 serviceAccountUser 역할을 추가합니다.
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