이 문서의 목적에 맞게 일괄 워크로드는 완료될 때까지 실행되고 Pathways 클러스터와 동일한 GKE 클러스터 내, 특히 Pathways 컨트롤러 구성요소 (IFRT 프록시 서버 및 Pathways 리소스 관리자)와 함께 배포되는 JAX 워크로드로 정의됩니다. JAX 워크로드가 완료되면 Pathways 클러스터 구성요소가 종료됩니다. 이 가이드에서는 JAX 학습 워크로드를 사용하여 이를 보여줍니다.
시작하기 전에
다음 사항이 필요합니다.
- GKE 클러스터를 만들었습니다.
- XPK를 설치했습니다.
- Kubernetes 도구를 설치했습니다.
- TPU API를 사용 설정했습니다.
- Google Kubernetes Engine API를 사용 설정했습니다.
Maxtext를 사용하여 학습 이미지 빌드
MaxText는 Google에서 개발한 오픈소스 대규모 언어 모델 (LLM) 프로젝트입니다. JAX로 작성되었으며 성능이 뛰어나고 확장 가능하도록 설계되어 Google Cloud TPU 및 GPU에서 효율적으로 실행됩니다.
OSS GitHub 저장소의 최신 안정화 JAX 버전을 사용하여 MaxText Docker 이미지를 빌드하려면 다음 명령어를 실행합니다.
git clone https://github.com/AI-Hypercomputer/maxtext cd maxtext/dependencies/scripts gcloud config set project PROJECT bash ./docker_build_dependency_image.sh MODE=stable gcloud auth configure-docker bash ./docker_upload_runner.sh CLOUD_IMAGE_NAME=USER_runner # This script needs bash version >= 4.2 to execute.
이 명령어는 MaxText Kubernetes 이미지를 gcr.io/$PROJECT/${USER}_runner에 푸시합니다.
이 Docker 이미지를 사용하여 Pathways 백엔드를 통해 TPU에서 학습을 실행할 수 있습니다.
PathwaysJob API를 사용하여 일괄 워크로드 실행
다음 매니페스트는 Pathways 구성요소를 배포하고 PathwaysJob API를 사용하여 MaxText
워크로드를 실행합니다.
워크로드는 main 컨테이너에 캡슐화되고 train.py를 실행합니다.
다음 YAML을 pathways-job-batch-training.yaml이라는 파일에 복사하고 수정 가능한 값을 업데이트합니다.
apiVersion: pathways-job.pathways.domain/v1 kind: PathwaysJob metadata: name: pathways-USER spec: maxRestarts: MAX_RESTARTS workers: - type: TPU_MACHINE_TYPE topology: TOPOLOGY numSlices: WORKLOAD_NODEPOOL_COUNT pathwaysDir: gs://BUCKET_NAME controller: deploymentMode: default template: spec: containers: - name: main image: gcr.io/PROJECT/USER_runner command: - bash - -c - | python3 -m MaxText.train /deps/src/MaxText/configs/base.yml \ base_output_directory=gs://BUCKET_NAME \ run_name=RUN_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
다음을 바꿉니다.
USER: 사용자 ID Google CloudMAX_RESTARTS: 작업을 다시 시작할 수 있는 최대 횟수TPU_MACHINE_TYPE: TPU 머신 유형TOPOLOGY: TPU v4 이상 토폴로지 TPU 버전 및 지원되는 토폴로지에 대한 자세한 내용은 TPU 버전을 참조하세요.WORKLOAD_NODEPOOL_COUNT: Pathways 워크로드에서 사용하는 노드 풀 수BUCKET_NAME: 임시 파일을 저장할 Cloud Storage 버킷PROJECT: your Google Cloud 프로젝트 IDRUN_NAME: 워크플로 실행을 식별하기 위해 사용자가 할당한 이름
다음과 같이 PathwaysJob YAML을 배포할 수 있습니다.
kubectl apply -f pathways-job-batch-training.yaml
이전 명령어로 만든 PathwaysJob 인스턴스를 보려면 다음을 사용합니다.
kubectl get pathwaysjob
출력은 다음과 같습니다.
NAME AGE pathways-trial 9s
PathwaysJob 인스턴스의 속성을 수정하려면 PathwaysJob 인스턴스를 삭제하고 YAML을 수정한 후 적용하여 새 PathwaysJob 인스턴스를 만듭니다.
컨테이너 이름 필터에서 main을 선택하여 JAX 컨테이너의 로그 탐색기로 이동하면 워크로드 진행 상황을 확인할 수 있습니다.
다음과 같은 로그가 표시되어야 합니다. 이는 학습이 진행 중임을 나타냅니다. 워크로드는 30단계 후에 완료됩니다.
completed step: 1, seconds: 0.484, TFLOP/s/device: 87.349, Tokens/s/device: 2117.382, total_weights: 2945, loss: 10.888 completed step: 2, seconds: 0.407, TFLOP/s/device: 103.699, Tokens/s/device: 2513.735, total_weights: 3253, loss: 9.697 completed step: 3, seconds: 0.248, TFLOP/s/device: 170.300, Tokens/s/device: 4128.167, total_weights: 3154, loss: 9.641 completed step: 4, seconds: 0.216, TFLOP/s/device: 195.122, Tokens/s/device: 4729.880, total_weights: 3119, loss: 9.547 completed step: 5, seconds: 0.272, TFLOP/s/device: 155.298, Tokens/s/device: 3764.512, total_weights: 2837, loss: 10.179 completed step: 6, seconds: 0.472, TFLOP/s/device: 89.489, Tokens/s/device: 2169.266, total_weights: 3069, loss: 9.776
PathwaysJob 인스턴스를 삭제하려면 다음 명령어를 사용하면 됩니다.
kubectl delete -f pathways-job-batch-training.yaml
XPK를 사용하여 일괄 워크로드 실행
이제 이전에 사용한 동일한 명령어를 사용하여 XPK로 사전 빌드된 Maxtext Docker 이미지를 제출할 수 있습니다.
xpk workload create-pathways \ --workload=WORKLOAD \ --cluster=CLUSTER \ --num-slices=WORKLOAD_NODEPOOL_COUNT \ --tpu-type=TPU_TYPE \ --project=PROJECT \ --zone=ZONE \ --docker-image='gcr.io/PROJECT/USER_runner' \ --command="python3 -m MaxText.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"
다음을 바꿉니다.
WORKLOAD: 워크로드를 식별하는 고유한 이름CLUSTER: GKE 클러스터의 이름WORKLOAD_NODEPOOL_COUNT: 작업을 다시 시작할 수 있는 최대 횟수TPU_TYPE: TPU 유형은 만들려는 Cloud TPU의 버전과 크기를 지정합니다. TPU 버전마다 지원되는 TPU 유형에 대한 자세한 내용은 TPU 버전을 참조하세요.PROJECT: you Google Cloud 프로젝트 IDZONE: 워크로드를 실행할 영역USER: 사용자 ID Google CloudRUN_NAME: 워크플로 실행을 식별하기 위해 사용자가 할당한 이름
다음과 같은 출력이 표시되어야 합니다.
[XPK] Follow your Pathways workload and other resources here : https://console.cloud.google.com/logs/query;query=resource.type%3D"k8s_container"%0Aresource.labels.project_id%3D"<project-name>"%0Aresource.labels.location%3D"<your-zone>"%0Aresource.labels.cluster_name%3D"<your-cluster-name>"%0Aresource.labels.pod_name:"<your-pod-name>"%0Aseverity>%3DDEFAULT
이전 XPK 명령어의 출력에 있는 링크를 사용하여 워크로드 진행 상황을 확인합니다. 컨테이너 이름 필터에서 jax-tpu를 선택하여 JAX 컨테이너의 로그를 필터링할 수 있습니다.
completed step: 1, seconds: 0.484, TFLOP/s/device: 87.349, Tokens/s/device: 2117.382, total_weights: 2945, loss: 10.888 completed step: 2, seconds: 0.407, TFLOP/s/device: 103.699, Tokens/s/device: 2513.735, total_weights: 3253, loss: 9.697 completed step: 3, seconds: 0.248, TFLOP/s/device: 170.300, Tokens/s/device: 4128.167, total_weights: 3154, loss: 9.641 completed step: 4, seconds: 0.216, TFLOP/s/device: 195.122, Tokens/s/device: 4729.880, total_weights: 3119, loss: 9.547 completed step: 5, seconds: 0.272, TFLOP/s/device: 155.298, Tokens/s/device: 3764.512, total_weights: 2837, loss: 10.179 completed step: 6, seconds: 0.472, TFLOP/s/device: 89.489, Tokens/s/device: 2169.266, total_weights: 3069, loss: 9.776
워크로드는 지정된 단계 수 후에 완료됩니다. 워크로드를 조기에 종료하려면 다음 명령어를 사용합니다.
xpk workload delete --workload=WORKLOAD --cluster=CLUSTER --project=PROJECT --zone=ZONE
다음 단계
- Pathways를 사용하여 멀티 호스트 추론 실행
- Pathways로 대화형 워크로드 실행
- JAX 워크로드를 Pathways로 포팅
- Pathways를 사용한 복원력 있는 학습
- 클라우드에서 Pathways 문제 해결