在本文档中,批处理工作负载是指执行到完成的 JAX 工作负载,这些工作负载部署在与 Pathways 集群相同的 GKE 集群中,特别是与 Pathways 控制器组件(IFRT 代理服务器和 Pathways 资源管理器)一起部署。 JAX 工作负载完成后,Pathways 集群组件会终止。本指南使用 JAX 训练工作负载来演示这一点。
准备工作
请确保您已备妥:
使用 Maxtext 构建训练映像
MaxText 是由 Google 开发的开源大语言模型 (LLM) 项目。它采用 JAX 编写,具有高性能和高可伸缩性,可在 Google Cloud TPU 和 GPU 上高效运行。
如需使用 OSS 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
此命令会将 MaxText Kubernetes 映像推送到 gcr.io/$PROJECT_ID/${USER}_runner。
您可以使用此 Docker 映像,通过 Pathways 后端在 TPU 上运行训练。
使用 Cluster Toolkit 运行批量工作负载
如果 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"
如需详细了解作业提交选项,请参阅 Cluster Toolkit 作业提交指南。
替换以下内容:
WORKLOAD:用于标识工作负载的唯一名称;由于 DNS 标签限制,此名称不得超过 22 个字符CLUSTER:GKE 集群的名称WORKLOAD_NODEPOOL_COUNT:TPU 切片节点池的数量COMPUTE_TYPE:TPU 机器类型(例如ct6e-standard-4t)。如需详细了解每个 TPU 版本支持的 TPU 类型,请参阅 TPU 版本。TOPOLOGY:TPU 放置拓扑(例如2x4)PROJECT_ID:您的 Google Cloud 项目 IDLOCATION:GKE 集群所在的区域或可用区USER:您的 Google Cloud 用户 IDBUCKET_NAME:用于输出的 Cloud Storage 存储桶RUN_NAME:用户分配的名称,用于标识工作流运行
使用 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