

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

# 常规配置
<a name="sagemaker-hyperpod-recipes-general-configuration"></a>

config.yaml 文件指定训练配方和集群。它还包括运行时配置，例如训练作业的环境变量。

```
defaults:
  - _self_
  - cluster: slurm 
  - recipes: training/llama/hf_llama3_8b_seq8192_gpu
instance_type: p5.48xlarge
git:
  repo_url_or_path: null
  branch: null
  commit: null
  entry_script: null
  token: null
env_vars:
  NCCL_DEBUG: WARN
```

您可以修改 `config.yaml` 中的以下参数：

1. `defaults`：指定您的默认设置，例如默认集群或默认配方。

1. `instance_type`：修改 Amazon EC2 实例类型以匹配您使用的实例类型。

1. `git`：指定训练作业的 SageMaker HyperPod 配方适配器存储库的位置。

1. `env_vars`：您可以指定要传入运行时训练作业的环境变量。例如，您可以通过指定 NCCL\_DEBUG 环境变量来调整 NCCL 的日志记录级别。

配方是用于定义训练作业架构的核心配置。此文件包含训练作业所需的多项重要信息，例如：
+ 是否使用模型并行
+ 数据集的源
+ 混合精度训练
+ 与检查点相关的配置

您可以按原样使用配方。也可以使用以下信息对其进行修改。

## 运行
<a name="run"></a>

以下是运行训练作业所需的基本运行信息。

```
run:
  name: llama-8b
  results_dir: ${base_results_dir}/${.name}
  time_limit: "6-00:00:00"
  model_type: hf
```

1. `name`：在配置文件中指定训练作业的名称。

1. `results_dir`：可以指定训练作业结果的存储目录。

1. `time_limit`：可以为训练作业设置最长训练时间，以防止其过长时间占用硬件资源。

1. `model_type`：可以指定所使用的模型的类型。例如，您可以指定您的模型`hf`是否来自 HuggingFace。

## exp\_manager
<a name="exp-manager"></a>

exp\_manager 可配置实验。利用 exp\_manager，可以指定输出目录或检查点设置等字段。以下示例说明如何配置 exp\_manager。

```
exp_manager:
  exp_dir: null
  name: experiment
  create_tensorboard_logger: True
```

1. `exp_dir`：实验目录包含训练作业的标准输出和标准错误文件。默认情况下，它使用当前目录。

1. `name`：用于在 exp\_dir 下标识实验的实验名称。

1. `create_tensorboard_logger`：指定`True`或`False`以启用或禁用 TensorBoard记录器。

## 检查点
<a name="checkpointing"></a>

我们支持以下三种检查点：
+ 自动检查点
+ 手动检查点
+ 完整检查点

### 自动检查点
<a name="auto-checkpointing"></a>

如果您要保存或加载由 SageMaker HyperPod 配方适配器自动管理的检查点，则可以启用`auto_checkpoint`。要启用 `auto_checkpoint`，请将 `enabled` 设置为 `True`。您可以使用自动检查点进行训练和微调。您可以对共享文件系统和 Amazon S3 使用自动检查点。

```
exp_manager
  checkpoint_dir: ${recipes.exp_manager.exp_dir}/checkpoints/
  auto_checkpoint:
    enabled: True
```

自动检查点会以异步方式保存 local\_state\_dict，且保存间隔为自动计算出的最优间隔。

**注意**  
在此检查点模式下，自动保存的检查点不支持在各个训练运行之间重新分片。要从最新的自动保存的检查点恢复，您必须保留相同的分片度。您无需指定额外信息即可自动恢复。

### 手动检查点
<a name="manual-checkpointing"></a>

您可以修改 `checkpoint_callback_params`，以异步方式将中间检查点保存在 shared\_state\_dict 中。例如，您可以指定以下配置以每 10 个步骤启用分片检查点，并保留最新的 3 个检查点。

分片检查点允许您在各个训练运行之间更改分片度，并通过设置 `resume_from_checkpoint` 来加载检查点。

**注意**  
如果是 PEFT 微调，则分片检查点不支持 Amazon S3。
自动检查点和手动检查点是互斥的。
只允许更改 FSDP 分片度和复制度。

```
exp_manager:
  checkpoint_callback_params:
    # Set save_top_k = 0 to disable sharded checkpointing
    save_top_k: 3
    every_n_train_steps: 10
    monitor: "step"
    mode: "max"
    save_last: False
  resume_from_checkpoint: ${recipes.exp_manager.exp_dir}/checkpoints/
```

要了解有关检查点的更多信息，请参阅[使用 SMP 的检查点](model-parallel-core-features-v2-checkpoints.md)。

### 完整检查点
<a name="full-checkpointing"></a>

导出的 full\_state\_dict 检查点可用于推理或微调。您可以通过 hf\_model\_name\_or\_path 加载完整检查点。在此模式下，仅保存模型权重。

要导出 full\_state\_dict 模型，您可以设置以下参数。

**注意**  
目前，Amazon S3 检查点不支持完整检查点。如果您已启用完整检查点，则无法为 `exp_manager.checkpoint_dir` 设置 S3 路径。但是，在将 `exp_manager.checkpoint_dir` 设置为 Amazon S3 路径时，可以将 `exp_manager.export_full_model.final_export_dir` 设置为本地文件系统上的特定目录。

```
exp_manager:
  export_full_model:
    # Set every_n_train_steps = 0 to disable full checkpointing
    every_n_train_steps: 0
    save_last: True
    final_export_dir : null
```

## 模型
<a name="model"></a>

定义模型架构和训练过程的各个方面。这包括模型并行、精度和数据处理的相关设置。以下是可在模型部分中配置的关键组件：

### 模型并行
<a name="model-parallelism"></a>

指定配方后，可定义要训练的模型。也可以定义模型并行。例如，您可以定义 tensor\_model\_parallel\_degree。您可以启用其他功能，例如 FP8 精确训练。例如，您可以使用张量并行和上下文并行来训练模型：

```
model:
  model_type: llama_v3
  # Base configs
  train_batch_size: 4
  val_batch_size: 1
  seed: 12345
  grad_clip: 1.0

  # Model parallelism
  tensor_model_parallel_degree: 4
  expert_model_parallel_degree: 1
  context_parallel_degree: 2
```

要更好地了解不同类型的模型并行技术，您可以参考以下方法：

1. [张量并行性](model-parallel-core-features-v2-tensor-parallelism.md)

1. [专家并行性](model-parallel-core-features-v2-expert-parallelism.md)

1. [上下文并行性](model-parallel-core-features-v2-context-parallelism.md)

1. [混合分片数据并行性](model-parallel-core-features-v2-sharded-data-parallelism.md)

### FP8
<a name="fp8"></a>

要启用 FP8 （8 位浮点精度），可以在以下示例中指定 FP8相关配置：

```
model:
  # FP8 config
  fp8: True
  fp8_amax_history_len: 1024
  fp8_amax_compute_algo: max
```

请务必注意，目前只有 P5 实例类型支持该 FP8 数据格式。如果您使用的是较旧的实例类型，例如 P4，请在模型训练过程中禁用该 FP8 功能。有关的更多信息 FP8，请参阅[混合精度训练](model-parallel-core-features-v2-mixed-precision.md)。

### 数据
<a name="data"></a>

您可以通过在数据下添加数据路径来为训练作业指定自定义数据集。我们系统中的数据模块支持以下数据格式：

1. JSON

1. JSONGZ（压缩 JSON）

1. ARROW

但是，您负责准备自己的预令牌化数据集。如果您是有特定要求的高级用户，也可以选择实施和集成自定义数据模块。有关 HuggingFace 数据集的更多信息，请参阅[数据集](https://huggingface.co/docs/datasets/v3.1.0/en/index)。

```
model:
  data:
    train_dir: /path/to/your/train/data
    val_dir: /path/to/your/val/data
    dataset_type: hf
    use_synthetic_data: False
```

您可以指定模型训练方式。默认情况下，配方使用预训练而不是微调。以下示例将配方配置为使用 LoRA（低秩适应）运行微调作业。

```
model:
  # Fine tuning config
  do_finetune: True
  # The path to resume from, needs to be HF compatible
  hf_model_name_or_path: null
  hf_access_token: null
  # PEFT config
  peft:
    peft_type: lora
    rank: 32
    alpha: 16
    dropout: 0.1
```

有关食谱的信息，请参阅[SageMaker HyperPod食谱](https://github.com/aws/sagemaker-hyperpod-recipes)。