이 가이드에서는 Pathways 컨트롤러 구성요소와 동일한 클러스터에서 완료될 때까지 실행되는 JAX 학습 워크로드를 사용하여 일괄 워크로드를 실행하는 방법을 보여줍니다.
Google Kubernetes Engine(GKE) 클러스터 또는 Slurm이 있는 Cluster Director 클러스터에서 일괄 워크로드를 실행할 수 있습니다.
- GKE에서 JAX 워크로드가 완료되면 Pathways 클러스터 구성요소가 종료됩니다.
- 클러스터 디렉터에서 Pathways 컨트롤러 구성요소는 별도의 Slurm 작업으로 실행되므로 JAX 워크로드가 완료된 후에도 중지할 때까지 계속 실행됩니다.
이 페이지에는 두 플랫폼에 대한 안내가 모두 포함되어 있습니다. 각 섹션에서 GKE 또는 Cluster Director 탭을 선택합니다.
시작하기 전에
-
이 페이지의 샘플 사용 방법에 대한 탭을 선택하세요.
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 사용을 위한 인증을 참조하세요.
시작하기 전에
GKE
다음 기본 요건을 완료합니다.
- GKE 클러스터를 만듭니다.
- Cluster Toolkit 설정
- Kubernetes 도구 설치
- Kubernetes Engine API를 사용 설정합니다.
- Pathways 아티팩트 및 출력을 위한 Cloud Storage 버킷을 만듭니다.
Cluster Director
다음 기본 요건을 완료합니다.
- Cluster Director 클러스터를 만들고 Pathways 환경을 설정합니다.
- Pathways 스크래치 데이터 및 체크포인트를 작성할 수 있는 Cloud Storage 버킷을 만듭니다.
MaxText를 사용하여 학습 이미지 빌드
MaxText는 Google에서 개발한 오픈소스 대규모 언어 모델(LLM) 프로젝트입니다. JAX로 작성되었으며 Google Cloud TPU 및 GPU에서 효율적으로 실행되도록 설계되었습니다.
GKE
오픈소스 GitHub 저장소에서 최신 버전의 안정적인 JAX를 사용하여 MaxText Docker 이미지를 빌드하려면 다음 명령어를 실행합니다.
git clone https://github.com/AI-Hypercomputer/maxtext cd maxtext gcloud config set project PROJECT_ID bash src/dependencies/scripts/docker_build_dependency_image.sh MODE=stable gcloud auth configure-docker # This script needs bash version >= 4.2 to execute. bash src/dependencies/scripts/docker_upload_runner.sh \ CLOUD_IMAGE_NAME=USER_runner
다음을 바꿉니다.
PROJECT_ID:Google Cloud 프로젝트 ID입니다.USER:Google Cloud 사용자 ID
이 명령어는 MaxText Kubernetes 이미지를 gcr.io/PROJECT_ID/USER_runner에 푸시합니다.
이 Docker 이미지를 사용하면 Pathways 백엔드를 사용하여 TPU에서 학습을 실행할 수 있습니다.
Cluster Director
학습 이미지를 빌드할 필요가 없습니다. setup_env.sh가 /home/pathways의 Pathways 환경에 MaxText를 설치했고 run_maxtext.sh가 이를 실행합니다.
일괄 워크로드 실행
GKE
gcluster바이너리가PATH환경 변수에 없으면gcluster가 포함된 디렉터리를PATH에 추가합니다.export PATH="$PATH:CLUSTER_TOOLKIT_PATH"
CLUSTER_TOOLKIT_PATH를gcluster바이너리가 포함된 디렉터리의 절대 경로(예:$HOME/cluster-toolkit)로 바꿉니다.gcluster job submit명령어를 사용하여 사전 빌드된 MaxText Docker 이미지를 제출합니다.gcluster job submit \ --pathways \ --pathways-gcs-location="gs://BUCKET_NAME/pathways-artifacts" \ --name=WORKLOAD \ --cluster=CLUSTER \ --project=PROJECT_ID \ --location=LOCATION \ --num-slices=WORKLOAD_NODEPOOL_COUNT \ --compute-type=COMPUTE_TYPE \ --topology=TOPOLOGY \ --image="gcr.io/PROJECT_ID/USER_runner" \ --command="python3 -m maxtext.trainers.pre_train.train /deps/src/maxtext/configs/base.yml base_output_directory=gs://BUCKET_NAME per_device_batch_size=1 enable_checkpointing=false remat_policy=full global_parameter_scale=1 steps=20 max_target_length=2048 use_iota_embed=true reuse_example_batch=1 dataset_type=synthetic attention=flash gcs_metrics=True enable_single_controller=True run_name=RUN_NAME-pathways-job"
다음을 바꿉니다.
BUCKET_NAME: 출력을 위한 Cloud Storage 버킷입니다.WORKLOAD: 워크로드를 식별하는 고유한 이름입니다(DNS 라벨 제한으로 인해 22자(영문 기준) 이하).CLUSTER: GKE 클러스터의 이름입니다.PROJECT_ID:Google Cloud 프로젝트 ID입니다.LOCATION: GKE 클러스터의 리전 또는 영역입니다.WORKLOAD_NODEPOOL_COUNT: TPU 슬라이스 노드 풀 수입니다.COMPUTE_TYPE: TPU 머신 유형(예:ct6e-standard-4t) 각 TPU 버전에서 지원되는 TPU 유형에 대한 자세한 내용은 TPU 버전을 참조하세요.TOPOLOGY: TPU 배치 토폴로지(예:2x4)USER:Google Cloud 사용자 IDRUN_NAME: 워크플로 실행을 식별하기 위해 사용자가 할당한 이름입니다.
작업 제출 옵션에 대한 자세한 내용은 Cluster Toolkit 작업 제출 가이드를 참조하세요.
gcluster job logs명령어를 사용하여 워크로드 진행 상황을 추적합니다.gcluster job logs WORKLOAD \ --cluster=CLUSTER \ --project=PROJECT_ID \ --location=LOCATION \ --main-only \ --follow
출력은 다음과 비슷합니다.
completed step: 0, seconds: 1.259, TFLOP/s/device: 10.792, Tokens/s/device: 1626.636, total_weights: 65536, loss: 10.876, lm_loss: 10.876, perplexity: 52906.090 completed step: 1, seconds: 3.366, TFLOP/s/device: 4.036, Tokens/s/device: 608.366, total_weights: 65536, loss: 10.876, lm_loss: 10.876, perplexity: 52906.090 completed step: 2, seconds: 0.264, TFLOP/s/device: 51.415, Tokens/s/device: 7749.885, total_weights: 65536, loss: 10.563, lm_loss: 10.563, perplexity: 38665.316 completed step: 3, seconds: 1.025, TFLOP/s/device: 13.257, Tokens/s/device: 1998.187, total_weights: 65536, loss: 9.983, lm_loss: 9.983, perplexity: 21646.125 completed step: 4, seconds: 1.194, TFLOP/s/device: 11.376, Tokens/s/device: 1714.750, total_weights: 65536, loss: 9.462, lm_loss: 9.462, perplexity: 12864.218 completed step: 5, seconds: 1.185, TFLOP/s/device: 11.465, Tokens/s/device: 1728.203, total_weights: 65536, loss: 8.961, lm_loss: 8.961, perplexity: 7791.373선택사항: 워크로드가 완료되기 전에 취소하려면
gcluster job cancel명령어를 사용합니다.gcluster job cancel WORKLOAD \ --cluster=CLUSTER \ --project=PROJECT_ID \ --location=LOCATION
Cluster Director
~/pathways에서 클러스터의 로그인 노드에 다음 명령어를 실행합니다.
스크립트는 서로를 찾고 해당 디렉터리에 로그를 작성합니다.
Pathways 서비스를 시작합니다.
cd ~/pathways SLICE_SHAPE=TOPOLOGY \ MIN_SLICES=MIN_SLICES \ MAX_SLICES=MAX_SLICES \ GCS_BUCKET=gs://BUCKET_NAME \ sbatch start_pathways.sh
다음을 바꿉니다.
TOPOLOGY: 각 슬라이스의 TPU 토폴로지입니다. TPU 노드 세트의acceleratorTopology와 일치해야 합니다(예:2x4).MIN_SLICES: 학습을 시작하고 계속하는 데 필요한 최소 실행 슬라이스 수입니다.MAX_SLICES: 사용할 최대 슬라이스 수입니다. 일반적으로 노드 집합의 슬라이스 수입니다.BUCKET_NAME: Pathways 스크래치 데이터 및 체크포인트의 Cloud Storage 버킷입니다.
TPU 파티션이 클러스터의 기본 파티션이 아닌 경우
PARTITION을 해당 이름으로 설정합니다.로그
pathways-service-JOB_ID.out(여기서JOB_ID은 Slurm 작업 ID)에 다음과 비슷한 출력이 표시되면 서비스가 준비된 것입니다.Pathways Runtime Service is READY! Discovery file : /home/USER/pathways/cluster.env IFRT Proxy Target : grpc://RM_IP:29000 Running TPU Slices : 2 / 2 (min=2)MaxText 학습 워크로드를 제출합니다. 서비스 작업 직후에 제출할 수 있습니다. 서비스가 준비될 때까지 최대 1시간 동안 대기합니다.
sbatch run_maxtext.shMaxText 작업은 Pathways 서비스에 실행 중인 슬라이스가
MIN_SLICES개 이상 있을 때까지 기다린 후 학습을 시작합니다. 워크로드는 합성 데이터에서 Llama 3.1 8B를 학습시킵니다. 슬라이스 설정과 버킷은 서비스에서 가져오므로 이 작업에서 설정하지 마세요. 다음과 같은 선택적 변수를 설정할 수 있습니다.STEPS: 학습 단계 수입니다. 기본값은30입니다.CHECKPOINT_PERIOD: 체크포인트 간 단계 수입니다. 기본값은5입니다.BASE_OUTPUT_DIR: MaxText가 체크포인트를 작성하는 Cloud Storage 경로입니다. 기본값은gs://BUCKET_NAME/maxtext-runs입니다.REDUCED_LAYERS=1:2x2슬라이스에 대해 전체 32개 레이어 대신 8개 레이어 변형을 학습시킵니다.
워크로드 진행 상황을 따릅니다(
JOB_ID를 MaxText 작업의 Slurm 작업 ID로 바꿈). MaxText는 로그를 표준 오류에 기록합니다.tail -f maxtext-llama31-JOB_ID.err
각 학습 단계에서는 다음과 유사한 줄을 출력합니다.
completed step: 24, seconds: 0.326, live slice count: 2, TFLOP/s/device: 88.199, Tokens/s/device: 6289.27, total_weights: 32768, loss: 6.238서비스를 다시 시작하지 않고 나중에
run_maxtext.sh를 다시 제출할 수 있습니다.완료되면 워크로드를 중지한 후 Pathways 서비스를 중지합니다.
scancel -u ${USER} -n maxtext-llama31 scancel -u ${USER} -n pathways-service서비스를 취소하면 Pathways 작업자 작업도 취소됩니다. TPU VM은 정적 노드이므로 계속 실행되고 다른 Slurm 작업에 사용할 수 있습니다.
문제가 발생하면 Cloud에서 Pathways 문제 해결을 참조하세요.