

# 在 SageMaker HyperPod 上对 Nova 2.0 进行持续预训练（CPT）
<a name="nova-cpt-2"></a>

Amazon Nova Lite 2.0 是一款推理模型，其训练所用数据集相较于 Nova Lite 1.0 规模更大、种类更丰富。虽然 Nova Lite 2.0 模型规模更大，但其推理速度却快于 Nova Lite 1.0，同时具备更强的推理能力、更长的上下文长度以及更优的多语言处理性能。

借助 Nova 2.0 Lite 上的 CPT，您可通过自身领域专属数据拓展这些高级能力，在专业领域形成深度专长，同时保持模型出色的推理与分析能力。

## CPT 配方示例
<a name="nova-cpt-2-sample-recipe"></a>

以下是 CPT 配方示例。您可以在 GitHub 上的 [SageMaker HyperPod recipes](https://github.com/aws/sagemaker-hyperpod-recipes/tree/main/recipes_collection/recipes/training/nova) 存储库中找到此配方和其他配方。

```
# Note:
# This recipe can run on p5.48xlarge
# Run config
run:
  name: "my-cpt-run"                           # A descriptive name for your training job
  model_type: "amazon.nova-2-lite-v1:0:256k"   # Model variant specification, do not change
  model_name_or_path: "nova-lite-2/prod"        # Base model path, do not change
  replicas: 8                                   # Number of compute instances for training, allowed values are 4, 8, 16, 32
  data_s3_path: ""                              # Customer data paths
  validation_data_s3_path: ""                   # Customer validation data paths
  output_s3_path: ""                            # Output artifact path, SageMaker HyperPod job-specific configuration - not compatible with standard SageMaker Training Jobs
  mlflow_tracking_uri: ""                       # Required for MLFlow
  mlflow_experiment_name: "my-cpt-experiment"   # Optional for MLFlow. Note: leave this field non-empty
  mlflow_run_name: "my-cpt-run"                 # Optional for MLFlow. Note: leave this field non-empty

## Training specific configs
training_config:
  task_type: cpt
  max_length: 8192                              # Maximum context window size (tokens)
  global_batch_size: 256                        # Global batch size, allowed values are 32, 64, 128, 256.

  trainer:
    max_steps: 10                               # The number of training steps to run total
    val_check_interval: 10                      # The number of steps between running validation. Integer count or float percentage
    limit_val_batches: 2                        # Batches of the validation set to use each trigger

  model:
    hidden_dropout: 0.0                         # Dropout for hidden states, must be between 0.0 and 1.0
    attention_dropout: 0.0                      # Dropout for attention weights, must be between 0.0 and 1.0

  optim:
    optimizer: adam
    lr: 1e-5                                    # Learning rate
    name: distributed_fused_adam                # Optimizer algorithm, do not change
    adam_w_mode: true                           # Enable AdamW mode
    eps: 1e-06                                  # Epsilon for numerical stability
    weight_decay: 0.0                           # L2 regularization strength, must be between 0.0 and 1.0
    adam_beta1: 0.9                             # Beta1 for Adam optimizer
    adam_beta2: 0.95                            # Beta2 for Adam optimizer
    sched:
      warmup_steps: 10                          # Learning rate warmup steps
      constant_steps: 0                         # Steps at constant learning rate
      min_lr: 1e-6                              # Minimum learning rate, must be lower than lr
```

## 在 SageMaker HyperPod 上启动持续预训练作业
<a name="nova-cpt-2-starting-job"></a>

### 准备数据
<a name="nova-cpt-2-preparing-data"></a>

有关数据格式、支持的功能、限制条件以及准备 CPT 训练数据的最佳实践的信息，请参阅 [为 Amazon Nova 2 上的 CPT 准备数据](nova-data-prep-cpt-2.md)。

### 上传数据
<a name="nova-cpt-2-data-upload"></a>

将训练数据集与验证数据集上传到 S3 存储桶。在配方的 `run` 数据块中指定这些位置：

```
## Run config
run:
  ...
  data_s3_path: "s3://<bucket-name>/<training-directory>/<training-file>.jsonl"
  validation_data_s3_path: "s3://<bucket-name>/<validation-directory>/<validation-file>.jsonl"
```

**注意**  
将 `<bucket-name>`、`<training-directory>`、`<validation-directory>`、`<training-file>` 和 `<validation-file>` 替换为实际的 S3 路径。

### 定义您的配置
<a name="nova-cpt-2-defining-config"></a>

使用 `run` 数据块中的 `model_type` 和 `model_name_or_path` 字段定义基础模型：

```
## Run config
run:
  ...
  model_type: amazon.nova-2-lite-v1:0:256k
  model_name_or_path: nova-lite-2/prod
  ...
```

## CPT 调优参数
<a name="nova-cpt-2-tuning-parameters"></a>

可用于 CPT 微调的参数包括：

**运行配置**  

+ **name**：训练作业的描述性名称。这有助于在 AWS 管理控制台中识别对应作业。
+ **model\_type**：要使用的 Amazon Nova 模型变体。可用选项为 `amazon.nova-2-lite-v1:0:256k`。
+ **model\_name\_or\_path**：用于训练的基本模型的路径。可用选项为 `nova-lite-2/prod`，或训练后检查点的 S3 路径 (`s3://customer-escrow-bucket-unique_id/training_run_name`)。
+ **replicas**：要在分布式训练中使用的计算实例数。可用值因您所选的模型而异。Amazon Nova Lite 2.0 支持 4、8、16 或 32 个副本。
+ **data\_s3\_path**：训练数据集的 S3 位置，格式为 JSONL 文件。此文件必须与集群位于同一 AWS 账户和区域中。提供的所有 S3 位置必须位于同一账户和区域中。
+ **validation\_data\_s3\_path**：（选填）验证数据集的 S3 位置，格式为 JSONL 文件。此文件必须与集群位于相同的账户和区域中。提供的所有 S3 位置必须位于同一账户和区域中。
+ **output\_s3\_path**：存储清单和 TensorBoard 日志的 S3 位置。提供的所有 S3 位置必须位于同一 AWS 账户和 AWS 区域中。
+ **mlflow\_tracking\_uri**：用于 MLflow 日志记录的 MLflow 应用程序的 ARN
+ **mlflow\_experiment\_name**：MLflow 实验名称
+ **mlflow\_run\_name**：MLflow 运行名称

**训练配置**  

+ **max\_length**：以词元为单位的最大序列长度。这决定了训练的上下文窗口大小。CPT 支持的最大值为 8192 个词元。

  更长的序列将会提高训练效率，但会以增加内存需求为代价。建议将 max\_length 参数设置为与数据分布相匹配。
+ **global\_batch\_size**：所有设备与 Worker 节点在一次前向及反向传播中共同处理的训练样本总数。

  该值乘以每台设备的批量大小和设备数量。它会影响训练的稳定性和吞吐量。我们建议从适合您内存的批量大小开始，然后进行扩展。对于特定领域的数据，较大的批量大小可能会使梯度过于平滑。

**训练器设置**  

+ **max\_steps**：训练迭代步数。每一步训练模型所用的元素数量即 `global_batch_size`

**模型设置**  

+ **hidden\_dropout**：隐藏状态输出的丢弃概率。将该值增加约 0.0 到 0.2，以减少对较小数据集的过度拟合。有效值介于 0 到 1 之间（含两端值）。
+ **attention\_dropout**：注意力权重的丢弃概率。此参数有助于泛化。有效值介于 0 到 1 之间（含两端值）。

**优化器配置**  

+ **lr**：学习率，控制优化期间的步长。为了获得良好的性能，我们建议使用介于 1e-6 和 1e-4 之间的值。有效值介于 0 到 1 之间（含两端值）。
+ **name**：优化器算法。目前仅支持 `distributed_fused_adam`。
+ **weight\_decay**：L2 正则化强度。值比较高（介于 0.01 到 0.1 之间）会增加正则化强度。
+ **warmup\_steps**：逐步提高学习率的步数。这可以提高训练稳定性。有效值介于 1 到 20 之间（含两端值）。
+ **min\_lr**：衰减结束时的最低学习率。有效值介于 0 到 1 之间（含两端值），但必须小于学习率。