

# 持续预训练与中期训练
<a name="nova-forge-cpt"></a>

**注意**  
订阅后将提供详细文档

Nova Forge CPT 提供了超越标准 CPT 的高级功能，包括访问中间检查点以及与 Nova 预训练语料库进行数据混合。这些功能可以实现更高效的领域适应性，并更好地保留模型的通用能力。

## 什么是中间检查点？为什么需要它们？
<a name="nova-forge-cpt-checkpoints"></a>

中间检查点是 Amazon Nova 模型在预训练的不同阶段、在模型达到最终生产就绪状态之前保存的快照。在模型开发过程中，Amazon Nova 会经历多个训练阶段：使用恒定学习率进行初始预训练、学习率衰减、上下文扩展训练，以及最后的指令遵循对齐和安全训练。对于 CPT，中间检查点通常比最终的生产检查点更可取，因为它们更具可塑性，更易于领域适应。生产检查点经过了大量的指令遵循对齐和安全训练，这优化了模型的通用对话能力，但可能使其在 CPT 期间难以学习新的领域特定模式。相比之下，部分预训练和完全预训练的纯文本检查点保留了模型的预训练特征。它们尚未被强烈引导至特定行为模式，使其成为更高效的领域适应起点。当执行大规模 CPT（>100 亿个词元）时，从中间检查点开始通常可以加快收敛速度、提高训练稳定性以及更高效地获取领域知识。然而，执行小规模 CPT（<100 亿个词元）时，或者需要保留指令遵循能力时，生产检查点可能更合适，因为它允许在保持模型对话能力的同时进行领域适应。

CPT 需要多个中间检查点，因为它们提供了不同级别的模型可塑性，这会影响模型吸收新领域知识的效率。最终的生产检查点经过了大量的指令遵循对齐和安全训练，这优化了模型的通用对话能力，但也使其难以学习新的领域特定模式。换句话说，检查点通过训练后步骤得到了强化。相比之下，早期的检查点保留了模型的预训练特征，没有被强烈引导至特定行为，因此更具可塑性，更容易接受领域适应。

为实现最佳训练效率，我们提供了多个中间检查点。

## 有哪些可用的检查点？
<a name="nova-forge-cpt-available"></a>

**Nova 2.0**  
有三个 Amazon Nova Lite 2.0 检查点。
+ PRE-TRAINED – [`nova-lite-2/pretraining-text-RD`]：这是在 Amazon Nova 预训练的恒定学习率和衰减阶段（使用数万亿个词元进行训练）之后的检查点。
+ MID-TRAINED – [`nova-lite-2/pretraining-text-CE`]：此检查点允许以比预训练更保守的学习率引入中等数量的非结构化数据，从而吸收领域特定知识，同时避免灾难性遗忘。
+ POST-TRAINED – [`nova-lite-2/prod`]：这是模型经过所有预训练和训练后步骤后完全对齐的最终检查点。

下表详细说明了预训练和中期训练的不同条件。


| 数据类型 | 执行 | 使用检查点 | 
| --- |--- |--- |
| 大规模的非结构化原始领域数据（文档、日志、文章、代码等） | 持续预训练 | 预训练 | 
| 大规模的非结构化原始领域数据（文档、日志、文章、代码等） | 中期训练 | 预训练 | 
| 小规模的非结构化原始数据；结构化推理轨迹/CoT 数据 | 中期训练 | 中期训练 | 
| 结构化演示（高质量输入-输出对、精选任务指令、多回合对话） | 全面微调 | 中期训练 | 
| 结构化演示（高质量输入-输出对、精选任务指令、多回合对话） | 参数高效微调 | 训练后 | 

## 应该使用哪个检查点？
<a name="nova-forge-cpt-which"></a>

部分预训练的纯文本检查点和完全预训练的纯文本检查点通常收敛更快，并且领域适应所需的训练步骤更少。然而，它们没有经过指令调整，需要经过训练后的步骤才能执行有用的任务并遵循指令。GA 检查点可能需要更多步骤来适应，但为小规模实验提供了更安全的起点，即使在 CPT 训练后也能保持其部分训练后能力。

通常，对于大型训练数据集（>100 亿个词元），从部分预训练的纯文本检查点或完全预训练的纯文本检查点开始，可以提高训练的效率和稳定性，因为模型的知识库将大幅修改。对于小型数据集（<100 亿个词元），使用 GA 检查点可以在适应领域的同时保留指令遵循能力。

## 如何为 Nova 2.0 使用数据混合？
<a name="nova-forge-cpt-mixing"></a>

使用新的领域数据执行 CPT 时，将新数据与模型在预训练阶段之前使用过的部分数据混合非常有益。将旧数据与新的领域数据混合可以解决两个问题：
+ 遗忘控制：通过保留模型现有的技能和知识来防止灾难性遗忘。如果不进行数据混合，仅在狭窄领域数据上进行训练会导致模型覆盖其通用能力。例如，仅使用法律文件训练的模型可能会失去编码或进行数学运算的能力。混合通用领域数据集可以在获取新域知识的同时保留这些通用技能。
+ 优化稳定性：通过锚定模型的内部表示来保持训练稳定性。CPT 期间，模型已学习的特征会修改，而数据混合提供了来自不同来源的梯度，可以顺利地引导这种适应过程。如果没有数据混合，在狭窄分布上训练可能会导致梯度不稳定，即模型表示变化过于剧烈，从而导致训练发散、损失峰值或现有能力崩溃。这就是稳定性与可塑性的权衡：模型需要具备足够的可塑性来学习新的领域知识，同时也要足够稳定，不至于破坏已有的知识。

**Nova CPT 数据混合能力**  
访问 Amazon Nova 预训练数据和检查点是 Amazon Nova CPT 自定义服务的核心功能之一。Amazon Nova CPT 自定义服务可以轻松将领域数据与 Amazon Nova 的预训练语料库混合。此外，可以更改特定 Amazon Nova 数据类别（例如代码、数学、推理等）的采样比率，并控制其比例以补充领域数据。这可以在使模型适应特定领域的同时，强化与使用案例相符的能力。

**寻找最佳混合比率**  
Amazon Nova 数据与领域数据的最佳比率取决于数据集的领域、复杂性、规模、质量以及保持通用能力的重要性。这个比率需要通过实验来发现。以下是决定混合多少 Amazon Nova 数据的实验框架。

选择具有代表性的领域数据子集（例如 50 亿个词元），并在所有实验运行中保持此数量不变。

运行小规模 CPT 实验，仅改变混合的 Amazon Nova 数据量：
+ 不混合：100% 领域数据 → 仅 50 亿领域数据（总计 50 亿）
+ 轻度混合：90% 领域数据 → 50 亿领域数据 \+ 约 5.6 亿 Amazon Nova 数据（总计约 55.6 亿）
+ 中等混合：70% 领域数据 → 50 亿领域数据 \+ 约 21.4 亿 Amazon Nova 数据（总计约 71.4 亿）
+ 高度混合：50% 领域数据 → 50 亿领域数据 \+ 50 亿 Amazon Nova 数据（总计 100 亿）

在领域内基准测试和通用领域基准测试上评估每个检查点。同时评估起始检查点（任何训练开始前的 Amazon Nova 检查点）。
+ 客户领域性能在不同运行中是否大致保持不变？ 通常应该如此，因为每次运行都会显示相同数量的领域词元。如果领域性能随着混合量的增加而改善，说明 Amazon Nova 数据提供了有益的正则化。
+ 随着混合量的增加，通用基准测试分数是否会提高？
  + 预期行为是，随着添加更多 Amazon Nova 数据，通用能力应单调提升。
  + 衡量多个通用基准测试：MMLU（常识）、HumanEval（编码）、GSM8K（数学）或感兴趣的特定基准测试。
+ 选择能够在保持领域性能的同时，为使用案例提供可接受的通用能力的混合比率。同时要考虑使用更多数据混合进行训练的额外成本。

确定最佳混合比率后，使用具有所选混合比率的完整领域数据集运行全面的 CPT。

## 剖析数据混合类别
<a name="nova-forge-cpt-data-mixing-categories"></a>

下面，我们将剖析数据混合中的每个可用类别，以帮助您就哪些数据类别最适合纳入整体数据混合做出最佳决策。

### 如何启用数据混合
<a name="nova-forge-cpt-enable-mixing"></a>

将 `data_mixing` 部分添加到配方，并在数据集类别中设置相应的百分比分布。`nova_data` 百分比总和必须为 100。

#### 包含数据混合的 Nova 2.0 配置
<a name="nova-forge-cpt-nova2-config"></a>

```
# Note:
# This recipe can run on p5.48xlarge

# Run config
display_name: "Nova Lite Pretrain on P5 GPU"
versions: ["2.0"]
instance_types: ["ml.p5.48xlarge"]

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

## Training specific configs
training_config:
  task_type: cpt
  max_length: 8192              # Maximum context window size (tokens)
  global_batch_size: 64        # 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
    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

data_mixing:
  dataset_catalog: cpt_text_lite
  sources:
    nova_data:   # percent inputs for Nova data must sum to 100%; use 0% if you want to exclude a data grouping
      agents: 20
      business-and-finance: 4
      scientific: 10
      code: 5
      factual-and-news: 5
      longform-text: 6
      health-and-medicine: 1
      humanities-and-education: 1
      legal: 1
      math: 9
      additional-languages: 15
      social-and-personal-interest: 11
      entertainment: 0.5
      reasoning: 10
      other: 0.5
      tables: 1
    customer_data: # percent input of customer data. 100 = use only customer data, 0 = use only the nova_data mix above
      percent: 25
```

**这些类别的含义**

**注意**：Nova 2.0 包含了 Nova 1.0 中没有的、专门针对推理的类别（例如 `reasoning-code`、`reasoning-math`、`reasoning-instruction-following`）。

类别与信息标签摘要：


| 类别名称 | 详细信息 | 
| --- | --- | 
| agents | 侧重于人工智能系统中自主决策、任务完成和以目标为导向的行为的训练数据 | 
| baseline | 侧重于一般理解、基本沟通和核心语言能力的基础语言数据 | 
| chat | 展示自然对话流程、上下文维护和恰当社交互动的对话交流 | 
| code | 来自各种编程语言和平台的编程源代码、文档和技术讨论。 | 
| factuality | 侧重于准确性、来源验证和真实性评测的参考资料和经过验证的信息 | 
| identity | 侧重于一致的角色特征、价值观和互动风格的人格框架和行为模式 | 
| long-context | 侧重于在长篇幅交流中保持连贯性和相关性的长文本和复杂叙述 | 
| math | 数学内容，包括教科书、问题、解决方案和数学讨论。 | 
| rai | 强调伦理人工智能原则、安全考虑和负责任技术部署的案例和场景 | 
| instruction-following | 基于不同级别的用户提示和指令精确执行任务的示例 | 
| stem | 涵盖科学、技术、工程和数学的技术内容，包括问题解决和理论概念 | 
| planning | 展示战略思维、逐步任务细分和高效资源分配的序列 | 
| reasoning-chat | 侧重于逻辑讨论和结构化对话流程的分析性对话场景 | 
| reasoning-code | 侧重于系统性解决方案开发的编程挑战和算法问题 | 
| reasoning-factuality | 侧重于关键评估和验证过程的信息评估场景 | 
| reasoning-instruction-following | 侧重于系统解释和有条不紊执行的复杂任务分析 | 
| reasoning-math | 侧重于逻辑进程和解决策略的数学问题解决场景 | 
| reasoning-planning | 侧重于实现目标的系统性方法的战略决策场景 | 
| reasoning-rag | 侧重于上下文理解和相关应用的信息检索和综合场景 | 
| reasoning-rai | 侧重于系统评估人工智能安全性和公平性的道德决策场景 | 
| reasoning-stem | 侧重于系统性分析和解决方案开发的科学问题解决场景 | 
| rag | 将检索到的外部知识与生成的响应有效结合，以提供准确上下文信息的示例 | 
| translation | 多语言内容对，在保留上下文、语气和文化细微差别的同时展示准确的翻译 | 

#### 参数指南
<a name="nova-forge-cpt-param-guide"></a>
+ **dataset\_catalog：**目前唯一的值是 cpt\_text\_lite，直到我们启用多模态训练。
+ **nova\_data：**混合时，Nova 数据各个类别的百分比。它们之和应为 1.0。
+ **customer\_data**：混合到 Nova 数据中的客户数据的百分比。

训练中使用的词元总数可以通过 `max_length` \* `global_batch_size` \* `max_steps` 计算得出

**限制**  
目前的 CPT 仅支持文本数据，不支持任何客户的多模态数据集。