이 페이지에서는 플랫폼 관리자와 머신러닝(ML) 엔지니어가 Slurm 조정 Cluster Director 클러스터를 만들고 Pathways 워크로드에 맞게 구성하는 방법을 보여줍니다. 이 단계를 완료하면 TPU v6e 슬라이스, CPU 컨트롤러 노드, 공유 Google Cloud Managed Lustre 파일 시스템, /home/pathways 런타임 환경으로 클러스터를 프로비저닝합니다. Pathways는 Cluster Director 클러스터에 사전 설치되어 있지 않습니다. 클러스터를 만든 후 Pathways 스크립트를 로그인 노드에 다운로드하고 설정 스크립트를 한 번 실행합니다.
시작하기 전에
-
이 페이지의 샘플 사용 방법에 대한 탭을 선택하세요.
gcloud
Google Cloud CLI를 설치한 후 제휴 ID로 gcloud CLI에 로그인합니다. 로그인한 후 다음 명령어를 실행하여 Google Cloud CLI를 초기화합니다.
gcloud initREST
로컬 개발 환경에서 이 페이지의 REST API 샘플을 사용하려면 gcloud CLI에 제공한 사용자 인증 정보를 사용합니다.
Google Cloud CLI를 설치한 후 제휴 ID로 gcloud CLI에 로그인합니다.
자세한 내용은 Google Cloud 인증 문서의 REST 사용을 위한 인증을 참조하세요.
시작하기 전에
시작하기 전에 다음의 사건 요건을 완료하세요.
- Google Cloud CLI를 설치합니다.
- Hypercompute Cluster API를 사용 설정합니다.
- 사용자 계정과 Compute Engine 기본 서비스 계정에 Cluster Director 클러스터를 만들고 연결하는 데 필요한 Identity and Access Management(IAM) 역할이 있는지 확인합니다. 역할 목록은 Cluster Director 빠른 시작의 시작하기 전에를 참조하세요.
- 클러스터를 만들려는 영역에 TPU v6e 예약을 만듭니다(예:
2x4슬라이스 2개에 대해ct6e-standard-4tVM 최소 4개). - 자동 슬라이스 복구를 위해 클러스터 노드에서 비밀번호 없는
sudo를 구성합니다. 관리자에게 프로젝트에 대한 Compute OS 관리자 로그인(roles/compute.osAdminLogin) 역할을 부여해 달라고 요청하세요. - Pathways 스크래치 데이터 및 워크로드 출력을 위한 Cloud Storage 버킷을 만들고 프로젝트의 스토리지 객체 사용자(
roles/storage.objectUser) 역할을 사용자 계정과 Compute Engine 기본 서비스 계정에 부여합니다.
로컬 환경 설정
Google Cloud 사용자 인증 정보로 로그인합니다.
gcloud auth login
워크로드에 적합한 값으로 다음 환경 변수를 정의합니다.
export PROJECT=PROJECT_ID export REGION=REGION export ZONE=ZONE export CLUSTER_ID=CLUSTER_ID export RESERVATION_NAME=RESERVATION_NAME
다음을 바꿉니다.
PROJECT_ID:Google Cloud 프로젝트 ID입니다.REGION: 리소스를 만드는 리전입니다.ZONE: 리소스를 만드는 영역입니다.CLUSTER_ID: 클러스터 이름입니다. 이름은 최대 10자(영문 기준)까지 가능하며 숫자와 소문자만 사용할 수 있습니다.RESERVATION_NAME:ZONE의 TPU v6e 예약 이름입니다.
Cluster Director 클러스터 만들기
다음 예시에서는 예약에서 TPU v6e 2x4 슬라이스 2개(ct6e-standard-4t VM 4개)와 Pathways 컨트롤러의 CPU 노드 1개로 클러스터를 만듭니다. 모든 노드는 /home에서 공유 Managed Lustre 파일 시스템을 마운트합니다. 클러스터 정의의 필드에 대한 자세한 내용은 커스텀 클러스터 만들기를 참조하세요.
REST API를 사용하여 클러스터를 만듭니다.
요청 본문을 만듭니다.
cat <<EOF > "${CLUSTER_ID}_create.json" { "networkResources": { "net": { "config": { "newNetwork": { "network": "projects/${PROJECT}/global/networks/${CLUSTER_ID}-net" } } } }, "storageResources": { "home": { "config": { "newLustre": { "lustre": "projects/${PROJECT}/locations/${ZONE}/instances/${CLUSTER_ID}-lustre", "filesystem": "lustre", "capacityGb": "18000", "perUnitStorageThroughput": "500" } } } }, "computeResources": { "crtpu": { "config": { "newReservedInstances": { "reservation": "projects/${PROJECT}/zones/${ZONE}/reservations/${RESERVATION_NAME}" } } }, "crcpu": { "config": { "newOnDemandInstances": { "zone": "${ZONE}", "machineType": "n2-highmem-32" } } } }, "orchestrator": { "slurm": { "loginNodes": { "count": "1", "zone": "${ZONE}", "machineType": "n2-standard-16", "enableOsLogin": true, "enablePublicIps": true, "bootDisk": { "type": "pd-balanced", "sizeGb": "100" }, "storageConfigs": [ { "id": "home", "localMount": "/home" } ] }, "nodeSets": [ { "id": "nstpu", "computeId": "crtpu", "staticNodeCount": "4", "maxDynamicNodeCount": "0", "enablePublicIps": true, "resourcePolicyConfig": { "acceleratorTopology": "2x4" }, "computeInstance": { "bootDisk": { "type": "hyperdisk-balanced", "sizeGb": "100" } }, "storageConfigs": [ { "id": "home", "localMount": "/home" } ] }, { "id": "nscpu", "computeId": "crcpu", "staticNodeCount": "1", "maxDynamicNodeCount": "0", "enablePublicIps": true, "computeInstance": { "bootDisk": { "type": "pd-balanced", "sizeGb": "100", "image": "projects/clusterdirector-public-images/global/images/family/tpu-v6e-v5p-ubuntu2204-slurm2605-v20260902" } }, "storageConfigs": [ { "id": "home", "localMount": "/home" } ] } ], "partitions": [ { "id": "tpu", "nodeSetIds": ["nstpu"] }, { "id": "cpu", "nodeSetIds": ["nscpu"] } ], "defaultPartition": "tpu", "config": { "requeueExitCodes": [1, 2, 134, 137, 139, 143] } } } } EOF그런 다음 요청을 전송합니다.
curl -s -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -d @"${CLUSTER_ID}_create.json" \ "https://hypercomputecluster.googleapis.com/v1alpha/projects/${PROJECT}/locations/${REGION}/clusters?clusterId=${CLUSTER_ID}"클러스터에는 다음이 포함됩니다.
tpu파티션: 예약된 TPU v6e VM의 정적 노드 세트입니다.staticNodeCount은 VM 수이고acceleratorTopology은 각 슬라이스의 토폴로지입니다. 각ct6e-standard-4tVM에는 칩이 4개 있으므로2x4슬라이스에는 VM이 2개 있습니다. 슬라이스가 더 많은 경우 곱합니다.2x4슬라이스 2개에는4의staticNodeCount가 필요합니다.cpu파티션: Pathways 리소스 관리자, IFRT 프록시 서버, MaxText 클라이언트를 실행하는 주문형 VM 1개 Pathways 스크립트는cpu이라는 파티션에 작업을 제출합니다. Pathways 서비스와 MaxText가 체크포인트를 저장하는 동안 최대 240GB의 메모리가 필요하므로 VM은n2-highmem-32머신 유형을 사용합니다. 또한 Pathways 서비스가 이 VM에서 TPU 워커 작업을 제출하므로 TPU 슬라이스를 지원하는 Slurm 26.05가 포함된 이미지를 사용합니다.requeueExitCodes: Slurm은 이러한 코드 중 하나로 종료되는 작업을 다시 큐에 추가합니다. 이 설정을 사용하면 슬라이스의 VM이 선점될 때 Slurm이 첫 번째 VM뿐만 아니라 TPU 워커 작업을 다시 시작할 수 있습니다.
클러스터가 준비될 때까지 기다립니다. Google Cloud 콘솔의 Cluster Director 페이지에서 진행 상황을 확인하거나 다음 명령어의 출력에서
reconciling가false인지 확인할 수 있습니다.curl -s \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://hypercomputecluster.googleapis.com/v1alpha/projects/${PROJECT}/locations/${REGION}/clusters/${CLUSTER_ID}"
Pathways 환경 설정
Pathways 환경은 공유 파일 시스템의 /home/pathways에 있으므로 클러스터당 한 번 설정합니다. 여기에는 Pathways 컨테이너 이미지, JAX 및 pathwaysutils가 포함된 Python 환경, Pathways 스크립트가 포함됩니다.
로그인 노드에 연결합니다. 연결하는 다른 방법은 클러스터에 연결을 참조하세요.
gcloud compute ssh ${CLUSTER_ID}-login-001 \ --project=${PROJECT} \ --zone=${ZONE} \ --tunnel-through-iapcpu및tpu파티션이 존재하고idle상태인지 확인합니다.sinfo -o "%P %a %D %T %N %f"출력은 다음과 비슷합니다.
PARTITION AVAIL NODES STATE NODELIST FEATURES tpu* up 4 idle ${CLUSTER_ID}-nstpu-[0-3] cpu up 1 idle ${CLUSTER_ID}-nscpu-0Pathways 스크립트를 로그인 노드에 다운로드합니다.
mkdir -p ~/pathways-scripts && cd ~/pathways-scripts for f in setup_env.sh start_pathways.sh run_worker_slice.sh run_maxtext.sh; do curl -fsSLO "https://raw.githubusercontent.com/GoogleCloudPlatform/slurm-gcp/tpu-2605/pathways/scripts/${f}" done이 명령어는 다음 스크립트를 다운로드합니다.
setup_env.sh: Pathways 환경의 일회성 설정을 수행합니다.start_pathways.sh: Pathways 서비스를 시작합니다.run_worker_slice.sh: 하나의 TPU 슬라이스에 대해 Pathways 워커를 시작합니다(start_pathways.sh에서 제출).run_maxtext.sh: MaxText 학습 워크로드 예시를 실행합니다.
설정 스크립트를 실행합니다. 5분 정도 소요됩니다.
chmod +x *.sh ./setup_env.sh스크립트는 Pathways 서버 및 프록시 이미지를 가져오고, JAX,
pathwaysutils, MaxText를 사용하여 Python 환경을 빌드하고, 스크립트를/home/pathways에 복사하고,~/pathways를/home/pathways에 연결합니다. 다음과 비슷한 출력으로 끝납니다.Environment ready: JAX 0.11.1선택사항: 다른 클러스터 사용자에게 Pathways 환경에 대한 액세스 권한을 부여하려면
/home/pathways을 홈 디렉터리에 연결하도록 합니다.ln -sfn /home/pathways ~/pathways
이제 클러스터가 Pathways를 사용할 준비가 되었습니다. 일괄 워크로드와 대화형 워크로드는 서로 다른 설정으로 Pathways 서비스를 시작하므로 워크로드 실행의 일부로 Pathways 서비스를 시작합니다. 자세한 내용은 Pathways로 일괄 워크로드 실행 및 Pathways로 대화형 워크로드 실행을 참조하세요.
문제가 발생하면 Cloud에서 Pathways 문제 해결을 참조하세요.
삭제
이 페이지에서 사용한 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 완료 후 Cluster Director 클러스터를 삭제합니다.
curl -s -X DELETE \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://hypercomputecluster.googleapis.com/v1alpha/projects/${PROJECT}/locations/${REGION}/clusters/${CLUSTER_ID}"