教程——Amazon SageMaker HyperPod Checkpointless 预训练 Llama 3 70b - 亚马逊 SageMaker AI
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

教程——Amazon SageMaker HyperPod Checkpointless 预训练 Llama 3 70b

要运行无检查点训练食谱,需要执行以下步骤顺序。 HyperPod

先决条件

在开始设置环境之前,请确保您:

Kubernetes 环境设置

要设置你的 Kubernetes 环境,请执行以下操作:

  1. 设置虚拟环境。确保你使用的 Python 大于或等于 3.10 且低于 3.14。

    python3 -m venv ${PWD}/venv source venv/bin/activate
  2. 设置 kubectl 和 eksctl

  3. 安装头盔

  4. 连接到 Kubernetes 集群

    aws eks update-kubeconfig --region "${CLUSTER_REGION}" --name "${CLUSTER_NAME}"
  5. 使用下列方法之一安装依赖项:

    1. 方法 1: SageMaker HyperPod 食谱方法:

      # install SageMaker HyperPod Recipes. git clone --recursive git@github.com:aws/sagemaker-hyperpod-recipes.git cd sagemaker-hyperpod-recipes pip3 install -r requirements.txt
    2. 方法 2:使用预定义的作业 yaml 方法的 kubectl

      # install SageMaker HyperPod checkpointless training. git clone git@github.com:aws/sagemaker-hyperpod-checkpointless-training.git cd sagemaker-hyperpod-checkpointless-training

现在,你可以使用 NeMo样式启动器或 kubectl 启动无检查点训练配方。

方法 1:使用食谱启动器启动训练作业

或者,您可以使用 SageMaker HyperPod 食谱来提交您的训练作业。使用配方包括更新 k8s.yaml、config.yaml 和运行启动脚本。

  1. 更新 launcher_scripts/llama/run_checkpointless_llama3_70b_pretrain.sh

    深度学习容器。要查找 checkpointless 训练容器的最新版本,请参阅 checkpo intless 训练版本说明。

    #!/bin/bash SAGEMAKER_TRAINING_LAUNCHER_DIR=${SAGEMAKER_TRAINING_LAUNCHER_DIR:-"$(pwd)"} TRAIN_DIR="${TRAIN_DIR}" VAL_DIR="${VAL_DIR}" EXP_DIR="${EXP_DIR}" LOG_DIR="${LOG_DIR}" CONTAINER_MOUNT="/data" CONTAINER="${CONTAINER}" HYDRA_FULL_ERROR=1 python3 "${SAGEMAKER_TRAINING_LAUNCHER_DIR}/main.py" \ recipes=training/llama/checkpointless_llama3_70b_pretrain \ recipes.dataset.dataset_path="${TRAIN_DIR}" \ recipes.exp_manager.exp_dir="${EXP_DIR}" \ recipes.log_dir="${LOG_DIR}" \ recipes.data.global_batch_size=16 \ recipes.data.micro_batch_size=4 \ base_results_dir="${SAGEMAKER_TRAINING_LAUNCHER_DIR}/results" \ git.use_default=false \ cluster=k8s \ cluster_type=k8s \ container="${CONTAINER}" \ +cluster.hostNetwork=true \ +cluster.persistent_volume_claims.0.claimName=fsx-claim \ +cluster.persistent_volume_claims.0.mountPath="${CONTAINER_MOUNT}" \ +recipes.dataset.val_dataset_path="${VAL_DIR}" \ ++recipes.callbacks.3.test_fault_config.fault_prob_between_lock=1 \
  2. 启动训练作业

    bash launcher_scripts/llama/run_checkpointless_llama3_70b_pretrain.sh
  3. 提交训练作业后,可使用以下命令来验证您是否已成功提交该作业。

    kubectl get pods NAME READY STATUS RESTARTS AGE llama-3-70b-worker-0 0/1 running 0 36s
  4. 如果状态为 PENDING 或 ContainerCreating,请运行以下命令以获取更多详细信息

    kubectl describe pod <name of pod>
  5. 在作业 STATUS 更改为 Running 后,可使用以下命令检查日志。

    kubectl logs <name of pod>

    当你运行 kubectl get pod 时,状态将变为 “已完成”

方法 2:使用带有预定义的 yaml 的 kubectl 启动训练作业

另一种选择是使用预定义的作业 yaml 通过 kubectl 启动训练。

  1. 更新 examples/llama3/launch/pretrain_llama3_70b_checkpointless_p5.yaml

    • image:深度学习容器。要查找 checkpointless 训练容器的最新版本,请参阅 checkpo intless 训练版本说明。

    • resume.restore_config.path=<path_to_pretrained_weights>:在 “先决条件” 步骤中以 Nemo 格式下载预训练模型权重的路径。

    • dataset.dataset_path=<path_to_dataset>:存储在共享存储中的数据集的路径

  2. 使用 kubectl 提交作业 pretrain_llama3_70b_checkpointless_p5.yaml

    kubectl apply -f examples/llama3/launch/pretrain_llama3_70b_checkpointless_p5.yaml
  3. 提交训练作业后,可使用以下命令来验证您是否已成功提交该作业。

    kubectl get pods NAME READY STATUS RESTARTS AGE llama3-pretrain-checkpointless-worker-0 0/1 running 0 36s
  4. 如果状态为 PENDING 或 ContainerCreating,请运行以下命令以获取更多详细信息

    kubectl describe pod <name of pod>
  5. 在作业 STATUS 更改为 Running 后,可使用以下命令检查日志。

    kubectl logs <name of pod>

    当你运行 kubectl get pod 时,状态将变为 “已完成”