

# 迭代训练
<a name="nova-iterative-training"></a>

## 概述
<a name="nova-iterative-overview"></a>

迭代训练指通过多种训练方法，经多轮训练周期对模型进行反复微调的过程，具体包括训练、评估、分析错误、调整数据/目标/超参数等环节，且每一轮训练均基于上一轮的检查点启动。该方法可帮助您系统性定位模型的失效场景，整合针对特定短板的精选示例，并持续适配不断变化的业务需求。

**相较于单次训练的优势：**
+ **精准优化**：针对评估中发现的特定失效问题进行改进
+ **自适应精调**：应对数据分布变化或产品需求演进
+ **风险缓解**：增量验证优化效果，而非仅依赖一次长时间训练
+ **数据高效**：将数据采集聚焦在模型表现薄弱的环节
+ **课程式训练**：使用质量逐步提升的数据进行多轮训练

## 工作原理
<a name="nova-iterative-how-it-works"></a>

### 检查点的位置与访问方式
<a name="nova-iterative-checkpoint-location"></a>

每次训练作业完成后，系统会在训练配置中`output_path` 参数指定的输出位置生成一个清单文件。

**访问检查点的步骤**
+ 进入 S3 中指定的 `output_path` 路径
+ 下载并解压缩 `output.tar.gz` 文件
+ 打开文件内的 `manifest.json` 文件
+ 找到 `checkpoint_s3_bucket` 参数，该参数包含已训练模型的 S3 URI

**manifest.json 结构示例**

```
{  
  "checkpoint_s3_bucket": "s3://customer-escrow-<account-number>-smtj-<unique-identifier>/<job-name>/stepID",  
  ...  
}
```

### 托管存储桶说明
<a name="nova-iterative-escrow-buckets"></a>

由于 Amazon Nova 模型权重为专有资产，训练后的模型检查点会存储在 AWS 托管账户内的 **托管 S3 存储桶**中，而非直接复制到您的账户。这些托管存储桶具有以下特点：
+ 安全存储您的自定义模型权重
+ 可被其他 AWS 服务引用（推理、评估及后续训练作业）
+ 仅您的 AWS 账户可通过 IAM 权限访问
+ 产生的标准 S3 存储费用计入您的账户（请参阅“成本注意事项”）

您可以在下一轮训练中，将托管存储桶路径作为 `model_name_or_path` 参数的值，以继续进行迭代训练。

### 使用检查点进行迭代训练
<a name="nova-iterative-using-checkpoints"></a>

配置下一轮训练作业，作为历史检查点的基础模型：

```
run:  
  name: "my-iterative-training-job"  
  model_type: amazon.nova-2-lite-v1:0:256k  
  model_name_or_path: "s3://customer-escrow-<account-number>-smtj-<unique-identifier>/<previous-job-name>"  
  data_s3_path: s3://<bucket>/<data-file>.jsonl  
  replicas: 4
```

## 建议使用迭代训练的场景
<a name="nova-iterative-when-to-use"></a>

### 理想使用案例
<a name="nova-iterative-ideal-use-cases"></a>

满足以下条件时，建议使用迭代训练：
+ **反馈闭环**：能够收集真实场景下的失效案例，并系统性解决这些问题
+ **动态环境**：文档、API 或支持场景持续更新，需定期更新模型
+ **评估体系完善**：拥有可靠的基准测试和评估框架（见下方示例），可精准衡量模型改进效果
+ **机器学习运维能力**：有资源管理多轮训练周期及版本控制

**完善的评估框架示例**
+ 带通过/失败阈值的自动化基准测试套件
+ 包含评分者间信度指标的人工评估流程
+ 覆盖边缘场景与对抗性输入的红队测试方案
+ 可衡量生产环境影响的 A/B 测试基础设施

### 常见模式
<a name="nova-iterative-common-patterns"></a>

**SFT → RFT 流程**：最常用的迭代模式：
+ **先执行 SFT**：通过示例演示教会模型解决问题的方法
+ **再执行 RFT**：借助奖励信号优化模型在更广问题域的表现

该流程对初始表现较差的模型至关重要：若未先通过 SFT 建立基础的问题解决能力，直接对准确率接近零的模型执行 RFT 便无法提升性能。

### 不建议使用迭代训练的场景
<a name="nova-iterative-when-not-to-use"></a>

以下情况避免使用迭代训练：
+ **任务稳定且定义明确**：数据分布固定、需求稳定，模型性能已接近上限
+ **简单分类问题**：任务单一，单次训练即可满足需求
+ **资源限制**：缺乏专门的机器学习运维能力，无法管理多轮训练周期
+ **收益有限**：训练开销过大，而性能提升微乎其微，性价比不足

## 示例工作流：SFT → RFT
<a name="nova-iterative-example-workflow"></a>

本示例展示推理模型的一种通用迭代训练模式。

### 步骤 1：初始 SFT 训练
<a name="nova-iterative-step1"></a>

使用数据集配置并启动 SFT 训练作业：

```
run:  
  name: "initial-sft-training"  
  model_type: amazon.nova-2-lite-v1:0:256k  
  model_name_or_path: "nova-lite-2/prod"  
  data_s3_path: s3://<bucket>/sft-training-data.jsonl  
  validation_data_s3_path: s3://<bucket>/sft-validation-data.jsonl
```

**理由**：SFT 提供额外的示例演示，将模型输出规范为预期的格式和风格，为模型建立基础能力。

**训练完成后**
+ 记录训练作业中配置的 `output_path` 路径
+ 从该路径下载 `output.tar.gz` 文件
+ 提取并找到 `manifest.json`
+ 复制 `checkpoint_s3_bucket` 值

### 步骤 2：基于 SFT 检查点的 RFT 训练
<a name="nova-iterative-step2"></a>

使用 SFT 检查点创建新的 RFT 训练作业：

```
run:  
  name: "rft-on-sft-checkpoint"  
  model_type: amazon.nova-2-lite-v1:0:256k  
  model_name_or_path: "s3://customer-escrow-<account-number>-smtj-<unique-identifier>/<initial-sft-training>"  
  data_s3_path: s3://<bucket>/rft-training-data.jsonl  
  reward_lambda_arn: <your-reward-function-arn>
```

**理由**：RFT 训练以 SFT 为基础，让模型基于奖励函数形成更复杂的推理模式并完成性能优化。

### 步骤 3：评估与迭代
<a name="nova-iterative-step3"></a>

对 RFT 检查点执行评测以验证性能：

```
run:  
  name: "evaluate-rft-checkpoint"  
  model_type: amazon.nova-2-lite-v1:0:256k  
  model_name_or_path: "s3://customer-escrow-<account-number>-smtj-<unique-identifier>/<rft-on-sft-checkpoint>"  
  data_s3_path: s3://<bucket>/evaluation-data.jsonl
```

若未达到目标指标，调整数据或超参数后继续迭代训练。

**重要**  
所有迭代过程中，训练技术（LoRA 对比全秩训练）必须保持一致：  
若 SFT 采用 **LoRA** 训练，RFT 也必须使用 **LoRA** 训练
若 SFT 采用**全秩**训练，RFT 也必须使用**全秩**训练
不可在流程中途切换 LoRA 与全秩训练模式

**重要**  
若在 Amazon 拥有的输出 S3 存储桶中使用 KMS 密钥进行加密，则后续所有迭代训练必须使用同一 KMS 密钥。

## 监控迭代进度
<a name="nova-iterative-monitoring"></a>

您可以通过为训练作业[设置 MLflow](nova-model-monitor.md#nova-customization-mlflow-setup) 来跟踪各项指标。

### 创建 MLflow 应用程序
<a name="nova-iterative-create-mlflow"></a>

**使用 Studio UI**：如果您通过 Studio UI 创建训练作业，系统会自动创建默认 MLflow 应用程序，并在“高级选项”下默认选择该应用程序。

**使用 CLI**：如果您使用 CLI，则必须创建一个 MLflow 应用程序，并将其作为输入传递给训练作业 API 请求。

```
mlflow_app_name="<enter your MLflow app name>"  
role_arn="<enter your role ARN>"   
bucket_name="<enter your bucket name>"   
region="<enter your region>"  
  
mlflow_app_arn=$(aws sagemaker create-mlflow-app \  
  --name $mlflow_app_name \  
  --artifact-store-uri "s3://$bucket_name" \  
  --role-arn $role_arn \  
  --region $region)
```

### 访问 MLflow 应用程序
<a name="nova-iterative-access-mlflow"></a>

**使用 CLI**：创建预签名 URL 以访问 MLflow 应用程序 UI：

```
aws sagemaker create-presigned-mlflow-app-url \  
  --arn $mlflow_app_arn \  
  --region $region \  
  --output text
```

**使用 Studio UI**：Studio UI 会展示存储在 MLflow 中的关键指标，并提供指向 MLflow 应用程序 UI 的链接。

### 要跟踪的关键指标
<a name="nova-iterative-key-metrics"></a>

通过迭代监控以下指标，以评测模型优化效果并跟踪作业进度：

**针对 SFT**
+ 训练损失曲线
+ 已处理样本数量及处理耗时
+ 预留测试集上的性能准确率
+ 格式合规性（如有效 JSON 输出率）
+ 领域专属评估数据上的困惑度

**针对 RFT**
+ 训练过程中的平均奖励分数
+ 奖励分布（高奖励响应占比）
+ 验证奖励趋势（关注过拟合情况）
+ 任务专属成功率（如代码执行通过率、数学题准确率）

**一般性问题**
+ 迭代间基准性能变化
+ 代表性样本的人工评估分数
+ 生产环境指标（若采用迭代式部署）

### 停止迭代的判定条件
<a name="nova-iterative-when-to-stop"></a>

满足以下任一情况即可停止迭代：
+ **性能趋于平稳**：继续训练无法显著提升目标指标
+ **切换训练技术有效**：若某一技术效果趋于平稳，可尝试切换（如 SFT → RFT → SFT）以突破性能瓶颈
+ **达到目标指标**：已满足预设的成功标准
+ **检测到性能退化**：新迭代导致模型效果下降（参见下文回滚流程）

有关详细的评估流程，请参阅**评估**部分。

## 最佳实践
<a name="nova-iterative-best-practices"></a>

### 从小规模开始，逐步扩展规模
<a name="nova-iterative-start-small"></a>

先使用最小数据集和单轮训练（epoch）验证方案，再逐步扩大规模。这有助于建立信心，并尽早发现问题。

### 设定明确的成功指标
<a name="nova-iterative-success-metrics"></a>

在开始前定义定量与定性指标：

**不同使用案例的成功指标示例**
+ **问答任务**：精确匹配准确率、F1 分数、人工偏好评分
+ **代码生成**：单元测试通过率、编译成功率、执行时间
+ **推理任务**：步骤准确率、最终答案正确率、奖励分数
+ **内容生成**：连贯性得分、事实准确性、风格符合度

### 实现自动化评估
<a name="nova-iterative-automated-eval"></a>

设置自动化评估流程，在每轮训练后跟踪性能，支持快速迭代与客观对比。

### 保持严格的版本控制
<a name="nova-iterative-version-control"></a>

为每一轮迭代记录以下信息：
+ 数据集版本与修改内容
+ 模型检查点位置
+ 超参数变更
+ 性能指标及变化量
+ 定性观察结论

这有助于沉淀团队知识，并便于调试。

### 优先关注数据质量而非数量
<a name="nova-iterative-data-quality"></a>

分析上一轮的失败案例，添加有针对性的高质量示例，而非单纯扩大数据集规模。

### 规划迭代预算
<a name="nova-iterative-iteration-budget"></a>

典型迭代次数建议为 **3–5 轮**：
+ **1–2 轮迭代**：通常足以完成简单优化或最终精调
+ **3–5 轮迭代**：适用于需要多轮优化的复杂任务
+ **5 轮以上迭代**：可能出现边际收益递减，或需要更换方案

根据计算资源预算与性能提升幅度灵活调整。

### 具备回滚能力
<a name="nova-iterative-rollback"></a>

若某轮迭代出现性能退化：
+ **定位退化原因：对比各检查点的评估指标**
+ **回退到上一检查点**：使用早期检查点的 S3 路径作为 `model_name_or_path`
+ **调整训练方案**：修改数据、超参数或训练技术后重试
+ **记录失败原因**：记载导致效果退化的因素，避免重蹈覆辙

**回滚示例**

```
run:  
  name: "rollback-to-iteration-2"  
  model_type: amazon.nova-2-lite-v1:0:256k  
  # Use iteration 2 checkpoint instead of failed iteration 3  
  model_name_or_path: "s3://customer-escrow-<account-number>-smtj-<unique-identifier>/<iteration-2-job-name>"
```

## 成本注意事项
<a name="nova-iterative-cost"></a>

### 检查点存储
<a name="nova-iterative-checkpoint-storage"></a>
+ **位置**：检查点存储在托管存储桶中，将产生标准 S3 存储费用，计入您的 AWS 账户账单
+ **保留**：检查点将永久保留，除非手动显式删除
+ **管理**：可配置生命周期策略，对不再需要的旧检查点进行归档或删除

**成本优化建议**
+ 验证新版迭代效果后，及时删除中间过程产生的检查点
+ 将需长期保留的检查点归档至 S3 Glacier，降低存储成本
+ 根据合规要求与实验需求，设置合理的保留策略

## 限制
<a name="nova-iterative-limitations"></a>

### 模型系列一致性
<a name="nova-iterative-model-consistency"></a>

进行迭代训练时，所有迭代轮次必须使用**同一模型类型**。

**初始训练**

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

**后续所有迭代必须使用相同的 model\$1type**

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

### 训练技术一致性
<a name="nova-iterative-technique-consistency"></a>

迭代过程中训练技术必须保持一致：
+ **使用 LoRA 训练的模型**，只能继续用 LoRA 进行迭代训练
+ **使用全秩训练的模型**，只能继续用全秩进行迭代训练

**迭代训练中 LoRA 适配器的工作机制**
+ 每一轮 LoRA 训练迭代都会生成新的适配器权重
+ 新适配器会替换旧适配器（而非叠加）
+ 基础模型保持冻结，仅更新适配器

### 训练技术兼容性矩阵
<a name="nova-iterative-compatibility-matrix"></a>


| 初始训练 | 可迭代的训练方式 | 
| --- | --- | 
| SFT（全秩） | SFT（全秩）、RFT（全秩） | 
| SFT（LoRA） | SFT（LoRA）、RFT（LoRA） | 
| RFT（全秩） | RFT（全秩） | 
| RFT（LoRA） | RFT（LoRA） | 

**作业启动前的兼容性验证**
+ 查看上一轮训练配方，确认模型类型与训练技术（LoRA/全秩）
+ 确保新配方与上述模型类型和技术完全一致
+ 查看 manifest.json 文件，确认检查点路径准确无误

## 问题排查
<a name="nova-iterative-troubleshooting"></a>

### 错误：“Incompatible model training techniques detected”
<a name="nova-iterative-error-incompatible"></a>

**原因**：当前使用的训练技术（LoRA/全秩）与检查点所用技术不一致。

**解决方法**：确保配方使用与原模型相同的训练技术：
+ 若检查点基于 LoRA 训练，新配方需使用 LoRA
+ 若检查点基于全秩训练，新配方需使用全秩

### 错误：“Base model for the job extracted from model\$1name\$1or\$1path does not match model\$1type”
<a name="nova-iterative-error-base-model"></a>

**原因**：`model_type` 中指定的模型类型，与检查点中的实际模型类型不一致。

**解决方法**：验证以下内容：
+ 配方中的 `model_type` 与原模型类型一致
+ `model_name_or_path` 中的检查点 S3 路径准确
+ 使用的路径来自正确的 manifest.json 文件

**正确配置示例**

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

### 错误：“Model configuration not found”
<a name="nova-iterative-error-config"></a>

**原因**：`model_name_or_path` 中的 S3 路径无效或无法访问。

**解决方法：**
+ 验证 S3 路径是否从 manifest.json 文件中正确复制
+ 确保 IAM 角色拥有访问托管存储桶的权限
+ 确认上一轮训练作业已成功完成
+ 检查路径是否存在拼写错误

### 迭代后性能退化
<a name="nova-iterative-error-regression"></a>

**现象**：新训练迭代完成后，评估指标出现下降。

**解决方法：**
+ **回滚**：使用上一轮检查点作为基础模型
+ **分析**：检查失败迭代的训练日志及数据质量
+ **调整**：修改超参数（降低学习率）、提升数据质量或减少训练轮数（epoch）
+ **重试**：使用调整后的参数重新启动迭代训练