

# Nova 2.0 上的 RFT
<a name="nova-hp-rft-nova2"></a>

RFT 训练数据遵循 OpenAI 对话格式。每个训练样本都是一个 JSON 对象，包含消息、参考答案及可选的工具定义。本节提供相关的指导说明，帮助您了解如何为 Nova 2.0 上的 RFT 准备有效训练数据。

**Topics**
+ [数据格式与结构](#nova-hp-rft-data-format)
+ [字段描述](#nova-hp-rft-field-descriptions)
+ [超参数指导](#nova-hp-rft-monitoring-hyperparams)
+ [其它属性](#nova-hp-rft-additional-properties)
+ [数据集规模建议](#nova-hp-rft-dataset-size)
+ [有效训练数据的特征](#nova-hp-rft-effective-data)
+ [监控 RFT 训练](nova-hp-rft-monitoring.md)

## 数据格式与结构
<a name="nova-hp-rft-data-format"></a>

每个训练样本都是一个 JSON 对象，其中包含：
+ **messages**：使用系统、用户和可选的助手角色进行的对话轮次数组
+ **reference\$1answer**：用于奖励计算的预期输出或评测标准
+ **tools**（选填）：可供模型使用的函数定义数组
+ **id**（选填）：用于跟踪和去重的唯一标识符

每个样本需单独占一行，JSONL 文件中每行对应一个 JSON 对象。

### 示例 1：化学问题
<a name="nova-hp-rft-example-chemistry"></a>

以下示例是一个化学问题，其参考答案包含真实值：

```
{  
  "id": "chem-001",  
  "messages": [  
    {  
      "role": "system",  
      "content": "You are a helpful chemistry assistant"  
    },  
    {  
      "role": "user",  
      "content": "Predict hydrogen bond donors and acceptors for this SMILES: CCN(CC)CCC(=O)c1sc(N)nc1C"  
    }  
  ],  
  "reference_answer": {  
    "donor_bond_counts": 2,  
    "acceptor_bond_counts": 4,  
    "explanation": "Calculated using Lipinski's rule of five: N-H groups (2 donors), N and O atoms with lone pairs (4 acceptors)"  
  }  
}
```

**注意**  
reference\$1answer 包含使用领域特定规则计算得出的真实值。奖励函数会将模型的预测值与这些参考值进行比较，以计算奖励分数。

### 示例 2：数学问题
<a name="nova-hp-rft-example-math"></a>

以下示例是一个包含求解步骤的数学问题：

```
{  
  "id": "math-001",  
  "messages": [  
    {  
      "role": "system",  
      "content": "You are a math tutor"  
    },  
    {  
      "role": "user",  
      "content": "Solve: 2x + 5 = 13"  
    }  
  ],  
  "reference_answer": {  
    "solution": "x = 4",  
    "steps": ["2x = 13 - 5", "2x = 8", "x = 4"]  
  }  
}
```

### 示例 3：工具使用
<a name="nova-hp-rft-example-tool"></a>

以下示例显示了工具使用及预期行为：

```
{  
  "id": "tool-001",  
  "messages": [  
    {  
      "role": "system",  
      "content": "You are a helpful game master assistant"  
    },  
    {  
      "role": "user",  
      "content": "Generate a strength stat for a warrior character. Apply a +2 racial bonus modifier."  
    }  
  ],  
  "tools": [  
    {  
      "type": "function",  
      "function": {  
        "name": "StatRollAPI",  
        "description": "Generates character stats by rolling 4d6, dropping the lowest die result, and applying a modifier.",  
        "parameters": {  
          "type": "object",  
          "properties": {  
            "modifier": {  
              "description": "An integer representing the modifier to apply to the total of the stat roll.",  
              "type": "integer"  
            }  
          },  
          "required": ["modifier"]  
        }  
      }  
    }  
  ],  
  "reference_answer": {  
    "tool_called": "StatRollAPI",  
    "tool_parameters": {  
      "modifier": 2  
    },  
    "expected_behavior": "Call StatRollAPI with modifier=2 and return the calculated stat value"  
  }  
}
```

## 字段描述
<a name="nova-hp-rft-field-descriptions"></a>


| 字段 | 说明 | 附加说明 | 必需 | 
| --- |--- |--- |--- |
| id | 此 RFT 样本的唯一标识符 | 字符串（例如 sample-001）：用于追踪与去重。 | 否 | 
| 消息 | 定义提示和上下文的聊天消息有序列表 | 对象数组：模型按顺序查看列表。通常而言，列表以系统消息开头，然后是用户。 | 是 | 
| messages[].role | 消息发送方 | 常用值：system、user（其他上下文中也可能出现 assistant） | 否 | 
| messages[].content | 消息文本内容 | 纯字符串：对系统而言，此为指令；对用户而言，此为任务或输入。 | 否 | 
| 工具 | 在本示例中模型可用的工具规范 | 数组：每个项目均定义了工具的界面与元数据。类型可能包括 function 或 internal。 | 否 | 
| reference\$1answer | 本示例的预期模型输出 | 字符串或对象（取决于任务）：作为评测或培训所用的目标。 | 否 | 

**注意**  
任何其他自定义字段（例如 task\$1id、difficulty\$1level、context\$1data）均未经过验证，将作为元数据传递给奖励函数。

## 超参数指导
<a name="nova-hp-rft-monitoring-hyperparams"></a>

根据训练方法，建议采用如下超参数：

**常规：**
+ epoch：1
+ 学习率（lr）：1e – 7
+ 生成次数：8
+ 最大新词元数：8192
+ 批处理大小：256

**LoRA（低秩适应）：**
+ LoRA 秩：32

**注意**  
请根据数据集规模和验证性能调整这些值。监控训练指标以防止过拟合。

## 其它属性
<a name="nova-hp-rft-additional-properties"></a>

将 additionalProperties 设置为 true 后，即可在核心架构要求之外添加自定义字段，从而灵活提供奖励函数正常评测所需的任意数据。

### 常见附加字段
<a name="nova-hp-rft-common-fields"></a>

您可以包含以下类型的附加字段：

**元数据：**
+ task\$1id：用于跟踪的唯一标识符
+ difficulty\$1level：问题复杂度指示器
+ domain：主题领域或类别
+ expected\$1reasoning\$1steps：解题过程中的步骤数

**评测标准：**
+ evaluation\$1criteria：具体评分规则
+ custom\$1scoring\$1weights：不同维度的相对权重
+ context\$1data：问题背景信息
+ external\$1references：相关文档或资源链接

### 包含其他属性的示例
<a name="nova-hp-rft-additional-example"></a>

以下示例包含自定义元数据字段：

```
{  
  "id": "algebra_001",  
  "messages": [  
    {  
      "role": "system",  
      "content": "You are a math tutor"  
    },  
    {  
      "role": "user",  
      "content": "Solve: 2x + 5 = 13"  
    }  
  ],  
  "reference_answer": {  
    "solution": "x = 4",  
    "steps": ["2x = 13 - 5", "2x = 8", "x = 4"]  
  },  
  "task_id": "algebra_001",  
  "difficulty_level": "easy",  
  "domain": "algebra",  
  "expected_reasoning_steps": 3  
}
```

## 数据集规模建议
<a name="nova-hp-rft-dataset-size"></a>

### 起步要求
<a name="nova-hp-rft-starting-point"></a>

建议采用以下最小数据集规模：
+ 至少 100 个训练样本
+ 至少 100 个评测样本

优先使用高质量的输入数据，以及能够在模型响应上一致执行的可靠奖励函数。

### 评测优先的方法
<a name="nova-hp-rft-evaluation-first"></a>

在投入大规模 RFT 训练之前，请先评测模型的基线性能：
+ **性能优异（奖励大于 95%）**：无需进行 RFT，模型表现足够好
+ **性能极差（奖励为 0%）**：先切换到 SFT，建立基本能力
+ **性能中等**：适合采用 RFT 训练

这种“评测优先”的方法可确保奖励函数无缺陷，并判断 RFT 是否适用于自己的使用案例。从小规模数据起步，有助于您熟悉 RFT 工作流程，尽早发现并解决问题，在扩容前验证方案，并测试奖励函数的可靠性。验证通过后，即可扩展到更大规模的数据集，进一步提升模型性能。

## 有效训练数据的特征
<a name="nova-hp-rft-effective-data"></a>

### 清晰性与一致性
<a name="nova-hp-rft-clarity"></a>

优质的 RFT 样本需要清晰、无歧义的输入数据，以便能够针对不同的模型输出进行准确的奖励计算。数据中应避免以下干扰：
+ 格式不一致
+ 标签或指令相互矛盾
+ 提示词含义模糊
+ 参考答案互相冲突

任何歧义都会误导训练过程，导致模型学习到非预期的行为。

### 多样性
<a name="nova-hp-rft-diversity"></a>

数据集应覆盖生产环境中的各类使用案例，确保模型在真实环境中表现稳健。包含：
+ 各种问题类型与难度级别
+ 不同的输入格式和边界情况
+ 来自所有预期场景的代表性样本

这种多样性有助于防止过拟合，并确保模型能够妥善处理不熟悉的输入。

### 奖励函数注意事项
<a name="nova-hp-rft-reward-considerations"></a>

设计奖励函数，实现高效训练：
+ 在几秒钟内执行完毕（而非几分钟）
+ 使用 Lambda 实现高效并行
+ 返回一致且可靠的分数
+ 妥善处理不同类型的模型输出

快速且可扩展的奖励函数可支持快速迭代，并在大规模实验中实现高成本效益。

# 监控 RFT 训练
<a name="nova-hp-rft-monitoring"></a>

在训练期间监控关键指标，确保有效学习，尽早发现潜在问题。

**Topics**
+ [要跟踪的关键指标](#nova-hp-rft-monitoring-metrics)
+ [RFT 之后的评测](#nova-hp-rft-monitoring-evaluation)
+ [使用经过微调的模型](#nova-hp-rft-monitoring-checkpoints)
+ [限制与最佳实践](#nova-hp-rft-monitoring-limitations)
+ [问题排查](#nova-hp-rft-monitoring-troubleshooting)

## 要跟踪的关键指标
<a name="nova-hp-rft-monitoring-metrics"></a>

在训练期间使用 MLflow 监控以下指标：

**奖励指标：**
+ **平均奖励分数**：模型响应的整体质量（应随时间增加）
+ **奖励分布**：获得高、中、低奖励的响应百分比
+ **训练奖励与验证奖励**：通过对比检测过拟合

**训练指标：**
+ **策略更新次数**：成功更新权重的次数
+ **推演完成率**：成功完成评测的样本占比

**异常模式：**
+ 奖励趋于平稳（表明学习效果差）
+ 训练奖励上升，而验证奖励下降（过拟合）
+ 奖励方差随时间显著增大（不稳定）
+ 奖励函数错误率偏高（实现问题）

**何时停止训练：**
+ 已达到目标性能指标
+ 奖励趋于平稳且不再提升
+ 验证性能下降（检测到过拟合）
+ 已达到最大训练预算

## RFT 之后的评测
<a name="nova-hp-rft-monitoring-evaluation"></a>

训练完成后，评测经过微调的模型以判断性能提升情况：
+ **运行 RFT 评测作业**：使用 RFT 训练产出的检查点作为模型
+ **与基线对比**：在相同的测试集上评测基础模型和经过微调的模型
+ **分析指标**：查看任务特定指标（准确率、奖励分数等）
+ **进行定性审查**：人工抽查样本输出质量

有关详细的评测流程，请参阅“评测”一节。

## 使用经过微调的模型
<a name="nova-hp-rft-monitoring-checkpoints"></a>

**访问检查点：**

训练完成后，找到检查点：

1. 进入 S3 中的 `output_path`

1. 下载并解压缩 `output.tar.gz`

1. 打开 `manifest.json`

1. 复制 `checkpoint_s3_bucket` 值

**部署用于推理：**

使用检查点 S3 路径进行推理或进一步训练：

```
run:
    model_type: amazon.nova-2-lite-v1:0:256k
    model_name_or_path: "s3://customer-escrow-<account-number>-smtj-<unique-identifier>/<job-name>"
```

有关部署和推理的说明，请参阅“推理”一节。

## 限制与最佳实践
<a name="nova-hp-rft-monitoring-limitations"></a>

**目前的局限性：**

**Beta 限制：**
+ 需要为 RFT 创建新的 RIG 组。此限制将在正式发布时解决。
+ 实例类型要求：仅支持 P5 实例（至少需要 8x P5.48xlarge）。即将推出：对更小实例类型的支持（预计 2025 年 1 月中旬）。

**功能限制：**
+ 15 分钟 Lambda 超时：奖励函数必须在 15 分钟内完成执行
+ 仅支持单轮对话：不支持多轮对话
+ 验证数据集：训练期间不支持使用。请使用单独的评测作业来评测训练进度。

**训练注意事项：**
+ 低奖励场景：当只有不到 5% 的示例获得正奖励时，训练可能难以进行，此时建议先使用 SFT
+ 数据要求：需具备足够多样性，才能保证学习效果
+ 计算成本：比监督式微调更昂贵

**Nova Forge 消除了以下部分限制：**
+ 支持多轮对话
+ 允许奖励函数超过 15 分钟超时
+ 提供高级算法和调优选项
+ 专为复杂企业使用案例设计，专门针对构建前沿模型进行了调优

**最佳实践：**

**从小规模开始逐步扩展：**
+ 从最小规模数据集（100 – 200 个样本）和少量训练 epoch 开始
+ 在扩大规模之前验证方法
+ 根据结果逐步增加数据集规模和训练步数

**先用 SFT 建立基线：**
+ 如果奖励分数持续偏低（例如始终为 0），应先执行 SFT，再进行 RFT
+ RFT 需要具备合理的基线性能，才能实现有效优化

**设计高效的奖励函数：**
+ 在几秒钟内执行完毕（而非几分钟）
+ 尽量减少外部 API 调用
+ 使用高效的算法与数据结构
+ 实现完善的错误处理机制
+ 训练前进行充分测试
+ 充分利用 Lambda 的并行扩展能力

**主动监控训练：**
+ 跟踪平均奖励分数随时间的变化
+ 观察各样本之间的奖励分布
+ 对比训练奖励与验证奖励
+ 留意异常模式（平稳、过拟合、不稳定）

**根据结果进行迭代：**
+ 如果多次迭代后奖励仍无提升，请调整奖励函数的设计
+ 提升数据集的多样性以提供更清晰的学习信号
+ 如果奖励仍接近零，建议改用 SFT
+ 尝试不同的超参数（学习率、批次大小）

**优化数据质量：**
+ 确保样本多样且具有代表性
+ 包含边界情况和困难样本
+ 验证奖励函数能够对各类样本进行正确评分
+ 移除或修复会干扰奖励函数的样本

## 问题排查
<a name="nova-hp-rft-monitoring-troubleshooting"></a>

**奖励函数错误：**

症状：训练期间奖励函数调用的错误率较高


| 问题 | 症状 | 解决方案 | 
| --- |--- |--- |
| Lambda 超时 | 15 分钟后频繁超时 | 优化函数性能；对于复杂评测，建议使用 Nova Forge | 
| 并发不足 | Lambda 节流错误 | 提高 lambda\$1concurrency\$1limit 或申请提高配额 | 
| 返回格式无效 | 训练失败并出现格式错误 | 验证返回结构是否符合要求的接口规范 | 
| 未处理的异常 | 间歇性错误 | 添加完善的错误处理与日志记录 | 
| 外部 API 故障 | 评分不一致 | 实现重试逻辑和备用策略 | 

**训练表现不佳：**

症状：奖励没有提升或停留在较低水平

解决方法：
+ **验证奖励函数正确性**：使用已知的优/劣样本进行测试
+ **检查基线性能**：评测基础模型；如果准确率接近零，建议先进行 SFT
+ **提升数据多样性**：添加更多覆盖不同场景的多样化样本
+ **调整超参数**：尝试不同学习率或批次大小
+ **检查奖励信号质量**：确保奖励可区分优劣响应

**过拟合：**

症状：训练奖励上升，而验证奖励下降

解决方法：
+ **减少训练步数**：提前停止训练
+ **扩大数据集规模**：增加训练样本数量
+ **添加正则化**：调整 `weight_decay` 或 `entropy_coeff`
+ **提升数据多样性**：确保训练集代表完整的数据分布