本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
教程——亚马逊 SageMaker HyperPod Checkpointless peft-Lora Llama 3 70b
要运行无检查点训练食谱,需要执行以下步骤顺序。 HyperPod
先决条件
在开始设置环境之前,请确保您:
拥有一个共享存储位置。它可以是可从群集节点访问的 Amazon FSx 文件系统或 NFS 系统。
-
拥有采用以下格式之一的数据:
JSON
JSONGZ(压缩 JSON)
ARROW
下载拥抱脸部模型的权重并转换为 Nemo 支持的格式
。 设置您的环境
Kubernetes 环境设置
要设置你的 Kubernetes 环境,请执行以下操作:
-
设置虚拟环境。确保你使用的 Python 大于或等于 3.10 且低于 3.14。
python3 -m venv ${PWD}/venv source venv/bin/activate -
连接到 Kubernetes 集群
aws eks update-kubeconfig --region "${CLUSTER_REGION}" --name "${CLUSTER_NAME}" -
使用下列方法之一安装依赖项:
-
方法 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:使用预定义的作业 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 和运行启动脚本。
-
更新
launcher_scripts/llama/run_checkpointless_llama3_70b_lora.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}" MODEL_NAME_OR_PATH="${MODEL_NAME_OR_PATH}" HYDRA_FULL_ERROR=1 python3 "${SAGEMAKER_TRAINING_LAUNCHER_DIR}/main.py" \ recipes=fine-tuning/llama/checkpointless_llama3_70b_lora \ recipes.dataset.dataset_path="${TRAIN_DIR}" \ recipes.exp_manager.exp_dir="${EXP_DIR}" \ recipes.log_dir="${LOG_DIR}" \ recipes.resume.restore_config.path="${MODEL_NAME_OR_PATH}" \ 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 \ -
启动训练作业
bash launcher_scripts/llama/run_checkpointless_llama3_70b_lora.sh -
提交训练作业后,可使用以下命令来验证您是否已成功提交该作业。
kubectl get pods NAME READY STATUS RESTARTS AGE llama-3-70b-worker-0 0/1 running 0 36s -
如果状态为 PENDING 或 ContainerCreating,请运行以下命令以获取更多详细信息
kubectl describe pod <name of pod> -
在作业 STATUS 更改为 Running 后,可使用以下命令检查日志。
kubectl logs <name of pod>当你运行 kubectl get pod 时,状态将变为 “已完成”
方法 2:使用带有预定义的 yaml 的 kubectl 启动训练作业
另一种选择是使用预定义的作业 yaml 通过 kubectl 启动训练。
-
更新
examples/llama3/launch/peft_llama3_70b_checkpointless_p5.yaml -
使用 kubectl 提交作业
peft_llama3_70b_checkpointless_p5.yamlkubectl apply -f examples/llama3/launch/peft_llama3_70b_checkpointless_p5.yaml -
提交训练作业后,可使用以下命令来验证您是否已成功提交该作业。
kubectl get pods NAME READY STATUS RESTARTS AGE llama3-70b-lora-checkpointless-worker-0 0/1 running 0 36s -
如果状态为 PENDING 或 ContainerCreating,请运行以下命令以获取更多详细信息
kubectl describe pod <name of pod> -
在作业 STATUS 更改为 Running 后,可使用以下命令检查日志。
kubectl logs <name of pod>当你运行 kubectl get pod 时,状态将变为 “已完成”