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