교차 프로젝트 서비스 계정 사용
이 문서에서는 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