

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

# Amazon 中的无检查点培训 SageMaker HyperPod
<a name="sagemaker-eks-checkpointless"></a>

Amazon 上的 Checkpoint 无检查点培训 SageMaker HyperPod 可以更快地从培训基础设施故障中恢复。以下文档可帮助您开始使用无检查点训练和微调支持的模型。 NeMo

Checkpointless 培训具有以下先决条件：
+ [开始使用 Amazon EKS 支持 SageMaker HyperPod](sagemaker-hyperpod-eks-prerequisites.md)
+ [安装训练操作符](sagemaker-eks-operator-install.md)。 您必须安装 v1.2.0 或更高版本。

 无检查点训练建立在 [NVIDIA F SageMaker HyperPod ramewor NeMo k 用户](https://docs.nvidia.com/nemo-framework/user-guide/latest/nemotoolkit/core/exp_manager.html#experiment-manager)指南之上。您可以使用预先 SageMaker HyperPod 创建的食谱进行无检查点训练。如果你熟悉 NeMo，那么使用无检查点训练食谱的过程是相似的。只需稍作改动，您就可以开始使用无检查点训练功能训练模型，这些功能使您能够从训练错误中快速恢复。

以下 HyperPod 配方已预先配置了无检查点训练优化。您可以将数据路径指定为配方的一部分，并使用相关的启动脚本来运行训练（请参阅下面的快速入门指南）：


| 模型 | 方法 | Size | Nodes | 实例 | Accelerator | 指南 | Script | 教程 | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| GPT LOSS | 完整的微调示例 | 120b | 16 | p5.48xlarge | GPU H100 | [link](https://github.com/aws/sagemaker-hyperpod-recipes/tree/main/recipes_collection/recipes/fine-tuning/gpt_oss/checkpointless_gpt_oss_120b_full_fine_tuning.yaml) | [link](https://github.com/aws/sagemaker-hyperpod-recipes/tree/main/launcher_scripts/gpt_oss/run_checkpointless_gpt_oss_120b_full_fine_tuning.sh) | [link](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-eks-checkpointless-recipes-finetune.html) | 
| GPT LOSS | Lora-示例 | 120b | 2 | p5.48xlarge | GPU H100 | [link](https://github.com/aws/sagemaker-hyperpod-recipes/tree/main/recipes_collection/recipes/fine-tuning/gpt_oss/checkpointless_gpt_oss_120b_lora.yaml) | [link](https://github.com/aws/sagemaker-hyperpod-recipes/tree/main/launcher_scripts/gpt_oss/run_checkpointless_gpt_oss_120b_lora.sh) | [link](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-eks-checkpointless-recipes-peft.html) | 
| Llama3 | 预训练示例 | 70b | 16 | p5.48xlarge | GPU H100 | [link](https://github.com/aws/sagemaker-hyperpod-recipes/tree/main/recipes_collection/recipes/training/llama/checkpointless_llama3_70b_pretrain.yaml) | [link](https://github.com/aws/sagemaker-hyperpod-recipes/tree/main/launcher_scripts/llama/run_checkpointless_llama3_70b_pretrain.sh) | [link](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-eks-checkpointless-recipes-pretraining-llama3.html) | 
| Llama3 | Lora-示例 | 70b | 2 | p5.48xlarge | GPU H100 | [link](https://github.com/aws/sagemaker-hyperpod-recipes/tree/main/recipes_collection/recipes/fine-tuning/llama/checkpointless_llama3_70b_lora.yaml) | [link](https://github.com/aws/sagemaker-hyperpod-recipes/tree/main/launcher_scripts/llama/run_checkpointless_llama3_70b_lora.sh) | [link](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-eks-checkpointless-recipes-peft-llama.html) | 

以下快速入门指南提供了使用无检查点训练食谱的教程：

**入门示例**
+ [教程——Amazon SageMaker HyperPod Checkpointless Full Finetuning GPT OSS 120b](sagemaker-eks-checkpointless-recipes-finetune.md)
+ [教程——亚马逊 SageMaker HyperPod Checkpointless peft-Lora GPT OSS 120b](sagemaker-eks-checkpointless-recipes-peft.md)
+ [教程——Amazon SageMaker HyperPod Checkpointless 预训练 Llama 3 70b](sagemaker-eks-checkpointless-recipes-pretraining-llama3.md)
+ [教程——亚马逊 SageMaker HyperPod Checkpointless peft-Lora Llama 3 70b](sagemaker-eks-checkpointless-recipes-peft-llama.md)

如果您想对自定义模型进行预训练或微调，请参阅。[教程-Amazon SageMaker HyperPod Checkpointless 预训练或微调自定义模型](sagemaker-eks-checkpointless-recipes-custom.md)

要详细了解如何整合特定的无检查点训练组件，. [HyperPod 无检查点训练功能](sagemaker-eks-checkpointless-features.md) 

# Amazon SageMaker HyperPod 无检查点培训教程
<a name="sagemaker-eks-checkpointless-recipes"></a>

[ HyperPod 无检查点训练配方](https://github.com/aws/sagemaker-hyperpod-checkpointless-training)是预定义的作业配置，启用了无检查点训练功能。使用这些食谱，可以更轻松地开始无检查点训练。 HyperPod

**Topics**
+ [教程——Amazon SageMaker HyperPod Checkpointless Full Finetuning GPT OSS 120b](sagemaker-eks-checkpointless-recipes-finetune.md)
+ [教程——亚马逊 SageMaker HyperPod Checkpointless peft-Lora GPT OSS 120b](sagemaker-eks-checkpointless-recipes-peft.md)
+ [教程——Amazon SageMaker HyperPod Checkpointless 预训练 Llama 3 70b](sagemaker-eks-checkpointless-recipes-pretraining-llama3.md)
+ [教程——亚马逊 SageMaker HyperPod Checkpointless peft-Lora Llama 3 70b](sagemaker-eks-checkpointless-recipes-peft-llama.md)
+ [教程-Amazon SageMaker HyperPod Checkpointless 预训练或微调自定义模型](sagemaker-eks-checkpointless-recipes-custom.md)

# 教程——Amazon SageMaker HyperPod Checkpointless Full Finetuning GPT OSS 120b
<a name="sagemaker-eks-checkpointless-recipes-finetune"></a>

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

## 先决条件
<a name="sagemaker-eks-checkpointless-recipes-finetune-prereqs"></a>

在开始设置环境之前，请确保您：
+ [已在亚马逊启用亚马逊 EKS 支持 SageMaker HyperPod](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks-prerequisites.html)
+ [设置 HyperPod 训练操作员 (v1.2\$1)](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-eks-operator.html)
+ 拥有一个共享存储位置。它可以是可从群集节点访问的 Amazon FSx 文件系统或 NFS 系统。
+ 拥有采用以下格式之一的数据：
  + JSON
  + JSONGZ（压缩 JSON）
  + ARROW
+ [从源头为 Llama 70B 或 GPT-OSS 120B 选择支持的无检查点训练配方。](https://github.com/aws/sagemaker-hyperpod-recipes/tree/main/recipes_collection)
+ [下载拥抱脸部模型的权重](https://huggingface.co/docs/hub/models-downloading)并转换为 [Nemo 支持的格式](https://docs.nvidia.com/nemo-framework/user-guide/latest/nemo-2.0/features/hf-integration.html#importing-from-hugging-face)。
+ 设置您的环境

## Kubernetes 环境设置
<a name="sagemaker-eks-checkpointless-finetune-recipes-kubernetes"></a>

要设置你的 Kubernetes 环境，请执行以下操作：

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

   ```
   python3 -m venv ${PWD}/venv
   source venv/bin/activate
   ```

1. [设置 kubectl 和 eksctl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html)

1. [安装头盔](https://helm.sh/docs/intro/install/)

1. 连接到 Kubernetes 集群

   ```
   aws eks update-kubeconfig --region "${CLUSTER_REGION}" --name "${CLUSTER_NAME}"
   ```

1. 使用下列方法之一安装依赖项：

   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
      ```

   1. 方法 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 启动无检查点训练配方。

## 使用食谱启动器启动训练作业
<a name="sagemaker-eks-checkpointless-recipes-finetune-launcher"></a>

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

1. 更新 `launcher_scripts/gpt_oss/run_checkpointless_gpt_oss_120b_full_fine_tuning.sh`

   your\$1container：深度学习容器。要查找 checkpointless 训练容器的最新版本，请参阅 checkpo [intless](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-eks-checkpointless-release-notes.html) 训练版本说明。

   ```
   #!/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/gpt_oss/checkpointless_gpt_oss_120b_full_fine_tuning \
       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 \
   ```

1. 启动训练作业

   ```
   bash launcher_scripts/gpt_oss/run_checkpointless_gpt_oss_120b_full_fine_tuning.sh
   ```

提交训练作业后，可使用以下命令来验证您是否已成功提交该作业。

```
kubectl get pods

NAME                             READY   STATUS             RESTARTS        AGE
gpt-oss-120b-worker-0             0/1    running               0            36s
```

如果状态为 PENDING 或 ContainerCreating，请运行以下命令以获取更多详细信息

```
kubectl describe pod <name of pod>
```

在作业 STATUS 更改为 Running 后，可使用以下命令检查日志。

```
kubectl logs <name of pod>
```

在运行 `kubectl get pods` 时，`STATUS` 会变成 `COMPLETED`。

## 使用带有预定义的 yaml 的 kubectl 启动训练作业
<a name="sagemaker-eks-checkpointless-recipes-finetune-kubectl"></a>

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

1. 更新 \$1finetune\$1gpt\$1oss\$1120 examples/gpt\$1oss/launch/full b\$1checkpointless\$1p5.yaml
   + 图片：深度学习容器。要查找 checkpointless 训练容器的最新版本，请参阅 checkpo [intless](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-eks-checkpointless-release-notes.html) 训练版本说明。
   + [resume.restore\$1config.path=：在 “先决条件” 步骤中以 Nemo 格式下载预训练模型权重的路径。](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-eks-checkpointless-recipes-finetune.html#sagemaker-eks-checkpointless-recipes-finetune-prereqs) <path\$1to\$1pretrained\$1weights>
   + dataset.dataset\$1path=<path\$1to\$1dataset>：存储在共享存储中的数据集的路径

1. 使用 kubectl 和 full\$1finetune\$1gpt\$1oss\$1120b\$1checkpointless\$1p5.yaml 提交任务

   ```
   kubectl apply -f examples/gpt_oss/launch/full_finetune_gpt_oss_120b_checkpointless_p5.yaml
   ```

提交训练作业后，可使用以下命令来验证您是否已成功提交该作业。

```
kubectl get pods

NAME                             READY   STATUS             RESTARTS        AGE
gpt-oss-120b-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 时，状态将变为 “已完成”

# 教程——亚马逊 SageMaker HyperPod Checkpointless peft-Lora GPT OSS 120b
<a name="sagemaker-eks-checkpointless-recipes-peft"></a>

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

## 先决条件
<a name="sagemaker-eks-checkpointless-recipes-peft-prereqs"></a>

在开始设置环境之前，请确保您：
+ [已在亚马逊启用亚马逊 EKS 支持 SageMaker HyperPod](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks-prerequisites.html)
+ [设置 HyperPod 训练操作员 (v1.2\$1)](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-eks-operator.html)
+ 拥有一个共享存储位置。它可以是可从群集节点访问的 Amazon FSx 文件系统或 NFS 系统。
+ 拥有采用以下格式之一的数据：
  + JSON
  + JSONGZ（压缩 JSON）
  + ARROW
+ [从源头为 Llama 70B 或 GPT-OSS 120B 选择支持的无检查点训练配方。](https://github.com/aws/sagemaker-hyperpod-recipes/tree/main/recipes_collection)
+ [下载拥抱脸部模型的权重](https://huggingface.co/docs/hub/models-downloading)并转换为 [Nemo 支持的格式](https://docs.nvidia.com/nemo-framework/user-guide/latest/nemo-2.0/features/hf-integration.html#importing-from-hugging-face)。
+ 设置您的环境

## Kubernetes 环境设置
<a name="sagemaker-eks-checkpointless-recipes-peft-kubernetes"></a>

要设置你的 Kubernetes 环境，请执行以下操作：

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

   ```
   python3 -m venv ${PWD}/venv
   source venv/bin/activate
   ```

1. [设置 kubectl 和 eksctl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html)

1. [安装头盔](https://helm.sh/docs/intro/install/)

1. 连接到 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
     ```
   + kubectl 使用预定义的作业 yaml 方法

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

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

## 使用配方启动程序启动训练作业
<a name="sagemaker-eks-checkpointless-recipes-peft-recipes-launcher"></a>

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

1. 更新 `launcher_scripts/gpt_oss/run_checkpointless_gpt_oss_120b_lora.sh`

   your\$1contrainer：深度学习容器。要查找 checkpointless 训练容器的最新版本，请参阅 checkpo [intless](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-eks-checkpointless-release-notes.html) 训练版本说明。

   ```
   #!/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/gpt_oss/checkpointless_gpt_oss_120b_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 \
   ```

1. 启动训练作业

   ```
   bash launcher_scripts/gpt_oss/run_checkpointless_gpt_oss_120b_lora.sh
   ```

提交训练作业后，可使用以下命令来验证您是否已成功提交该作业。

```
kubectl get pods

NAME                             READY   STATUS             RESTARTS        AGE
gpt-oss-120b-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 时，状态将变为 “已完成”

## 使用带有预定义的 yaml 的 kubectl 启动训练作业
<a name="sagemaker-eks-checkpointless-recipes-peft-kubectl"></a>

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

1. 更新 \$1gpt\$1oss\$1120b\$1check examples/gpt\$1oss/launch/peft pointless\$1p5.yaml
   + 图片：深度学习容器。要查找 checkpointless 训练容器的最新版本，请参阅 checkpo [intless](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-eks-checkpointless-release-notes.html) 训练版本说明。
   + [resume.restore\$1config.path=：在 “先决条件” 步骤中以 Nemo 格式下载预训练模型权重的路径。](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-eks-checkpointless-recipes-peft.html#sagemaker-eks-checkpointless-recipes-peft-prereqs) <path\$1to\$1pretrained\$1weights>
   + dataset.dataset\$1path=<path\$1to\$1dataset>：存储在共享存储中的数据集的路径

1. 使用 kubectl 和 peft\$1gpt\$1oss\$1120b\$1checkpointless\$1p5.yaml 提交任务

   ```
   kubectl apply -f examples/gpt_oss/launch/peft_gpt_oss_120b_checkpointless_p5.yaml
   ```

提交训练作业后，可使用以下命令来验证您是否已成功提交该作业。

```
kubectl get pods

NAME                                             READY   STATUS             RESTARTS        AGE
gpt-120b-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 时，状态将变为 “已完成”

# 教程——Amazon SageMaker HyperPod Checkpointless 预训练 Llama 3 70b
<a name="sagemaker-eks-checkpointless-recipes-pretraining-llama3"></a>

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

## 先决条件
<a name="sagemaker-eks-checkpointless-recipes-pretraining-llama3-prereqs"></a>

在开始设置环境之前，请确保您：
+ [已在亚马逊启用亚马逊 EKS 支持 SageMaker HyperPod](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks-prerequisites.html)
+ [设置 HyperPod 训练操作员 (v1.2\$1)](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-eks-operator.html)
+ 拥有一个共享存储位置。它可以是可从群集节点访问的 Amazon FSx 文件系统或 NFS 系统。
+ 拥有采用以下格式之一的数据：
  + JSON
  + JSONGZ（压缩 JSON）
  + ARROW
+ [从源头为 Llama 70B 或 GPT-OSS 120B 选择支持的无检查点训练配方。](https://github.com/aws/sagemaker-hyperpod-recipes/tree/main/recipes_collection)
+ [下载拥抱脸部模型的权重](https://huggingface.co/docs/hub/models-downloading)并转换为 [Nemo 支持的格式](https://docs.nvidia.com/nemo-framework/user-guide/latest/nemo-2.0/features/hf-integration.html#importing-from-hugging-face)。
+ 设置您的环境

## Kubernetes 环境设置
<a name="sagemaker-eks-checkpointless-recipes-pretraining-llama3-kubernetes"></a>

要设置你的 Kubernetes 环境，请执行以下操作：

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

   ```
   python3 -m venv ${PWD}/venv
   source venv/bin/activate
   ```

1. [设置 kubectl 和 eksctl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html)

1. [安装头盔](https://helm.sh/docs/intro/install/)

1. 连接到 Kubernetes 集群

   ```
   aws eks update-kubeconfig --region "${CLUSTER_REGION}" --name "${CLUSTER_NAME}"
   ```

1. 使用下列方法之一安装依赖项：

   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
      ```

   1. 方法 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：使用食谱启动器启动训练作业
<a name="sagemaker-eks-checkpointless-recipes-pretraining-llama3-recipes-launcher"></a>

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

1. 更新 `launcher_scripts/llama/run_checkpointless_llama3_70b_pretrain.sh`

   深度学习容器。要查找 checkpointless 训练容器的最新版本，请参阅 checkpo [intless](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-eks-checkpointless-release-notes.html) 训练版本说明。

   ```
   #!/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 \
   ```

1. 启动训练作业

   ```
   bash launcher_scripts/llama/run_checkpointless_llama3_70b_pretrain.sh
   ```

1. 提交训练作业后，可使用以下命令来验证您是否已成功提交该作业。

   ```
   kubectl get pods
   
   NAME                             READY   STATUS             RESTARTS        AGE
   llama-3-70b-worker-0             0/1    running               0            36s
   ```

1. 如果状态为 PENDING 或 ContainerCreating，请运行以下命令以获取更多详细信息

   ```
   kubectl describe pod <name of pod>
   ```

1. 在作业 STATUS 更改为 Running 后，可使用以下命令检查日志。

   ```
   kubectl logs <name of pod>
   ```

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

## 方法 2：使用带有预定义的 yaml 的 kubectl 启动训练作业
<a name="sagemaker-eks-checkpointless-recipes-pretraining-llama3-kubectl"></a>

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

1. 更新 `examples/llama3/launch/pretrain_llama3_70b_checkpointless_p5.yaml`
   + `image`：深度学习容器。要查找 checkpointless 训练容器的最新版本，请参阅 checkpo [intless](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-eks-checkpointless-release-notes.html) 训练版本说明。
   + `resume.restore_config.path=<path_to_pretrained_weights>`：在 “先决[条件](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-eks-checkpointless-recipes-finetune.html#sagemaker-eks-checkpointless-recipes-finetune-prereqs)” 步骤中以 Nemo 格式下载预训练模型权重的路径。
   + `dataset.dataset_path=<path_to_dataset>`：存储在共享存储中的数据集的路径

1. 使用 kubectl 提交作业 `pretrain_llama3_70b_checkpointless_p5.yaml`

   ```
   kubectl apply -f examples/llama3/launch/pretrain_llama3_70b_checkpointless_p5.yaml
   ```

1. 提交训练作业后，可使用以下命令来验证您是否已成功提交该作业。

   ```
   kubectl get pods
   
   NAME                                             READY   STATUS             RESTARTS        AGE
   llama3-pretrain-checkpointless-worker-0             0/1    running               0            36s
   ```

1. 如果状态为 PENDING 或 ContainerCreating，请运行以下命令以获取更多详细信息

   ```
   kubectl describe pod <name of pod>
   ```

1. 在作业 STATUS 更改为 Running 后，可使用以下命令检查日志。

   ```
   kubectl logs <name of pod>
   ```

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

# 教程——亚马逊 SageMaker HyperPod Checkpointless peft-Lora Llama 3 70b
<a name="sagemaker-eks-checkpointless-recipes-peft-llama"></a>

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

## 先决条件
<a name="sagemaker-eks-checkpointless-recipes-peft-llama-prereqs"></a>

在开始设置环境之前，请确保您：
+ [已在亚马逊启用亚马逊 EKS 支持 SageMaker HyperPod](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks-prerequisites.html)
+ [设置 HyperPod 训练操作员 (v1.2\$1)](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-eks-operator.html)
+ 拥有一个共享存储位置。它可以是可从群集节点访问的 Amazon FSx 文件系统或 NFS 系统。
+ 拥有采用以下格式之一的数据：
  + JSON
  + JSONGZ（压缩 JSON）
  + ARROW
+ [从源头为 Llama 70B 或 GPT-OSS 120B 选择支持的无检查点训练配方。](https://github.com/aws/sagemaker-hyperpod-recipes/tree/main/recipes_collection)
+ [下载拥抱脸部模型的权重](https://huggingface.co/docs/hub/models-downloading)并转换为 [Nemo 支持的格式](https://docs.nvidia.com/nemo-framework/user-guide/latest/nemo-2.0/features/hf-integration.html#importing-from-hugging-face)。
+ 设置您的环境

## Kubernetes 环境设置
<a name="sagemaker-eks-checkpointless-recipes-peft-llama-kubernetes"></a>

要设置你的 Kubernetes 环境，请执行以下操作：

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

   ```
   python3 -m venv ${PWD}/venv
   source venv/bin/activate
   ```

1. [设置 kubectl 和 eksctl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html)

1. [安装头盔](https://helm.sh/docs/intro/install/)

1. 连接到 Kubernetes 集群

   ```
   aws eks update-kubeconfig --region "${CLUSTER_REGION}" --name "${CLUSTER_NAME}"
   ```

1. 使用下列方法之一安装依赖项：

   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
      ```

   1. 方法 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：使用食谱启动器启动训练作业
<a name="sagemaker-eks-checkpointless-recipes-peft-llama-recipes-launcher"></a>

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

1. 更新 `launcher_scripts/llama/run_checkpointless_llama3_70b_lora.sh`

   深度学习容器。要查找 checkpointless 训练容器的最新版本，请参阅 checkpo [intless](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-eks-checkpointless-release-notes.html) 训练版本说明。

   ```
   #!/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 \
   ```

1. 启动训练作业

   ```
   bash launcher_scripts/llama/run_checkpointless_llama3_70b_lora.sh
   ```

1. 提交训练作业后，可使用以下命令来验证您是否已成功提交该作业。

   ```
   kubectl get pods
   
   NAME                             READY   STATUS             RESTARTS        AGE
   llama-3-70b-worker-0             0/1    running               0            36s
   ```

1. 如果状态为 PENDING 或 ContainerCreating，请运行以下命令以获取更多详细信息

   ```
   kubectl describe pod <name of pod>
   ```

1. 在作业 STATUS 更改为 Running 后，可使用以下命令检查日志。

   ```
   kubectl logs <name of pod>
   ```

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

## 方法 2：使用带有预定义的 yaml 的 kubectl 启动训练作业
<a name="sagemaker-eks-checkpointless-recipes-peft-llama-kubectl"></a>

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

1. 更新 `examples/llama3/launch/peft_llama3_70b_checkpointless_p5.yaml`
   + `image`：深度学习容器。要查找 checkpointless 训练容器的最新版本，请参阅 checkpo [intless](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-eks-checkpointless-release-notes.html) 训练版本说明。
   + `resume.restore_config.path=<path_to_pretrained_weights>`：在 “先决[条件](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-eks-checkpointless-recipes-finetune.html#sagemaker-eks-checkpointless-recipes-finetune-prereqs)” 步骤中以 Nemo 格式下载预训练模型权重的路径。
   + `dataset.dataset_path=<path_to_dataset>`：存储在共享存储中的数据集的路径

1. 使用 kubectl 提交作业 `peft_llama3_70b_checkpointless_p5.yaml`

   ```
   kubectl apply -f examples/llama3/launch/peft_llama3_70b_checkpointless_p5.yaml
   ```

1. 提交训练作业后，可使用以下命令来验证您是否已成功提交该作业。

   ```
   kubectl get pods
   
   NAME                                             READY   STATUS             RESTARTS        AGE
   llama3-70b-lora-checkpointless-worker-0             0/1    running               0            36s
   ```

1. 如果状态为 PENDING 或 ContainerCreating，请运行以下命令以获取更多详细信息

   ```
   kubectl describe pod <name of pod>
   ```

1. 在作业 STATUS 更改为 Running 后，可使用以下命令检查日志。

   ```
   kubectl logs <name of pod>
   ```

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

# 教程-Amazon SageMaker HyperPod Checkpointless 预训练或微调自定义模型
<a name="sagemaker-eks-checkpointless-recipes-custom"></a>

要在自定义模型开启的情况下运行无检查点训练，需要执行以下步骤顺序。 HyperPod

## 先决条件
<a name="sagemaker-eks-checkpointless-recipes-custom-prereqs"></a>

在开始设置环境之前，请确保您：
+ [已在亚马逊启用亚马逊 EKS 支持 SageMaker HyperPod](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks-prerequisites.html)
+ [设置 HyperPod 训练操作员 (v1.2\$1)](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-eks-operator.html)
+ 拥有一个共享存储位置。它可以是可从群集节点访问的 Amazon FSx 文件系统或 NFS 系统。
+ 拥有采用以下格式之一的数据：
  + JSON
  + JSONGZ（压缩 JSON）
  + ARROW
+ [下载拥抱脸部模型的权重](https://huggingface.co/docs/hub/models-downloading)并转换为 [Nemo 支持的格式](https://docs.nvidia.com/nemo-framework/user-guide/latest/nemo-2.0/features/hf-integration.html#importing-from-hugging-face)。
+ 设置您的环境

## Kubernetes 环境设置
<a name="sagemaker-eks-checkpointless-recipes-custom-kubernetes"></a>

要设置你的 Kubernetes 环境，请执行以下操作：

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

   ```
   python3 -m venv ${PWD}/venv
   source venv/bin/activate
   ```

1. [设置 kubectl 和 eksctl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html)

1. 连接到 Kubernetes 集群

   ```
   aws eks update-kubeconfig --region "${CLUSTER_REGION}" --name "${CLUSTER_NAME}"
   ```

1. 安装依赖项。

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

## 无检查点训练修改说明
<a name="sagemaker-eks-checkpointless-recipes-custom-modification-instructions"></a>

要逐步采用自定义模型的无检查点训练，请遵循集成指南（这里我们以 Llama 3 70b 预训练为例），其中包括：
+ 快速创建沟通器
+ 内存映射的数据加载器 (MMAP)
+ 进程内恢复和无检查点恢复

### 组件 1：快速创建通信器
<a name="sagemaker-eks-checkpointless-recipes-custom-component1"></a>

这是为了优化在工作人员之间建立联系的时间。无需更改代码，只需要设置环境变量即可

```
  # Enable Rootless features
  export HPCT_USE_ROOTLESS=1 && \
  sysctl -w net.ipv4.ip_local_port_range="20000 65535" && \

  hyperpodrun --nproc_per_node=8 \
              ...
              --inprocess-restart \
              ...
```

完整的更改可以在 [llama3 70 预训练](https://github.com/aws/sagemaker-hyperpod-checkpointless-training/blob/main/examples/llama3/launch/pretrain_llama3_70b_checkpointless_p5.yaml)启动任务配置中找到。

### 组件 2：内存映射的数据加载器 (MMAP)
<a name="sagemaker-eks-checkpointless-recipes-custom-component2"></a>

MMAP 缓存用于存储预先获取的数据样本，无需等待数据预处理即可立即开始训练。通过封装现有的数据加载器，只需最少的代码更改即可采用。

```
data_module = MMAPDataModule(
  data_module=base_data_module,
  mmap_config=CacheResumeMMAPConfig(cache_dir=…)
)
```

### 组件 3 和 4：进程内恢复和无检查点恢复
<a name="sagemaker-eks-checkpointless-recipes-custom-components3-4"></a>

这样就可以在不重启训练过程或从检查点加载的情况下进行故障恢复。需要进行其他代码更改（策略和训练配置更新，封装现有的主代码）

```
@HPWrapper(
  health_check=CudaHealthCheck(),
  hp_api_factory=HPAgentK8sAPIFactory(),
  abort_timeout=60.0,
...)
def run_main(
  cfg,
  caller: Optional[HPCallWrapper] = None):
...


CheckpointlessMegatronStrategy(
  **self.cfg.strategy,
  ddp=self.ddp,
)
```

完整的更改可以在 [llama3 70 预训练入门脚本中找到，相应的训练配置更改可以在 [ll](https://github.com/aws/sagemaker-hyperpod-checkpointless-training/blob/main/examples/llama3/config/llama3_70b_peft_checkpointless.yaml) ama3 70](https://github.com/aws/sagemaker-hyperpod-checkpointless-training/blob/main/examples/llama3/llama3_70b_pretrain_checkpointless.py) b 训练配置中找到。

### 启动训练
<a name="sagemaker-eks-checkpointless-recipes-custom-launch"></a>

现在，你可以使用 kubectl 启动无检查点训练。

```
kubectl apply -f your_job_config.yaml
```

# HyperPod 无检查点训练功能
<a name="sagemaker-eks-checkpointless-features"></a>

请参阅以下页面，了解无检查点训练中的训练功能。

**Topics**
+ [Amazon SageMaker HyperPod 无检查点培训存储库](#sagemaker-eks-checkpointless-repositories)
+ [集体通信初始化改进](sagemaker-eks-checkpointless-features-communication.md)
+ [内存映射的数据加载器](sagemaker-eks-checkpointless-features-mmap.md)
+ [过程内恢复和无检查点训练](sagemaker-eks-checkpointless-in-process-recovery.md)

## Amazon SageMaker HyperPod 无检查点培训存储库
<a name="sagemaker-eks-checkpointless-repositories"></a>

[ HyperPod checkpointless 训练](https://github.com/aws/sagemaker-hyperpod-checkpointless-training#)通过框架级优化，加快了大规模分布式训练环境中集群故障的恢复。这些优化是通过基本容器映像提供的，该镜像包括增强的 NCCL 初始化改进、数据加载优化以及进程内和无检查点恢复组件。 HyperPod 无检查点培训包就是以此为基础构建的。

Checkpointless 训练通过三个同步运行的优化轨道启用：
+ **通信初始化改进（NCCL 和 Gloo）**-通过分散等级 peer 和响铃信息（下面的红色方框）来消除通信瓶颈。
+ **数据加载优化**-缩短重启操作期间提供第一批数据所需的时间（下方为橙色方框）。
+ **减少程序重启开销**-最大限度地降低重启成本，并通过在健康的节点上恢复流程来实现无检查点补货（下面的蓝色和绿色方框）。

![\[alt text not found\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/hyperpod/hyperpod-checkpointless-optimization-tracks.png)


# 集体通信初始化改进
<a name="sagemaker-eks-checkpointless-features-communication"></a>

NCCL 和 Gloo 是基本的通信库，可实现分布式训练过程中的集体操作（例如全缩和广播）。但是，传统的 NCCL 和 Gloo 初始化可能会在故障恢复期间造成瓶颈。

标准恢复过程要求所有进程都连接到集中进程 TCPStore 并通过根进程进行协调，这会带来昂贵的开销，在重启期间尤其成问题。这种集中式设计带来了三个关键问题：强制 TCPStore 连接产生的协调开销、每次重启都必须重复完整的初始化序列而导致的恢复延迟，以及根进程本身的单点故障。这要求每次训练初始化或重新启动时都需要执行昂贵的集中式协调步骤。

HyperPod 无检查点训练消除了这些协调瓶颈，通过使初始化 “无根” 和 “.”，可以更快地从故障中恢复。TCPStoreless

## 无根配置
<a name="sagemaker-eks-checkpointless-features-communication-rootless-config"></a>

要启用 Rootless，只需公开以下环境变量即可。

```
export HPCT_USE_ROOTLESS=1 && \
sysctl -w net.ipv4.ip_local_port_range="20000 65535" && \
```

HPCT\$1USE\$1ROOTLESS：0 或 1。用于开启和关闭 rootless

sysctl-w net.ipv4.ip\$1local\$1port\$1range= “20000 65535"：设置系统端口范围

请参阅启用 Rootless 的[示例](https://github.com/aws/sagemaker-hyperpod-checkpointless-training/blob/main/examples/llama3/launch/pretrain_llama3_70b_checkpointless_p5.yaml#L111-L113)。

## 无根
<a name="sagemaker-eks-checkpointless-features-communication-rootless"></a>

HyperPod checkpointless 训练提供了新颖的初始化方法，即 Rootless 和 TCPStoreless，适用于 NCCL 和 Gloo 进程组。

这些优化的实现包括修改 NCCL、Gloo 和： PyTorch
+ 扩展第三方库 APIs 以启用 Rootless 和 Storeless NCCL 和 Gloo优化，同时保持向后兼容性
+ 更新进程组后端以有条件地使用优化的路径并处理进程内恢复问题
+ 绕过 PyTorch 分布式层的昂贵 TCPStore 创建，同时通过全局组计数器保持对称地址模式

下图显示了分布式训练库的架构以及无检查点训练中所做的更改。

![\[下图显示了分布式训练库的架构以及无检查点训练中所做的更改。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/hyperpod/hyperpod-checkpointless-training-libraries.png)


### NCCL 和 Gloo
<a name="sagemaker-eks-checkpointless-features-communication-nccl-gloo"></a>

这些是独立的软件包，用于执行集体通信的核心功能。它们提供诸如 ncclCommInit Rank 之类的密钥 APIs来初始化通信网络、管理底层资源和执行集体通信。在 NCCL 和 Gloo 中进行自定义更改后，Rootless 和 Storeless 会优化（例如，跳过连接）通信网络的初始化。 TCPStore您可以在使用原始代码路径或优化的代码路径之间灵活切换。

### PyTorch 进程组后端
<a name="sagemaker-eks-checkpointless-features-communication-pytorch"></a>

进程组后端，特别是 ProcessGroup NCCL 和 ProcessGroupGloo， ProcessGroup APIs 通过调用其相应底层库 APIs 的来实现。由于我们扩展了第三方库 APIs，因此我们必须正确调用它们并根据客户的配置进行代码路径切换。

除了优化代码路径外，我们还更改了流程组后端以支持进程内恢复。

# 内存映射的数据加载器
<a name="sagemaker-eks-checkpointless-features-mmap"></a>

另一个重启开销源于数据加载：在数据加载器初始化、从远程文件系统下载数据并将其分批处理时，训练集群保持空闲状态。

为了解决这个问题，我们引入了内存映射 DataLoader (MMAP) Dataloader，它可以将预取的批次缓存在永久内存中，确保即使在故障引起的重启之后，它们仍然可用。这种方法省去了数据加载器的设置时间，使训练能够使用缓存的批次立即恢复，而数据加载器同时在后台重新初始化并获取后续数据。数据缓存位于需要训练数据的每个等级上，并维护两种类型的批次：用于训练的最近消耗的批次和可立即使用的预取批次。

![\[此图说明了 MMAP 数据加载器、缓存和已消耗的批次。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/hyperpod/hyperpod-checkpointless-mmap-dataloader.png)


MMAP 数据加载器提供以下两个功能：
+ **数据预取**-主动获取和缓存数据加载器生成的数据
+ **永久缓存**-将已消耗的批次和预取的批次存储在进程重启后的临时文件系统中

使用缓存，训练作业将受益于：
+ **减少内存占**用-利用内存映射 I/O 在主机 CPU 内存中维护数据的单个共享副本，从而消除了 GPU 进程间的冗余副本（例如，在 p5 实例上，从 8 个副本减少到 1 个） GPUs
+ **更快的恢复**-允许从缓存的批次中立即恢复训练，无需等待数据加载器重新初始化和第一批生成，从而缩短平均重启时间 (MTTR)

## MMAP 配置
<a name="sagemaker-eks-checkpointless-features-communication-mmap-config"></a>

要使用 MMAP，只需将您的原始数据模块传入 `MMAPDataModule`

```
data_module=MMAPDataModule(
    data_module=MY_DATA_MODULE(...),
    mmap_config=CacheResumeMMAPConfig(
        cache_dir=self.cfg.mmap.cache_dir,
        checkpoint_frequency=self.cfg.mmap.checkpoint_frequency),
)
```

`CacheResumeMMAPConfig`: MMAP Dataloader 参数控制缓存目录位置、大小限制和数据获取委托。默认情况下，每个节点只有 TP 等级 0 才能从源获取数据，而同一数据复制组中的其他节点则从共享缓存中读取数据，从而消除了冗余传输。

`MMAPDataModule`: 它封装原始数据模块并返回用于训练和验证的 mmap 数据加载器。

请参阅启用 MMAP 的[示例](https://github.com/aws/sagemaker-hyperpod-checkpointless-training/blob/main/examples/gpt_oss/gpt_oss_120b_full_finetune_checkpointless.py#L101-L109)。

## API 参考
<a name="sagemaker-eks-checkpointless-mmap-reference"></a>

### CacheResumeMMAPConfig
<a name="sagemaker-eks-checkpointless-mmap-reference-cacheresume"></a>

```
class hyperpod_checkpointless_training.dataloader.config.CacheResumeMMAPConfig(
  cache_dir='/dev/shm/pdl_cache',
  prefetch_length=10,
  val_prefetch_length=10,
  lookback_length=2,
  checkpoint_frequency=None,
  model_parallel_group=None,
  enable_batch_encryption=False)
```

无检查点训练中缓存恢复内存映射 (MMAP) 数据加载器功能的配置类。 HyperPod 

此配置通过缓存和预取功能实现了高效的数据加载，通过在内存映射文件中维护缓存的数据批次，允许在失败后快速恢复训练。

**参数**
+ **cache\$1dir**（str，可选）-用于存储缓存数据批处理的目录路径。默认：“/dev/shm/pdl\$1cache”
+ **prefetch\$1length**（int，可选）-训练期间要提前预取的批次数。默认值：10
+ **val\$1prefetch\$1length**（int，可选）-验证期间要提前预取的批次数。默认值：10
+ **lookback\$1length**（int，可选）— 要保留在缓存中以备重复使用的先前使用的批次数。默认值：2
+ **checkpoint\$1fre** quency（int，可选）— 模型检查点步骤的频率。用于缓存性能优化。默认值：无
+ **model\$1parallel\$1group**（对象，可选）— 模型并行性的处理组。如果为 “无”，则会自动创建。默认值：无
+ **enable\$1batch\$1** encryption（bool，可选）-是否为缓存的批处理数据启用加密。默认值：False

**Methods**

```
create(dataloader_init_callable,
    parallel_state_util,
   step,
    is_data_loading_rank,
   create_model_parallel_group_callable,
    name='Train',
   is_val=False,
   cached_len=0)
```

创建并返回已配置的 MMAP 数据加载器实例。

**参数**
+ **dataloader\$1init\$1callable（可调用**）— 用于初始化底层数据加载器的函数
+ p@@ **arallel\$1state\$1util**（对象）— 用于管理跨进程并行状态的实用程序
+ ste@@ **p** (int) — 训练期间要从中恢复的数据步骤
+ **is\$1data\$1loading\$1rank（可调用）— 如果当前等级**应该加载数据，则返回 True 的函数
+ **create\$1model\$1parallel\$1group\$1callable（可调用）— 用于创建模型并行进程组**的函数
+ **名称**（str，可选）-数据加载器的名称标识符。默认：“火车”
+ **is\$1val**（bool，可选）-这是否是验证数据加载器。默认值：False
+ **cached\$1len**（int，可选）-如果从现有缓存中恢复，则缓存数据的长度。默认：0

返回`CacheResumePrefetchedDataLoader`或 `CacheResumeReadDataLoader` — 已配置的 MMAP 数据加载器实例

`ValueError`如果 step 参数为，则引发`None`。

**示例**

```
from hyperpod_checkpointless_training.dataloader.config import CacheResumeMMAPConfig

# Create configuration
config = CacheResumeMMAPConfig(
    cache_dir="/tmp/training_cache",
    prefetch_length=20,
    checkpoint_frequency=100,
    enable_batch_encryption=False
)

# Create dataloader
dataloader = config.create(
    dataloader_init_callable=my_dataloader_init,
    parallel_state_util=parallel_util,
    step=current_step,
    is_data_loading_rank=lambda: rank == 0,
    create_model_parallel_group_callable=create_mp_group,
    name="TrainingData"
)
```

**备注**
+ 缓存目录应有足够的空间和快速的 I/O 性能（例如，/dev/shm 用于内存存储）。
+ 设置通过调整缓存管理与模型检查点来`checkpoint_frequency`提高缓存性能
+ 对于验证数据加载器 (`is_val=True`)，该步骤将重置为 0 并强制冷启动
+ 根据当前等级是否负责数据加载，使用不同的数据加载器实现

### MMAPData模块
<a name="sagemaker-eks-checkpointless-mmap-reference-mmapdatamodule"></a>

```
class hyperpod_checkpointless_training.dataloader.mmap_data_module.MMAPDataModule(  
    data_module,  
    mmap_config,  
    parallel_state_util=MegatronParallelStateUtil(),  
    is_data_loading_rank=None)
```

一款 PyTorch Lightning DataModule 包装器，可将内存映射 (MMAP) 数据加载功能应用于现有 DataModules 无检查点训练。

该课程封装了现有的 PyTorch Lightning， DataModule 并通过 MMAP 功能对其进行了增强，从而在训练失败期间实现了高效的数据缓存和快速恢复。它保持了与原始 DataModule 界面的兼容性，同时增加了无检查点训练功能。

参数

data\$1module (pl. LightningDataModule)  
 DataModule 要封装的底层（例如， LLMData模块）

mmap\$1config () MMAPConfig  
定义缓存行为和参数的 MMAP 配置对象

`parallel_state_util`（MegatronParallelStateUtil，可选）  
用于管理分布式进程间的并行状态的实用程序。默认： MegatronParallelStateUtil()

`is_data_loading_rank`（可调用，可选）  
如果当前等级应该加载数据，则返回 True 的函数。如果为 “无”，则默认为 parallel\$1state\$1util.is\$1tp\$10。默认值：无

**属性**

`global_step` (int)  
当前的全局训练步骤，用于从检查点恢复

`cached_train_dl_len` (int)  
训练数据加载器的缓存长度

`cached_val_dl_len` (int)  
验证数据加载器的缓存长度

**Methods**

```
setup(stage=None)
```

为指定的训练阶段设置底层数据模块。

`stage`（str，可选）  
训练阶段（“适合”、“验证”、“测试” 或 “预测”）。默认值：无

```
train_dataloader()
```

使用 MM DataLoader AP 包装创建训练。

*返回:* DataLoader — DataLoader 具有缓存和预取功能的 MMAP 封装训练

```
val_dataloader()
```

使用 MM DataLoader AP 包装创建验证。

*返回: DataLoader — 具有*缓存功能的 MMAP 封装验证 DataLoader 

```
test_dataloader()
```

 DataLoader 如果底层数据模块支持测试，则创建该测试。

*返回：* DataLoader 或 None — DataLoader 从底层数据模块进行测试，如果不支持，则返回 None

```
predict_dataloader()
```

 DataLoader 如果底层数据模块支持预测，则创建预测。

*返回：* DataLoader 或 None — DataLoader 从底层数据模块进行预测，如果不支持，则返回 None

```
load_checkpoint(checkpoint)
```

加载检查点信息以从特定步骤恢复训练。

检查点（字典）  
包含 “global\$1step” 键的检查点字典

```
get_underlying_data_module()
```

获取底层封装的数据模块。

*退货：*pl. LightningDataModule — 封装的原始数据模块

```
state_dict()
```

获取 DataModule 用于检查点的 MMAP 的状态字典。

*返回：*dict — 包含缓存数据加载器长度的字典

```
load_state_dict(state_dict)
```

加载状态字典以恢复 MMAP DataModule 状态。

`state_dict`（字典）  
要加载的州字典

**属性**

```
data_sampler
```

向 NeMo 框架公开底层数据模块的数据采样器。

*返回：*object 或 None — 来自底层数据模块的数据采样器

**示例**

```
from hyperpod_checkpointless_training.dataloader.mmap_data_module import MMAPDataModule  
from hyperpod_checkpointless_training.dataloader.config import CacheResumeMMAPConfig  
from my_project import MyLLMDataModule  

# Create MMAP configuration  
mmap_config = CacheResumeMMAPConfig(  
    cache_dir="/tmp/training_cache",  
    prefetch_length=20,  
    checkpoint_frequency=100  
)  

# Create original data module  
original_data_module = MyLLMDataModule(  
    data_path="/path/to/data",  
    batch_size=32  
)  

# Wrap with MMAP capabilities  
mmap_data_module = MMAPDataModule(  
    data_module=original_data_module,  
    mmap_config=mmap_config  
)  

# Use in PyTorch Lightning Trainer  
trainer = pl.Trainer()  
trainer.fit(model, data=mmap_data_module)  

# Resume from checkpoint  
checkpoint = {"global_step": 1000}  
mmap_data_module.load_checkpoint(checkpoint)
```

**备注**
+ 包装器使用 \$1\$1getattr\$1\$1 将大多数属性访问权限委托给底层数据模块
+ 只有数据加载等级才会真正初始化并使用底层数据模块；其他等级使用虚假的数据加载器
+ 保持缓存的数据加载器长度以优化训练恢复期间的性能

# 过程内恢复和无检查点训练
<a name="sagemaker-eks-checkpointless-in-process-recovery"></a>

HyperPod 无检查点训练使用模型冗余来实现容错训练。核心原则是，模型和优化器状态在多个节点组之间完全复制，权重更新和优化器状态更改在每个节点组内同步复制。发生故障时，运行正常的副本会完成其优化器步骤，并将更新的 model/optimizer 状态传输到正在恢复的副本。

这种基于模型冗余的方法支持多种故障处理机制：
+ **进程内恢复：**尽管出现故障，进程仍保持活动状态，将所有模型和优化器状态保留在 GPU 内存中并保持最新值
+ **优雅的中止处理：**受控的中止和受影响操作的资源清理
+ **代码块重新执行：**仅在可执行代码块 (RCB) 中重新运行受影响的代码段
+ **无检查点恢复，不会丢失训练进度：**由于进程持续存在且状态保留在内存中，因此不会丢失任何训练进度；出现故障时，训练从上一步恢复，而不是从上次保存的检查点恢复

**无检查点配置**

以下是无检查点训练的核心片段。

```
from hyperpod_checkpointless_training.inprocess.train_utils import wait_rank
    wait_rank()
      
def main():
    @HPWrapper(
        health_check=CudaHealthCheck(),
        hp_api_factory=HPAgentK8sAPIFactory(),
        abort_timeout=60.0,
        checkpoint_manager=PEFTCheckpointManager(enable_offload=True),
        abort=CheckpointlessAbortManager.get_default_checkpointless_abort(),
        finalize=CheckpointlessFinalizeCleanup(),
    )
    def run_main(cfg, caller: Optional[HPCallWrapper] = None):
        ...
        trainer = Trainer(
            strategy=CheckpointlessMegatronStrategy(...,
                num_distributed_optimizer_instances=2),
            callbacks=[..., CheckpointlessCallback(...)],
            )
        trainer.fresume = resume
        trainer._checkpoint_connector = CheckpointlessCompatibleConnector(trainer)
        trainer.wrapper = caller
```
+ `wait_rank`: 所有等级都将等待来自 HyperpodTrainingOperator 基础架构的等级信息。
+ `HPWrapper`: Python 函数封装器，可为可执行代码块 (RCB) 启用重启功能。该实现使用上下文管理器而不是 Python 装饰器，因为装饰器无法在运行时确定 RCBs 要监视的数量。
+ `CudaHealthCheck`：通过与 GPU 同步，确保当前进程的 CUDA 上下文处于正常状态。使用由 LOCAL\$1RANK 环境变量指定的设备，如果未设置 LOCAL\$1RANK，则默认为主线程的 CUDA 设备。
+ `HPAgentK8sAPIFactory`：此 API 支持无检查点训练，以查询 Kubernetes 训练集群中其他 Pod 的训练状态。它还提供了基础架构级别的屏障，可确保所有等级在继续操作之前成功完成中止和重启操作。
+ `CheckpointManager`：管理内存中的检查点和 peer-to-peer恢复，实现无检查点容错。它有以下核心职责：
  + **内存中检查点管理**：在内存中保存和管理 NeMo 模型检查点，以便在无检查点恢复场景 I/O 中无需磁盘即可快速恢复。
  + **恢复可行性验证**：通过验证全局步骤一致性、等级运行状况和模型状态完整性，确定是否可以进行无检查点恢复。
  + **Peer-to-Peer 恢复编排**：使用分布式通信协调健康队伍和失败队列之间的检查点传输，以实现快速恢复。
  + **RNG 状态管理**：保留和恢复 Python、、和威震天中的随机数生成器状态 NumPy PyTorch，以实现确定性恢复。
  + **[可选] 检查点卸载**：如果 GPU 没有足够的内存容量，则将内存中的检查点卸载到 CPU。
+ `PEFTCheckpointManager`: 它`CheckpointManager`通过保留基本模型权重进行PEFT微调来进行扩展。
+ `CheckpointlessAbortManager`：在遇到错误时在后台线程中管理中止操作。默认情况下，它会中止 TransformerEngine、Checkpointing TorchDistributed、和。 DataLoader用户可以根据需要注册自定义中止处理程序。中止完成后，必须停止所有通信，并且必须终止所有进程和线程，以防止资源泄漏。
+ `CheckpointlessFinalizeCleanup`：在主线程中处理无法在后台线程中安全中止或清理的组件的最终清理操作。
+ `CheckpointlessMegatronStrategy`: 它继承`MegatronStrategy`自《尼莫》中的 from。请注意，无检查点训练要求`num_distributed_optimizer_instances`至少为 2，这样才能进行优化器复制。该策略还负责基本属性注册和进程组初始化，例如 rootless。
+ `CheckpointlessCallback`: 闪电回调，将 NeMo 训练与无检查点训练的容错系统集成在一起。它有以下核心职责：
  + **训练步骤生命周期管理**：跟踪训练进度，并根据训练状态（第一步与 ParameterUpdateLock 后续步骤）进行协调以实现 enable/disable 无检查点恢复。
  + **检查点状态协调**：管理内存中 PEFT 基础模型检查点的保存/恢复。
+ `CheckpointlessCompatibleConnector`: 尝试`CheckpointConnector`将检查点文件预加载到内存的 PTL，源路径按此优先级确定：
  + 尝试无检查点恢复
  + 如果无检查点返回 None，则回退到 parent.resume\$1start ()

[如需向代码](https://github.com/aws/sagemaker-hyperpod-checkpointless-training/blob/main/examples/gpt_oss/gpt_oss_120b_full_finetune.py)添加无检查点训练功能，请参阅示例。

**概念**

本节介绍无检查点训练概念。Amazon 上的无检查点培训 SageMaker HyperPod 支持进程内恢复。此 API 接口采用的格式与类似 NVRx APIs。

**概念-可重复执行的代码块 (RCB)**

发生故障时，健康的进程会保持活动状态，但是必须重新执行部分代码才能恢复训练状态和 python 堆栈。可执行代码块 (RCB) 是在故障恢复期间重新运行的特定代码段。在以下示例中，RCB 包含整个训练脚本（即 main () 下的所有内容），这意味着每次故障恢复都会重新启动训练脚本，同时保留内存中的模型和优化器状态。

**概念-故障控制**

在无检查点训练期间发生故障时，故障控制器模块会收到通知。此故障控制器包括以下组件：
+ **故障检测模块：**接收基础设施故障通知
+ **RCB 定义 APIs：**使用户能够在其代码中定义可重执行代码块 (RCB)
+ **重启模块：**终止 RCB、清理资源并重新启动 RCB

![\[此图说明了在无检查点训练期间发生故障时，故障控制器模块是如何接收通知的。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/hyperpod/hyperpod-checkpointless-fault-controller-module.png)


**概念-模型冗余**

大型模型训练通常需要足够大的数据并行大小才能有效地训练模型。在 PyTorch DDP 和 Horovod 等传统数据并行模式中，模型是完全复制的。更高级的分片数据并行技术（例如 DeepSpeed ZerO optimizer 和 FSDP）也支持混合分片模式，该模式允许对分片组内的 model/optimizer 状态进行分片并在复制组之间进行完全复制。 NeMo 还通过参数 num\$1distributed\$1optimizer\$1instances 具有这种混合分片功能，该参数允许冗余。

但是，添加冗余表示模型不会在整个集群中完全分片，从而导致更高的设备内存使用率。冗余内存的数量将因用户实现的特定模型分片技术而异。低精度模型权重、梯度和激活存储器不会受到影响，因为它们是通过模型并行度进行分片的。高精度主模型 weights/gradients 和优化器状态将受到影响。添加一个冗余模型副本会增加设备内存使用量，大约相当于一个 DCP 检查点的大小。

混合分片将整个 DP 组的集合分成相对较小的集合。以前，整个 DP 组中都有减少散射和全聚集。混合分片后，reduce-scatter 仅在每个模型副本内运行，并且模型副本组之间将进行全缩减。All-gather 也在每个模型复制品中运行。因此，整个通信量大致保持不变，但是集体的群组规模较小，因此我们预计延迟会更好。

**概念-故障和重启类型**

下表记录了不同的故障类型和相关的恢复机制。Checkpointless 训练首先尝试通过进程内恢复进行故障恢复，然后进行进程级重启。只有在发生灾难性故障（例如，多个节点同时出现故障）时，它才会回退到作业级别的重启。


| 失败类型 | 原因 | 恢复类型 | 恢复机制 | 
| --- | --- | --- | --- | 
| 进程内故障 | 代码级错误、异常 | 进程内恢复 (IPR) | 在现有流程中重新运行 RCB；健康的流程保持活跃 | 
| 进程重启失败 | CUDA 上下文已损坏，进程已终止 | 进程级重启 (PLR) | SageMaker HyperPod 训练操作员重启进程；跳过 K8s 吊舱重启 | 
| 节点替换失败 | 永久性 node/GPU 硬件故障 | Job 等级重启 (JLR) | 替换故障节点；重新启动整个训练作业 | 

**概念-优化器步骤的原子锁保护**

模型执行分为三个阶段：向前传播、向后传播和优化器步骤。恢复行为因故障时间而异：
+ 向@@ **前/向后传播：**回滚到当前训练步骤的开头，将模型状态广播到替换节点
+ **Optimizer 步骤：**允许运行正常的副本在锁定保护下完成该步骤，然后向替换节点广播更新的模型状态

此策略可确保已完成的优化器更新永远不会被丢弃，从而有助于缩短故障恢复时间。

![\[此图说明了如何处理故障，具体取决于故障发生在失败之前还是之后。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/hyperpod/hyperpod-checkpointless-optimizer.png)


## 无检查点训练流程图
<a name="sagemaker-eks-checkpointless-training-flow"></a>

![\[此图说明了无检查点训练流程。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/hyperpod/hyperpod-checkpointless-training-flow.png)


以下步骤概述了故障检测和无检查点恢复过程：

1. 训练循环开始

1. 出现故障

1. 评估无检查点简历的可行性

1. 检查无检查点简历是否可行
   + 如果可行，尝试无检查点恢复
     + 如果恢复失败，则回退到从存储中加载检查点
     + 如果恢复成功，则从恢复状态继续训练
   + 如果不可行，则回退到从存储中加载检查点

1. 清理资源-中止所有进程组和后端并释放资源，为重启做准备。

1. 恢复训练循环-新的训练循环开始，该过程返回到步骤 1。

## API 参考
<a name="sagemaker-eks-checkpointless-in-process-recovery-reference"></a>

### wait\$1rank
<a name="sagemaker-eks-checkpointless-in-process-recovery-reference-wait_rank"></a>

```
hyperpod_checkpointless_training.inprocess.train_utils.wait_rank()
```

等待并从中检索排名信息 HyperPod，然后使用分布式训练变量更新当前流程环境。

此函数为分布式训练获取正确的等级分配和环境变量。它可确保每个进程都根据其在分布式训练作业中的角色进行适当的配置。

**参数**

无

**返回值**

**无**

**行为**
+ **进程检查**：如果从子进程调用，则跳过执行（仅在中运行） MainProcess
+ **环境检索**：从环境变量获取当前`RANK`和`WORLD_SIZE`从环境变量中获取
+ **HyperPod 沟通**：`hyperpod_wait_rank_info()`要求从中检索排名信息的电话 HyperPod
+ **环境更新**：使用从中收到的特定于工作人员的环境变量更新当前流程环境 HyperPod

**环境变量**

该函数读取以下环境变量：
+ **RANK** (*int*)-当前进程等级（如果未设置，则默认值：-1）
+ **WORLD\$1SIZ** E (*int*)-分布式作业中的进程总数（如果未设置，则默认值：0）

**加注**
+ **AssertionError**— 如果来自的回复格式 HyperPod 不符合预期，或者缺少必填字段

**示例**

```
from hyperpod_checkpointless_training.inprocess.train_utils import wait_rank  

# Call before initializing distributed training  
wait_rank()  

# Now environment variables are properly set for this rank  
import torch.distributed as dist  
dist.init_process_group(backend='nccl')
```

**备注**
+ 仅在主进程中执行；子进程调用会自动跳过
+ 该函数会阻塞，直到 HyperPod 提供等级信息

### HPWrapper
<a name="sagemaker-eks-checkpointless-in-process-recovery-reference-HPWrapper"></a>

```
class hyperpod_checkpointless_training.inprocess.wrap.HPWrapper(  
    *,  
    abort=Compose(HPAbortTorchDistributed()),  
    finalize=None,  
    health_check=None,  
    hp_api_factory=None,  
    abort_timeout=None,  
    enabled=True,  
    trace_file_path=None,  
    async_raise_before_abort=True,  
    early_abort_communicator=False,  
    checkpoint_manager=None,  
    check_memory_status=True)
```

*Python 函数包装器，可在无检查点训练中 HyperPod 为可执行代码块 (RCB) 启用重启功能。*

*该封装器通过监控训练执行并在发生故障时协调分布式进程的重启来提供容错和自动恢复功能。它使用上下文管理器方法而不是装饰器来维护整个培训生命周期中的全球资源。*

**参数**
+ **abort**（*中止*，*可选*）— 检测到故障时异步中止执行。默认值：`Compose(HPAbortTorchDistributed())`
+ **f** inalize*（F* inalize，*可选*）— Rank-Local finalize 处理程序 默认值：`None`
+ **health\$1check**（*HealthCheck**可选*）— 在重启期间执行的本地等级运行状况检查。默认值：`None`
+ **hp\$1api\$1fac** tory（*可调用，可**选*）— 用于创建要与之交互的 API 的工厂函数。 HyperPod HyperPod默认值：`None`
+ **abort\$1timeou** *t（float*，*可选*）— 故障控制线程中中止调用的超时。默认值：`None`
+ **启用**（*bool*，*可选*）-启用包装器功能。当`False`，包装器变为直通。默认值：`True`
+ **trace\$1file\$1path**（*str*，*可选*）— 用于分析的跟踪文件的路径。 VizTracer 默认值：`None`
+ **async\$1raise\$1before\$1abort（*bool*，*可选*）— 在故障控制线程中启用中止前**加注。默认值：`True`
+ e@@ **arly\$1abort\$1communicator**（*bool*，*可选*）— 中止数据加载器之前中止通信器（nccl/Glooo）。默认值：`False`
+ **checkpoint\$1manager**（*任*意，*可选*）— 用于在恢复期间处理检查点的管理器。默认值：`None`
+ **check\$1memory\$1stat** us（*bool*，*可选*）— 启用内存状态检查和日志记录。默认值：`True`

**Methods**

```
def __call__(self, fn)
```

*封装启用重启功能的函数。*

**参数：**
+ **fn**（*可调用*）— 使用重启功能进行封装的函数

**退货：**
+ **Callable** — 具有重启功能的封装函数，如果禁用则为原始函数

**示例**

```
from hyperpod_checkpointless_training.nemo_plugins.checkpoint_manager import CheckpointManager  
from hyperpod_checkpointless_training.nemo_plugins.patches import patch_megatron_optimizer  
from hyperpod_checkpointless_training.nemo_plugins.checkpoint_connector import CheckpointlessCompatibleConnector  
from hyperpod_checkpointless_training.inprocess.train_utils import HPAgentK8sAPIFactory  
from hyperpod_checkpointless_training.inprocess.abort import CheckpointlessFinalizeCleanup, CheckpointlessAbortManager   
      
@HPWrapper(  
    health_check=CudaHealthCheck(),  
    hp_api_factory=HPAgentK8sAPIFactory(),  
    abort_timeout=60.0,  
    checkpoint_manager=CheckpointManager(enable_offload=False),  
    abort=CheckpointlessAbortManager.get_default_checkpointless_abort(),  
    finalize=CheckpointlessFinalizeCleanup(),  
)def training_function():  
    # Your training code here  
    pass
```

**备注**
+ 包装器必须`torch.distributed`可用
+ 当`enabled=False`，包装器变为直通函数并原封不动地返回原始函数
+ 包装器维护全局资源，例如在整个训练生命周期中监控线程
+ 提供时`trace_file_path`支持 VizTracer 性能分析
+ 与集成 HyperPod ，可在分布式训练中协调故障处理

### HPCall包装纸
<a name="sagemaker-eks-checkpointless-in-process-recovery-reference-HPCallWrapper"></a>

```
class hyperpod_checkpointless_training.inprocess.wrap.HPCallWrapper(wrapper)
```

在执行期间监控和管理重启代码块 (RCB) 的状态。

该类处理 RCB 执行的生命周期，包括故障检测、与其他级别的协调以进行重启以及清理操作。它管理分布式同步，并确保在所有训练过程中实现一致的恢复。

**参数**
+ **wrapper** (*HPWrapper*)-包含全局进程内恢复设置的父封装器

**属性**
+ **step\$1upon\$1restar** *t (int*) — 用于跟踪自上次重启以来的步骤的计数器，用于确定重启策略

**Methods**

```
def initialize_barrier()
```

遇到 RCB 异常后等待 HyperPod 屏障同步。

```
def start_hp_fault_handling_thread()
```

启动故障处理线程以监控和协调故障。

```
def handle_fn_exception(call_ex)
```

处理来自执行函数或 RCB 的异常。

**参数：**
+ **call\$1ex**（*异常*）-监控功能异常

```
def restart(term_ex)
```

执行重启处理程序，包括定稿、垃圾收集和运行状况检查。

**参数：**
+ **term\$1ex** (*RankShouldRestart*)-触发重启的终止异常

```
def launch(fn, *a, **kw)
```

*使用适当的异常处理来执行 RCB。*

**参数：**
+ **fn**（*可调用*）— 要执行的函数
+ **a**-函数参数
+ **kw** — 函数关键字参数

```
def run(fn, a, kw)
```

处理重启和屏障同步的主执行循环。

**参数：**
+ **fn**（*可调用*）— 要执行的函数
+ **a**-函数参数
+ **kw** — 函数关键字参数

```
def shutdown()
```

关闭故障处理和监控线程。

**备注**
+ 自动处理`RankShouldRestart`异常以进行协调恢复
+ 管理内存跟踪和中止、重启期间的垃圾收集
+ 支持进程内恢复和基于故障时间的 PLR（进程级重启）策略

### CudaHealthCheck
<a name="sagemaker-eks-checkpointless-in-process-recovery-reference-cudahealthcheck"></a>

```
class hyperpod_checkpointless_training.inprocess.health_check.CudaHealthCheck(timeout=datetime.timedelta(seconds=30))
```

确保在无检查点训练恢复期间，当前进程的 CUDA 上下文处于健康状态。

此运行状况检查与 GPU 同步，以验证训练失败后 CUDA 上下文是否未损坏。它执行 GPU 同步操作以检测任何可能阻碍成功恢复训练的问题。运行状况检查是在分布式群组被销毁并完成定稿后执行的。

**参数**
+ **超时**（*datetime.timedelta*，*可选*）-GPU 同步操作的超时持续时间。默认值：`datetime.timedelta(seconds=30)`

**Methods**

```
__call__(state, train_ex=None)
```

执行 CUDA 运行状况检查以验证 GPU 上下文的完整性。

**参数：**
+ **stat** e (*HPState*)-包含等级和分布信息的当前 HyperPod 状态
+ **train\$1ex**（*异常*，*可选*）-触发重启的原始训练异常。默认值：`None`

**退货：**
+ **tuple** — 如果运行状况检查通过，则包含`(state, train_ex)`未更改内容的元组

**加注：**
+ **TimeoutError**— 如果 GPU 同步超时，则表示 CUDA 上下文可能已损坏

**状态保存**：如果所有检查都通过，则返回原始状态和异常不变

**示例**

```
import datetime  
from hyperpod_checkpointless_training.inprocess.health_check import CudaHealthCheck  
from hyperpod_checkpointless_training.inprocess.wrap import HPWrapper  
  
# Create CUDA health check with custom timeout  
cuda_health_check = CudaHealthCheck(  
    timeout=datetime.timedelta(seconds=60)  
)  
  
# Use with HPWrapper for fault-tolerant training  
@HPWrapper(  
    health_check=cuda_health_check,  
    enabled=True  
)  
def training_function():  
    # Your training code here  
    pass
```

**备注**
+ 使用线程实现 GPU 同步的超时保护
+ 旨在检测可能阻碍成功恢复训练的损坏的 CUDA 上下文
+ 应在分布式训练场景中用作容错管道的一部分

### HPAgentK8s APIFactory
<a name="sagemaker-eks-checkpointless-in-process-recovery-reference-HPAgentK8sAPIFactory"></a>

```
class hyperpod_checkpointless_training.inprocess.train_utils.HPAgentK8sAPIFactory()
```

用于创建与 HyperPod 基础设施通信以进行分布式训练协调的 HPAgent K8sAPI 实例的工厂类。

该工厂提供了一种标准化的方法来创建和配置 HPAgent K8sAPI 对象，这些对象用于处理训练过程与控制平面之间的通信。 HyperPod 它封装了底层套接字客户端和 API 实例的创建，确保了训练系统的不同部分的配置保持一致。

**Methods**

```
__call__()
```

创建并返回为通信配置的 HPAgent K8sAPI 实例。 HyperPod 

**退货：**
+ **HPAgentk8sAPI — 已配置的 API** 实例，用于与基础架构通信 HyperPod 

**示例**

```
from hyperpod_checkpointless_training.inprocess.train_utils import HPAgentK8sAPIFactory  
from hyperpod_checkpointless_training.inprocess.wrap import HPWrapper  
from hyperpod_checkpointless_training.inprocess.health_check import CudaHealthCheck  
  
# Create the factory  
hp_api_factory = HPAgentK8sAPIFactory()  
  
# Use with HPWrapper for fault-tolerant training  
hp_wrapper = HPWrapper(  
    hp_api_factory=hp_api_factory,  
    health_check=CudaHealthCheck(),  
    abort_timeout=60.0,  
    enabled=True  
)  
  
@hp_wrapper  
def training_function():  
    # Your distributed training code here  
    pass
```

**备注**
+ 旨在与基于 Kubernetes HyperPod 的基础架构无缝协作。在分布式训练场景中，这对于协调故障处理和恢复至关重要

### CheckpointManager
<a name="sagemaker-eks-checkpointless-in-process-recovery-reference-CheckpointManager"></a>

```
class hyperpod_checkpointless_training.nemo_plugins.checkpoint_manager.CheckpointManager(  
    enable_checksum=False,  
    enable_offload=False)
```

管理内存中的检查点和 peer-to-peer恢复，以实现分布式训练中的无检查点容错。

该课程通过管理内存中的 NeMo 模型 HyperPod 检查点、验证恢复可行性以及协调健康和失败等级之间的检查 peer-to-peer点传输，为无检查点训练提供了核心功能。它消除了恢复 I/O 期间对磁盘的需求，从而大大缩短了平均恢复时间 (MTTR)。

**参数**
+ **enable\$1checksum**（*bool*，*可选*）— 启用模型状态校验和验证，以便在恢复期间进行完整性检查。默认值：`False`
+ **enable\$1offload**（*bool*，*可选*）— 启用从 GPU 到 CPU 内存的检查点卸载以减少 GPU 内存使用量。默认值：`False`

**属性**
+ **global\$1step**（*int* 或 *None*）— 与保存的检查点关联的当前训练步骤
+ **rng\$1states**（*列表*或*无*）— 存储的随机数生成器状态用于确定性恢复
+ **checksum\$1manager** (*MemoryChecksumManager*) — 模型状态校验和验证管理器
+ p@@ **arameter\$1update\$1lock (*ParameterUpdateLock*) — 用于在恢复期间协调参数**更新的锁定

**Methods**

```
save_checkpoint(trainer)
```

将 NeMo 模型检查点保存在内存中，以便进行无检查点恢复。

**参数：**
+ **训练师** (*pytorch\$1Lightning.Trainer) — 闪电*训练器实例 PyTorch 

**备注**：
+  CheckpointlessCallback 在批处理结束时或异常处理期间由调用
+ 无需磁盘 I/O 开销即可创建恢复点
+ 存储完整的模型、优化器和调度器状态

```
delete_checkpoint()
```

删除内存中的检查点并执行清理操作。

**备注**：
+ 清除检查点数据、RNG 状态和缓存的张量
+ 执行垃圾收集和 CUDA 缓存清理
+ 成功恢复后或不再需要检查点时调用

```
try_checkpointless_load(trainer)
```

尝试通过从对等队列加载状态进行无检查点恢复。

**参数：**
+ **训练师** (*pytorch\$1Lightning.Trainer) — 闪电*训练器实例 PyTorch 

**退货：**
+ **dict** 或 **None** — 如果成功则恢复检查点，如果需要回退到磁盘，则为 None

**备注**：
+ 无检查点恢复的主要切入点
+ 在尝试 P2P 传输之前验证恢复的可行性
+ 尝试恢复后始终清理内存中的检查点

```
checkpointless_recovery_feasible(trainer, include_checksum_verification=True)
```

确定在当前的故障情况下是否可以进行无检查点恢复。

**参数：**
+ **训练师** (*pytorch\$1Lightning.Trainer) — 闪电*训练器实例 PyTorch 
+ inclu@@ **de\$1checksum\$1verificati *on（bool*，*可选*）— 是否包括校验和验证**。默认值：`True`

**退货：**
+ **bool** — 如果无检查点恢复可行，则为 True，否则为 False

**验证标准：**
+ 健康等级的全球步数一致性
+ 有足够的健康副本可供恢复
+ 模型状态校验和完整性（如果启用）

```
store_rng_states()
```

存储所有随机数生成器状态以进行确定性恢复。

**备注**：
+ 捕获 Python NumPy、 PyTorch CPU/GPU 和威震天 RNG 状态
+ 对于恢复后保持训练决定性至关重要

```
load_rng_states()
```

恢复所有 RNG 状态，以便继续进行确定性恢复。

**备注**：
+ 恢复之前存储的所有 RNG 状态
+ 确保使用相同的随机序列继续训练

```
maybe_offload_checkpoint()
```

如果启用了卸载，则将检查点从 GPU 卸载到 CPU 内存。

**备注**：
+ 减少大型模型的 GPU 内存使用量
+ 只有在以下情况下才会执行 `enable_offload=True`
+ 保持检查点可访问性，便于恢复

**示例**

```
from hyperpod_checkpointless_training.inprocess.wrap import HPWrapper  
from hyperpod_checkpointless_training.nemo_plugins.checkpoint_manager import CheckpointManager  
# Use with HPWrapper for complete fault tolerance  
@HPWrapper(  
    checkpoint_manager=CheckpointManager(),  
    enabled=True  
)  
def training_function():  
    # Training code with automatic checkpointless recovery  
    pass
```

**验证**：使用校验和验证检查点完整性（如果启用）

**备注**
+ 使用分布式通信基元实现高效的 P2P 传输
+ 自动处理张量 dtype 转换和设备放置
+ **MemoryChecksumManager**— 处理模型状态完整性验证

### PEFTCheckpoint经理
<a name="sagemaker-eks-checkpointless-in-process-recovery-reference-PEFTCheckpointManager"></a>

```
class hyperpod_checkpointless_training.nemo_plugins.checkpoint_manager.PEFTCheckpointManager(  
    *args,  
    **kwargs)
```

通过单独的底座和适配器处理来管理 PEFT（参数高效微调）的检查点，以优化无检查点恢复。

这个专门的检查点管理器扩展 CheckpointManager 到通过将基本模型权重与适配器参数分开来优化 PEFT 工作流程。

**参数**

继承以下所有参数：**CheckpointManager**
+ **enable\$1checksum**（*bool*，*可选*）— 启用模型状态校验和验证。默认值：`False`
+ **enable\$1offload**（*bool*，*可选*）— 启用将检查点卸载到 CPU 内存。默认值：`False`

**其他属性**
+ p@@ **arams\$1to\$1save** (s *et*)-应另存为适配器参数的一组参数名称
+ **base\$1model\$1weig** hts（*dict* 或 *None*）— 缓存的基础模型权重，保存一次即可重复使用
+ **base\$1model\$1keys\$1to\$1extrac *t（列表*或*无*）— 用于在 P2P 传输期间提取**基础模型张量的密钥

**Methods**

```
maybe_save_base_model(trainer)
```

保存一次基本模型权重，过滤掉适配器参数。

**参数：**
+ **训练师** (*pytorch\$1Lightning.Trainer) — 闪电*训练器实例 PyTorch 

**备注**：
+ 仅在第一次调用时保存基础模型权重；后续调用不起作用
+ 过滤掉适配器参数以仅存储冻结的基本模型权重
+ 基础模型权重在多次训练中保持不变

```
save_checkpoint(trainer)
```

将 NeMo PEFT 适配器型号检查点保存在内存中，以便进行无检查点恢复。

**参数：**
+ **训练师** (*pytorch\$1Lightning.Trainer) — 闪电*训练器实例 PyTorch 

**备注**：
+ `maybe_save_base_model()`如果基础模型尚未保存，则自动调用
+ 筛选检查点以仅包括适配器参数和训练状态
+ 与完整模型检查点相比，显著减少了检查点的大小

```
try_base_model_checkpointless_load(trainer)
```

尝试 PEFT 基础模型通过从对等队列加载状态来权重无检查点恢复。

**参数：**
+ **训练师** (*pytorch\$1Lightning.Trainer) — 闪电*训练器实例 PyTorch 

**退货：**
+ **dict** or **None** — 如果成功则恢复基本模型检查点，如果需要回退，则为 None

**备注**：
+ 在模型初始化期间用于恢复基础模型权重
+ 恢复后不清理基础模型权重（保留以供重复使用）
+ 针对 model-weights-only恢复场景进行了优化

```
try_checkpointless_load(trainer)
```

尝试 PEFT 适配器通过从对等队列加载状态来权重无检查点恢复。

**参数：**
+ **训练师** (*pytorch\$1Lightning.Trainer) — 闪电*训练器实例 PyTorch 

**退货：**
+ **dict** 或 **None** — 如果成功则恢复适配器检查点，如果需要回退，则为 None

**备注**：
+ 仅恢复适配器参数、优化器状态和调度程序
+ 成功恢复后自动加载优化器和调度器状态
+ 尝试恢复后清理适配器检查点

```
is_adapter_key(key)
```

检查状态字典密钥是否属于适配器参数。

**参数：**
+ **key**（*str* 或*元组*）— 要检查的状态字典密钥

**退货：**
+ **bool** — 如果密钥是适配器参数，则为 True，如果为基本模型参数，则为 Fals

**检测逻辑：**
+ 检查密钥是否已`params_to_save`设置
+ 识别包含 “.adapter” 的密钥。substring
+ 识别以 “.adapters” 结尾的密钥
+ 对于元组键，检查参数是否需要渐变

```
maybe_offload_checkpoint()
```

将基本模型权重从 GPU 转移到 CPU 内存。

**备注**：
+ 扩展父方法以处理基础模型的权重卸载
+ 适配器重量通常很小，不需要卸载
+ 设置内部标志以跟踪卸载状态

**备注**
+ 专为参数高效微调场景（LoRa、适配器等）而设计
+ 自动处理基本模型和适配器参数的分离

**示例**

```
from hyperpod_checkpointless_training.inprocess.wrap import HPWrapper  
from hyperpod_checkpointless_training.nemo_plugins.checkpoint_manager import PEFTCheckpointManager  
# Use with HPWrapper for complete fault tolerance  
@HPWrapper(  
    checkpoint_manager=PEFTCheckpointManager(),  
    enabled=True  
)  
def training_function():  
    # Training code with automatic checkpointless recovery  
    pass
```

### CheckpointlessAbortManager
<a name="sagemaker-eks-checkpointless-in-process-recovery-reference-CheckpointlessAbortManager"></a>

```
class hyperpod_checkpointless_training.inprocess.abort.CheckpointlessAbortManager()
```

工厂类，用于创建和管理中止组件组合以实现无检查点容错。

该实用程序类提供了用于创建、自定义和管理无 HyperPod 检查点训练中错误处理期间使用的中止组件组合的静态方法。它简化了中止序列的配置，这些序列在故障恢复期间处理分布式训练组件、数据加载器和特定于框架的资源的清理。

**参数**

无（所有方法都是静态的）

**静态方法**

```
get_default_checkpointless_abort()
```

获取包含所有标准中止组件的默认中止撰写实例。

**退货：**
+ **Compose** — 包含所有中止组件的默认合成中止实例

**默认组件：**
+ **AbortTransformerEngine()** — 清理资源 TransformerEngine 
+ **HPCheckpointingAbort ()**-处理检查点系统清理
+ **HPAbortTorchDistributed()**-中止 PyTorch 分布式操作
+ **HPDataLoaderAbort()** — 停止并清理数据加载器

```
create_custom_abort(abort_instances)
```

*创建仅包含指定中止实例的自定义中止组合。*

**参数：**
+ *abor@@ **t\$1inst** ances (Abort*) — 要包含在撰写中的中止实例数量可变

**退货：**
+ **Compose**-仅包含指定组件的新合成的中止实例

**加注：**
+ **ValueError**— 如果未提供中止实例

```
override_abort(abort_compose, abort_type, new_abort)
```

将 Compose 实例中的特定中止组件替换为新组件。

**参数：**
+ **abort\$1compose** (C *ompose*) — 要修改的原始 Compose 实例
+ **abort\$1typ** *e* (type) — 要替换的中止组件的类型（例如）`HPCheckpointingAbort`
+ **new\$1abort** (*Abort*) — 用作替换的新中止实例

**退货：**
+ **Compose** — 替换了指定组件的新 Compose 实例

**加注：**
+ **ValueError**— 如果 abort\$1compose 没有 “实例” 属性

**示例**

```
from hyperpod_checkpointless_training.inprocess.wrap import HPWrapper  
from hyperpod_checkpointless_training.nemo_plugins.callbacks import CheckpointlessCallback  
from hyperpod_checkpointless_training.inprocess.abort import CheckpointlessFinalizeCleanup, CheckpointlessAbortManager  
  
# The strategy automatically integrates with HPWrapper  
@HPWrapper(  
    abort=CheckpointlessAbortManager.get_default_checkpointless_abort(),  
    health_check=CudaHealthCheck(),  
    finalize=CheckpointlessFinalizeCleanup(),  
    enabled=True  
)  
def training_function():  
    trainer.fit(...)
```

**备注**
+ 自定义配置允许对清理行为进行微调控制
+ 中止操作对于在故障恢复期间正确清理资源至关重要

### CheckpointlessFinalizeCleanup
<a name="sagemaker-eks-checkpointless-in-process-recovery-reference-CheckpointlessFinalizeCleanup"></a>

```
class hyperpod_checkpointless_training.inprocess.abort.CheckpointlessFinalizeCleanup()
```

在故障检测后进行全面清理，为无检查点训练期间的进程内恢复做好准备。

此 finalize 处理程序通过销毁训练组件引用来执行特定于框架的清理操作，包括 Megatron/TransformerEngine 中止、DDP 清理、模块重新加载和内存清理。它可以确保正确重置训练环境，以便成功进行进程内恢复，而无需终止整个进程。

**参数**

无

**属性**
+ **训练师**（*pytorch\$1Lightning.Trainer 或 N *one*）— 参考闪电训练器*实例 PyTorch 

**Methods**

```
__call__(*a, **kw)
```

**执行全面的清理操作，为进程中的恢复做好准备。**

*参数：*
+ **a** — 可变位置参数（继承自 Finalize 接口）
+ **kw** — 可变关键字参数（继承自 Finalize 接口）

**清理操作：**
+ **威震天框架清理 — 呼吁清理**威震`abort_megatron()`天专用资源
+ **TransformerEngine 清理** — 呼叫`abort_te()`清理资源 TransformerEngine 
+ R@@ **ope Cleanup** — `cleanup_rope()` 呼吁清理旋转位置嵌入资源
+ **DDP 清理** — 呼叫清`cleanup_ddp()`理资源 DistributedDataParallel 
+ **模块重新加载** — 调用`reload_megatron_and_te()`重新加载框架模块
+ **闪电模块清理** — 可选择清除 Lightning 模块以减少 GPU 内存
+ **内存清理**-销毁对空闲内存的训练组件引用

```
register_attributes(trainer)
```

*注册训练器实例，以便在清理操作期间使用。*

**参数：**
+ **训练师** (*pytorch\$1Lightning.Trainer) — 要注册的 Lightning* 训练师实例 PyTorch 

**与集成 CheckpointlessCallback**

```
from hyperpod_checkpointless_training.nemo_plugins.callbacks import CheckpointlessCallback  
from hyperpod_checkpointless_training.inprocess.wrap import HPWrapper  
  
# The strategy automatically integrates with HPWrapper  
@HPWrapper(  
    ...  
    finalize=CheckpointlessFinalizeCleanup(),   
)  
def training_function():  
    trainer.fit(...)
```

**备注**
+ 清理操作按特定顺序执行，以避免依赖性问题
+ 内存清理使用垃圾收集内省来查找目标对象
+ 所有清理操作都设计为均等且可以安全地重试

### CheckpointlessMegatronStrategy
<a name="sagemaker-eks-checkpointless-in-process-recovery-reference-CheckpointlessMegatronStrategy"></a>

```
class hyperpod_checkpointless_training.nemo_plugins.megatron_strategy.CheckpointlessMegatronStrategy(*args, **kwargs)
```

NeMo 威震天策略具有集成的无检查点恢复功能，用于容错分布式训练。

请注意，无检查点训练要求`num_distributed_optimizer_instances`至少为 2，这样才能进行优化器复制。该策略还负责基本属性注册和流程组初始化。

**参数**

继承以下所有参数：**MegatronStrategy**
+ 标准 NeMo MegatronStrategy 初始化参数
+ 分布式训练配置选项
+ 模型并行度设置

**属性**
+ **base\$1store（火炬.distri** *buted TCPStore*或*无*）— 用于协调流程组的分布式存储

**Methods**

```
setup(trainer)
```

初始化策略并向训练器注册容错组件。

**参数：**
+ **训练师** (*pytorch\$1Lightning.Trainer) — 闪电*训练器实例 PyTorch 

**设置操作：**
+ **家长设置**-调用家长 MegatronStrategy 设置
+ **故障注入登记 — 注册** HPFaultInjectionCallback 挂钩（如果存在）
+ **完成注册** — 向最终清理处理人员注册培训师
+ **中止注册** — 向支持它的中止处理程序注册训练器

```
setup_distributed()
```

使用 TCPStore 带前缀或无根连接初始化进程组。

```
load_model_state_dict(checkpoint, strict=True)
```

加载具有无检查点恢复兼容性的模型状态字典。

**参数：**
+ **检查点**（*映射 [str，Any]*）-包含模型状态的检查点字典
+ **st** rict（*bool*，*可选*）— 是否严格强制执行状态字典键匹配。默认值：`True`

```
get_wrapper()
```

获取用于容错协调 HPCall的 Wrapper 实例。

**退货：**
+ **HPCallWrapper** — 为容错而附加到训练器上的包装器实例

```
is_peft()
```

通过检查 PEFT 回调，检查训练配置中是否启用了 PEFT（参数高效微调）

**退货：**
+ **bool** — 如果存在 PEFT 回调则为真，否则为假

```
teardown()
```

覆盖 PyTorch Lightning 原生拆解，将清理委托给中止处理程序。

**示例**

```
from hyperpod_checkpointless_training.inprocess.wrap import HPWrapper  
  
# The strategy automatically integrates with HPWrapper  
@HPWrapper(  
    checkpoint_manager=checkpoint_manager,  
    enabled=True  
)  
def training_function():  
    trainer = pl.Trainer(strategy=CheckpointlessMegatronStrategy())  
    trainer.fit(model, datamodule)
```

### CheckpointlessCallback
<a name="sagemaker-eks-checkpointless-in-process-recovery-reference-CheckpointlessCallback"></a>

```
class hyperpod_checkpointless_training.nemo_plugins.callbacks.CheckpointlessCallback(  
    enable_inprocess=False,  
    enable_checkpointless=False,  
    enable_checksum=False,  
    clean_tensor_hook=False,  
    clean_lightning_module=False)
```

闪电回调，将 NeMo 训练与无检查点训练的容错系统集成在一起。

此回调管理步数跟踪、检查点保存和参数更新协调，以实现进程内恢复功能。它是 L PyTorch ightning 训练循环和 HyperPod 无检查点训练机制之间的主要集成点，在整个训练生命周期中协调容错操作。

**参数**
+ **enable\$1inprocess（*bool*，*可选*）-启用进程**内恢复功能。默认值：`False`
+ **enable\$1checkpointles** s（*bool*，*可选*）— 启用无检查点恢复（需要）。`enable_inprocess=True`默认值：`False`
+ **enable\$1checksum**（*bool*，*可选*）— 启用模型状态校验和验证（必需）。`enable_checkpointless=True`默认值：`False`
+ **clean\$1tensor\$1hook**（*bool*，*可选*）— 在清理期间清除所有 GPU 张量中的张量挂钩（昂贵的操作）。默认值：`False`
+ **clean\$1lightning\$1module**（*bool*，*可选*）— 启用闪电模块清理以在每次重启后释放 GPU 内存。默认值：`False`

**属性**
+ **tried\$1adapter\$1checkpointless (*bool*) — 用于跟踪是否尝试过适配器无**检查点还原的标记

**Methods**

```
get_wrapper_from_trainer(trainer)
```

从培训师那里获取 HPCall Wrapper 实例，用于容错协调。

**参数：**
+ **训练师** (*pytorch\$1Lightning.Trainer) — 闪电*训练器实例 PyTorch 

**退货：**
+ **HPCallWrapper** — 容错操作的包装器实例

```
on_train_batch_start(trainer, pl_module, batch, batch_idx, *args, **kwargs)
```

在每个训练批次开始时调用，以管理步数跟踪和恢复。

**参数：**
+ **训练师** (*pytorch\$1Lightning.Trainer) — 闪电*训练器实例 PyTorch 
+ **pl\$1module（pytorch\$1li** *ghtning LightningModule*) — 正在训练闪电模块
+ **batch**-当前训练批次数据
+ **batch\$1idx** (*int*) — 当前批次的索引
+ **args** — 其他位置参数
+ **kwargs** — 其他关键字参数

```
on_train_batch_end(trainer, pl_module, outputs, batch, batch_idx)
```

*在每个训练批次结束时释放参数更新锁。*

**参数：**
+ **训练师** (*pytorch\$1Lightning.Trainer) — 闪电*训练器实例 PyTorch 
+ **pl\$1module（pytorch\$1li** *ghtning LightningModule*) — 正在训练闪电模块
+ **输出**（*STEP\$1OUTPUT）— 训练步骤输出*
+ **batch**（*任*意）-当前训练批次数据
+ **batch\$1idx** (*int*) — 当前批次的索引

**备注**：
+ 锁定释放时间可确保参数更新完成后可以继续进行无检查点恢复
+ 仅当`enable_inprocess`和均`enable_checkpointless`为 True 时才执行

```
get_peft_callback(trainer)
```

*从培训师的回拨列表中检索 PEFT 回调。*

**参数：**
+ **训练师** (*pytorch\$1Lightning.Trainer) — 闪电*训练器实例 PyTorch 

**退货：**
+ **PEFT** 或**无** — 如果找到 PEFT 回调实例，否则为 None

```
_try_adapter_checkpointless_restore(trainer, params_to_save)
```

*尝试对 PEFT 适配器参数进行无检查点恢复。*

**参数：**
+ **训练师** (*pytorch\$1Lightning.Trainer) — 闪电*训练器实例 PyTorch 
+ p@@ **arams\$1to\$1save** (s *et*)-要另存为适配器参数的参数名称集

**备注**：
+ 每次训练只执行一次（由`tried_adapter_checkpointless`旗帜控制）
+ 使用适配器参数信息配置检查点管理器

**示例**

```
from hyperpod_checkpointless_training.nemo_plugins.callbacks import CheckpointlessCallback  
from hyperpod_checkpointless_training.nemo_plugins.checkpoint_manager import CheckpointManager  
import pytorch_lightning as pl  
  
# Create checkpoint manager  
checkpoint_manager = CheckpointManager(  
    enable_checksum=True,  
    enable_offload=True  
)  
  
# Create checkpointless callback with full fault tolerance  
checkpointless_callback = CheckpointlessCallback(  
    enable_inprocess=True,  
    enable_checkpointless=True,  
    enable_checksum=True,  
    clean_tensor_hook=True,  
    clean_lightning_module=True  
)  
  
# Use with PyTorch Lightning trainer  
trainer = pl.Trainer(  
    callbacks=[checkpointless_callback],  
    strategy=CheckpointlessMegatronStrategy()  
)  
  
# Training with fault tolerance  
trainer.fit(model, datamodule=data_module)
```

**内存管理**
+ **clean\$1tensor\$1hook**：在清理过程中移除张量挂钩（昂贵但彻底）
+ **clean\$1lightning\$1module：在重启期间释放闪电模块** GPU 内存
+ 这两个选项都有助于减少故障恢复期间的内存占用
+ 与协调 ParameterUpdateLock 以实现线程安全的参数更新跟踪

### CheckpointlessCompatibleConnector
<a name="sagemaker-eks-checkpointless-in-process-recovery-reference-CheckpointlessCompatibleConnector"></a>

```
class hyperpod_checkpointless_training.nemo_plugins.checkpoint_connector.CheckpointlessCompatibleConnector()
```

PyTorch Lightning Checkpoint 连接器，将无检查点恢复与传统的基于磁盘的检查点加载集成在一起。

该连接器扩展了 PyTorch Lightning`_CheckpointConnector`，提供了无检查点恢复和标准检查点恢复之间的无缝集成。它首先尝试无检查点恢复，然后在无检查点恢复不可行或失败时回退到基于磁盘的检查点加载。

**参数**

**从 \$1 继承所有参数 CheckpointConnector**

**Methods**

```
resume_start(checkpoint_path=None)
```

尝试预加载具有无检查点恢复优先级的检查点。

**参数：**
+ **checkpoint\$1path**（*str* 或 *None*，*可选*）— 用于回退的磁盘检查点的路径。默认值：`None`

```
resume_end()
```

完成检查点加载过程并执行加载后操作。

**备注**
+ 通过无检查点恢复支持扩展了 L PyTorch ightning 的内部职`_CheckpointConnector`业
+ 与标准 L PyTorch ightning 检查点工作流程保持完全兼容

### CheckpointlessAutoResume
<a name="sagemaker-eks-checkpointless-in-process-recovery-reference-CheckpointlessAutoResume"></a>

```
class hyperpod_checkpointless_training.nemo_plugins.resume.CheckpointlessAutoResume()
```

使用延 NeMo迟设置 AutoResume 进行扩展，以便在解析检查点路径之前启用无检查点恢复验证。

该类实现了两阶段初始化策略，允许在回退到传统的基于磁盘的检查点加载之前进行无检查点恢复验证。它会有条件地延迟 AutoResume 设置以防止过早解析检查点路径，从而使 CheckpointManager 能够首先验证无检查点 peer-to-peer恢复是否可行。

**参数**

继承所有参数 **AutoResume**

**Methods**

```
setup(trainer, model=None, force_setup=False)
```

有条件地延迟 AutoResume 设置以启用无检查点恢复验证。

**参数：**
+ **训练器***（*pytorch\$1Lightning.Trainer 或 Lightning.fabric.Fabric）— Lightningtning.** PyTorch 
+ **模型**（*可选*）-用于设置的模型实例。默认值：`None`
+ **force\$1setup**（*bool*，*可选*）— 如果为 True，则绕过延迟并立即执行 AutoResume 安装程序。默认值：`False`

**示例**

```
from hyperpod_checkpointless_training.nemo_plugins.resume import CheckpointlessAutoResume  
from hyperpod_checkpointless_training.nemo_plugins.megatron_strategy import CheckpointlessMegatronStrategy  
import pytorch_lightning as pl  
  
# Create trainer with checkpointless auto-resume  
trainer = pl.Trainer(  
    strategy=CheckpointlessMegatronStrategy(),  
    resume=CheckpointlessAutoResume()  
)
```

**备注**
+ 扩展 NeMo了带有延迟机制的 AutoResume 类，用于实现无检查点恢复
+ 与之配合使用`CheckpointlessCompatibleConnector`以实现完整的恢复工作流程

# 特殊注意事项
<a name="sagemaker-eks-checkpointless-considerations"></a>

我们收集某些常规汇总和匿名的运营指标，以提供基本的服务可用性。这些指标的创建是完全自动化的，不需要对底层模型训练工作负载进行人工审查。这些指标与作业操作、资源管理和基本服务功能有关。

HyperPod 托管分层检查点和弹性训练：请注意， HyperPod 无检查点训练目前与 HyperPod托管分层检查点和弹性训练不兼容。

提供了 GPT OSS 120B 和 Llama 模型的无检查点训练配方，以简化入门。这些配方已在 ml.p5 实例上进行了验证。使用其他实例类型可能需要对底层配方进行额外修改。这些配方也可以适应完整的微调工作流程。对于自定义模型，我们建议您查看[入门示例](https://docs.aws.amazon.com/sagemaker-eks-checkpointless-recipes-custom)。

# 附录
<a name="sagemaker-eks-checkpointless-appendix"></a>

**通过 HyperPod 食谱监控训练结果**

SageMaker HyperPod 食谱提供了 Tensorboard 集成，用于分析训练行为。这些配方还包含了 VizTracer，这是一种用于跟踪和可视化 Python 代码执行的低开销工具。有关更多信息，请参阅 [ VizTracer](https://github.com/gaogaotiantian/viztracer)。

张量板日志生成并存储在中。`log_dir`要本地访问和分析这些日志，请按以下过程操作：

1. 从训练环境中将 Tensorboard 实验文件夹下载到本地计算机上。

1. 在本地计算机上打开终端或命令提示符。

1. 导航到包含已下载的实验文件夹的目录。

1. 通过运行以下命令启动 Tensorboard：

   ```
   tensorboard --port=<port> --bind_all --logdir experiment.
   ```

1. 打开您的网络浏览器并访问`http://localhost:8008`。

现在，您可以在 Tensorboard 界面中查看训练作业的状态和可视化内容。查看状态和可视化内容有助于监控和分析训练过程。监控和分析训练过程有助于了解模型的行为和性能。有关如何使用 Tensorboard 监控和分析训练的更多信息，请参阅 [NVIDIA Framework 用户 NeMo 指南](https://docs.nvidia.com/nemo-framework/user-guide/latest/nemotoolkit/core/exp_manager.html#experiment-manager)。

**VizTracer**

要启用 VizTracer，您可以通过将环境变量设置为`ENABLE_VIZTRACER`来修改配方`1`。训练完成后，您的 VizTracer 个人资料将出现在实验文件夹中`log_dir/viztracer_xxx.json`。要分析您的个人资料，您可以下载并使用以下**vizviewer**工具将其打开：

```
vizviewer --port <port> viztracer_xxx.json
```

此命令在端口 9001 上启动 vizviewer。你可以在<port>浏览器中前往 http://localhost: 来查看你的。 VizTracer 打开后 VizTracer，开始分析训练。有关使用的更多信息 VizTracer，请参阅[ VizTracer 文档](https://viztracer.readthedocs.io/en/latest/installation.html)。

# 发行说明
<a name="sagemaker-eks-checkpointless-release-notes"></a>

请参阅以下版本说明，了解 SageMaker HyperPod 无检查点培训的最新更新。

** SageMaker HyperPod 无检查点训练 v1.0.1**

日期：2026 年 4 月 10 日

**错误修复**
+ 修复了错误处理线程中错误的 CUDA 设备绑定。现在，故障处理线程通过使用`LOCAL_RANK`正确设置 CUDA 设备上下文。此修复可防止在进程内故障恢复期间出现设备不匹配错误。

** SageMaker HyperPod 无检查点训练 v1.0.0**

日期：2025 年 12 月 3 日

**SageMaker HyperPod 无检查点训练功能**
+ **集体通信初始化改进**：提供新颖的初始化方法，Rootless 以及适用于 NCCL 和 Glo TCPStoreless o 的初始化方法。
+ **内存映射 (MMAP)** Dataloader：缓存（保留）预取的批次，这样即使故障导致训练作业重新启动，这些批次也可用。
+ **Checkpointles** s：通过进行框架级优化，可以更快地从大规模分布式训练环境中的集群训练错误中恢复
+ 基@@ **于 Nvidia Nemo 和 PyTorch Lightning 构建**：利用这些强大的框架进行高效、灵活的模型训练
  + [Nividia NeMo](https://github.com/NVIDIA-NeMo/NeMo)
  + [PyTorch 闪电](https://lightning.ai/docs/pytorch/stable/)

**SageMaker HyperPod 无检查点训练 Docker 容器**

无检查点训练建立 HyperPod 在 [NVIDIA NeMo ](https://docs.nvidia.com/nemo-framework/user-guide/latest/overview.html) 框架之上。 HyperPod checkpointless 训练旨在通过进行框架级优化，更快地从大规模分布式训练环境中的集群训练错误中恢复，这些优化将在包含带有 NCCL 和优化的基础映像的基础容器上交付。 PyTorch 

**可用性**

目前，图片仅在以下版本中可用：

```
eu-north-1
ap-south-1
us-east-2
eu-west-1
eu-central-1
sa-east-1
us-east-1
eu-west-2
ap-northeast-1
us-west-2
us-west-1
ap-southeast-1
ap-southeast-2
```

但在以下 3 个可选择加入的地区不可用：

```
ap-southeast-3
ap-southeast-4
eu-south-2
```

**容器详细信息**

使用 CUDA v12.9 的 PyTorch v2.6.0 的 Checker 无检查点训练 Docker 容器

```
963403601044.dkr.ecr.eu-north-1.amazonaws.com/hyperpod-checkpointless-training:v1.0.1
423350936952.dkr.ecr.ap-south-1.amazonaws.com/hyperpod-checkpointless-training:v1.0.1
556809692997.dkr.ecr.us-east-2.amazonaws.com/hyperpod-checkpointless-training:v1.0.1
942446708630.dkr.ecr.eu-west-1.amazonaws.com/hyperpod-checkpointless-training:v1.0.1
391061375763.dkr.ecr.eu-central-1.amazonaws.com/hyperpod-checkpointless-training:v1.0.1
311136344257.dkr.ecr.sa-east-1.amazonaws.com/hyperpod-checkpointless-training:v1.0.1
327873000638.dkr.ecr.us-east-1.amazonaws.com/hyperpod-checkpointless-training:v1.0.1
016839105697.dkr.ecr.eu-west-2.amazonaws.com/hyperpod-checkpointless-training:v1.0.1
356859066553.dkr.ecr.ap-northeast-1.amazonaws.com/hyperpod-checkpointless-training:v1.0.1
920498770698.dkr.ecr.us-west-2.amazonaws.com/hyperpod-checkpointless-training:v1.0.1
827510180725.dkr.ecr.us-west-1.amazonaws.com/hyperpod-checkpointless-training:v1.0.1
885852567298.dkr.ecr.ap-southeast-1.amazonaws.com/hyperpod-checkpointless-training:v1.0.1
304708117039.dkr.ecr.ap-southeast-2.amazonaws.com/hyperpod-checkpointless-training:v1.0.1
```

**预安装的软件包**

```
PyTorch: v2.6.0
CUDA: v12.9
NCCL: v2.27.5
EFA: v1.43.0
AWS-OFI-NCCL v1.16.0
Libfabric version 2.1
Megatron v0.15.0
Nemo v2.6.0rc0
```