HyperPod Slurm cluster DPO 教程 (GPU) - 亚马逊 SageMaker AI
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

HyperPod Slurm cluster DPO 教程 (GPU)

以下教程设置了 Slurm 环境,并在 Llama 80 亿参数模型上启动直接偏好优化 (DPO) 作业。

先决条件

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

  • 设置 HyperPod GPU Slurm 集群

    • 你的 HyperPod Slurm 集群必须启用 Nvidia Enroot 和 Pyxis(默认情况下它们处于启用状态)。

  • 共享存储位置。它可以是可从群集节点访问的 Amazon FSx 文件系统或 NFS 系统。

  • 采用以下格式之一的标记化二进制偏好数据集:

    • JSON

    • JSONGZ(压缩 JSON)

    • 箭头

  • (可选)如果您需要预先训练的权重, HuggingFace 或者您正在训练 Llama 3.2 模型,则必须在开始训练之前获取 HuggingFace 代币。有关获取令牌的更多信息,请参阅用户访问令牌

设置 HyperPod GPU Slurm 环境

要在 Slurm 集群上启动训练作业,请执行以下操作:

  • 通过 SSH 进入你的 Slurm 集群的主节点。

  • 登录后,设置虚拟环境。确保你使用的是 Python 3.9 或更高版本。

    #set up a virtual environment python3 -m venv ${PWD}/venv source venv/bin/activate
  • 将 SageMaker HyperPod 配方和 SageMaker HyperPod 适配器存储库克隆到共享存储位置。共享存储位置可以是可从群集节点访问的 Amazon FSx 文件系统或 NFS 系统。

    git clone https://github.com/aws/sagemaker-hyperpod-training-adapter-for-nemo.git git clone --recursive https://github.com/aws/sagemaker-hyperpod-recipes.git cd sagemaker-hyperpod-recipes pip3 install -r requirements.txt
  • 使用 Enroot 创建一个压缩文件。要查找 SMP 容器的最新版本,请参阅 SageMaker 模型并行度库的发行说明。有关使用 Enroot 文件的更多信息,请参阅构建 Amazon经过优化的 Nemo- Launcher 镜像。

    REGION="<region>" IMAGE="658645717510.dkr.ecr.${REGION}.amazonaws.com/smdistributed-modelparallel:2.4.1-gpu-py311-cu121" aws ecr get-login-password --region ${REGION} | docker login --username AWS --password-stdin 658645717510.dkr.ecr.${REGION}.amazonaws.com enroot import -o $PWD/smdistributed-modelparallel.sqsh dockerd://${IMAGE} mv $PWD/smdistributed-modelparallel.sqsh "/fsx/<any-path-in-the-shared-filesystem>"
  • 要使用 Enroot squash 文件开始训练,请使用以下示例修改该recipes_collection/config.yaml文件。

    container: /fsx/path/to/your/smdistributed-modelparallel.sqsh

启动训练作业

要在单个 Slurm 计算节点上启动序列长度为 8192 的 Llama 80 亿参数模型的 DPO 作业,请将启动脚本设置为以下内容:launcher_scripts/llama/run_hf_llama3_8b_seq8k_gpu_dpo.sh

  • IMAGE: 环境设置部分中的容器。

  • HF_MODEL_NAME_OR_PATH:在配方的 hf_model_name_or_path 参数中定义预训练权重的名称或路径。

  • (可选)如果您需要预先训练的权重,则 HuggingFace 可以通过设置以下键值对来提供 HuggingFace 标记:

    recipes.model.hf_access_token=${HF_ACCESS_TOKEN}
注意

在此设置中用于 DPO 的参考模型是从正在训练的基础模型自动派生出来的(没有明确定义单独的参考模型)。DPO 特定的超参数已使用以下默认值进行预配置:

  • beta: 0.1(控制 KL 背离正则化的强度)

  • label_smoothing: 0.0(不对首选项标签应用平滑)

recipes.dpo.beta=${BETA} recipes.dpo.label_smoothing=${LABEL_SMOOTHING}
#!/bin/bash IMAGE="${YOUR_IMAGE}" SAGEMAKER_TRAINING_LAUNCHER_DIR="${SAGEMAKER_TRAINING_LAUNCHER_DIR:-${PWD}}" TRAIN_DIR="${YOUR_TRAIN_DIR}" # Location of training dataset VAL_DIR="${YOUR_VAL_DIR}" # Location of validation dataset # experiment output directory EXP_DIR="${YOUR_EXP_DIR}" HF_ACCESS_TOKEN="${YOUR_HF_TOKEN}" HF_MODEL_NAME_OR_PATH="${HF_MODEL_NAME_OR_PATH}" BETA="${BETA}" LABEL_SMOOTHING="${LABEL_SMOOTHING}" # Add hf_model_name_or_path and turn off synthetic_data HYDRA_FULL_ERROR=1 python3 ${SAGEMAKER_TRAINING_LAUNCHER_DIR}/main.py \ recipes=fine-tuning/llama/hf_llama3_8b_seq8k_gpu_dpo \ base_results_dir=${SAGEMAKER_TRAINING_LAUNCHER_DIR}/results \ recipes.run.name="hf_llama3_dpo" \ recipes.exp_manager.exp_dir="$EXP_DIR" \ recipes.model.data.train_dir="$TRAIN_DIR" \ recipes.model.data.val_dir="$VAL_DIR" \ recipes.model.hf_model_name_or_path="$HF_MODEL_NAME_OR_PATH" \ container="${IMAGE}" \ +cluster.container_mounts.0="/fsx:/fsx" \ recipes.model.hf_access_token="${HF_ACCESS_TOKEN}" \ recipes.dpo.enabled=true \ recipes.dpo.beta="${BETA}" \ recipes.dpo.label_smoothing="${LABEL_SMOOTHING}$" \

在前面的脚本中配置完所有必需的参数后,就可以通过运行训练作业来启动训练作业。

bash launcher_scripts/llama/run_hf_llama3_8b_seq8k_gpu_dpo.sh

有关 Slurm 集群配置的更多信息,请参阅。在 HyperPod Slurm 上运行训练作业