이 페이지에서는 플랫폼 관리자와 머신러닝(ML) 엔지니어가 Slurm 조정 Cluster Director 클러스터를 만들고 Pathways 워크로드에 맞게 구성하는 방법을 보여줍니다. 이 단계를 완료하면 TPU v6e 슬라이스, CPU 컨트롤러 노드, 공유 Google Cloud Managed Lustre 파일 시스템, /home/pathways 런타임 환경으로 클러스터를 프로비저닝합니다. Pathways는 Cluster Director 클러스터에 사전 설치되어 있지 않습니다. 클러스터를 만든 후 Pathways 스크립트를 로그인 노드에 다운로드하고 설정 스크립트를 한 번 실행합니다.
시작하기 전에
-
이 페이지의 샘플 사용 방법에 대한 탭을 선택하세요.
gcloud
Google Cloud 콘솔에서 Cloud Shell을 활성화합니다.
Google Cloud 콘솔 하단에서 Cloud Shell 세션이 시작되고 명령줄 프롬프트가 표시됩니다. Cloud Shell은 Google Cloud CLI가 사전 설치된 셸 환경으로, 현재 프로젝트의 값이 이미 설정되어 있습니다. 세션이 초기화되는 데 몇 초 정도 걸릴 수 있습니다.
REST
로컬 개발 환경에서 이 페이지의 REST API 샘플을 사용하려면 gcloud CLI에 제공한 사용자 인증 정보를 사용합니다.
Google Cloud CLI를 설치합니다.
외부 ID 공급업체(IdP)를 사용하는 경우 먼저 제휴 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}"
다음 단계
- Pathways로 일괄 워크로드 실행
- Pathways로 대화형 워크로드 실행
- Pathways를 사용한 복원력 있는 학습
- JAX 워크로드를 Pathways로 포팅
- Cloud의 Pathways 문제 해결