迭代训练 - Amazon Nova

迭代训练

概述

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

相较于单次训练的优势:

  • 精准优化:针对评估中发现的特定失效问题进行改进

  • 自适应精调:应对数据分布变化或产品需求演进

  • 风险缓解:增量验证优化效果,而非仅依赖一次长时间训练

  • 数据高效:将数据采集聚焦在模型表现薄弱的环节

  • 课程式训练:使用质量逐步提升的数据进行多轮训练

工作原理

检查点的位置与访问方式

每次训练作业完成后,系统会在训练配置中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", ... }

托管存储桶说明

由于 Amazon Nova 模型权重为专有资产,训练后的模型检查点会存储在 AWS 托管账户内的 托管 S3 存储桶中,而非直接复制到您的账户。这些托管存储桶具有以下特点:

  • 安全存储您的自定义模型权重

  • 可被其他 AWS 服务引用(推理、评估及后续训练作业)

  • 仅您的 AWS 账户可通过 IAM 权限访问

  • 产生的标准 S3 存储费用计入您的账户(请参阅“成本注意事项”)

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

使用检查点进行迭代训练

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

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

建议使用迭代训练的场景

理想使用案例

满足以下条件时,建议使用迭代训练:

  • 反馈闭环:能够收集真实场景下的失效案例,并系统性解决这些问题

  • 动态环境:文档、API 或支持场景持续更新,需定期更新模型

  • 评估体系完善:拥有可靠的基准测试和评估框架(见下方示例),可精准衡量模型改进效果

  • 机器学习运维能力:有资源管理多轮训练周期及版本控制

完善的评估框架示例

  • 带通过/失败阈值的自动化基准测试套件

  • 包含评分者间信度指标的人工评估流程

  • 覆盖边缘场景与对抗性输入的红队测试方案

  • 可衡量生产环境影响的 A/B 测试基础设施

常见模式

SFT → RFT 流程:最常用的迭代模式:

  • 先执行 SFT:通过示例演示教会模型解决问题的方法

  • 再执行 RFT:借助奖励信号优化模型在更广问题域的表现

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

不建议使用迭代训练的场景

以下情况避免使用迭代训练:

  • 任务稳定且定义明确:数据分布固定、需求稳定,模型性能已接近上限

  • 简单分类问题:任务单一,单次训练即可满足需求

  • 资源限制:缺乏专门的机器学习运维能力,无法管理多轮训练周期

  • 收益有限:训练开销过大,而性能提升微乎其微,性价比不足

示例工作流:SFT → RFT

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

步骤 1:初始 SFT 训练

使用数据集配置并启动 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 训练

使用 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:评估与迭代

对 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 密钥。

监控迭代进度

您可以通过为训练作业设置 MLflow 来跟踪各项指标。

创建 MLflow 应用程序

使用 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 应用程序

使用 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 的链接。

要跟踪的关键指标

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

针对 SFT

  • 训练损失曲线

  • 已处理样本数量及处理耗时

  • 预留测试集上的性能准确率

  • 格式合规性(如有效 JSON 输出率)

  • 领域专属评估数据上的困惑度

针对 RFT

  • 训练过程中的平均奖励分数

  • 奖励分布(高奖励响应占比)

  • 验证奖励趋势(关注过拟合情况)

  • 任务专属成功率(如代码执行通过率、数学题准确率)

一般性问题

  • 迭代间基准性能变化

  • 代表性样本的人工评估分数

  • 生产环境指标(若采用迭代式部署)

停止迭代的判定条件

满足以下任一情况即可停止迭代:

  • 性能趋于平稳:继续训练无法显著提升目标指标

  • 切换训练技术有效:若某一技术效果趋于平稳,可尝试切换(如 SFT → RFT → SFT)以突破性能瓶颈

  • 达到目标指标:已满足预设的成功标准

  • 检测到性能退化:新迭代导致模型效果下降(参见下文回滚流程)

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

最佳实践

从小规模开始,逐步扩展规模

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

设定明确的成功指标

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

不同使用案例的成功指标示例

  • 问答任务:精确匹配准确率、F1 分数、人工偏好评分

  • 代码生成:单元测试通过率、编译成功率、执行时间

  • 推理任务:步骤准确率、最终答案正确率、奖励分数

  • 内容生成:连贯性得分、事实准确性、风格符合度

实现自动化评估

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

保持严格的版本控制

为每一轮迭代记录以下信息:

  • 数据集版本与修改内容

  • 模型检查点位置

  • 超参数变更

  • 性能指标及变化量

  • 定性观察结论

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

优先关注数据质量而非数量

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

规划迭代预算

典型迭代次数建议为 3–5 轮

  • 1–2 轮迭代:通常足以完成简单优化或最终精调

  • 3–5 轮迭代:适用于需要多轮优化的复杂任务

  • 5 轮以上迭代:可能出现边际收益递减,或需要更换方案

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

具备回滚能力

若某轮迭代出现性能退化:

  • 定位退化原因:对比各检查点的评估指标

  • 回退到上一检查点:使用早期检查点的 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>"

成本注意事项

检查点存储

  • 位置:检查点存储在托管存储桶中,将产生标准 S3 存储费用,计入您的 AWS 账户账单

  • 保留:检查点将永久保留,除非手动显式删除

  • 管理:可配置生命周期策略,对不再需要的旧检查点进行归档或删除

成本优化建议

  • 验证新版迭代效果后,及时删除中间过程产生的检查点

  • 将需长期保留的检查点归档至 S3 Glacier,降低存储成本

  • 根据合规要求与实验需求,设置合理的保留策略

限制

模型系列一致性

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

初始训练

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

后续所有迭代必须使用相同的 model_type

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>"

训练技术一致性

迭代过程中训练技术必须保持一致:

  • 使用 LoRA 训练的模型,只能继续用 LoRA 进行迭代训练

  • 使用全秩训练的模型,只能继续用全秩进行迭代训练

迭代训练中 LoRA 适配器的工作机制

  • 每一轮 LoRA 训练迭代都会生成新的适配器权重

  • 新适配器会替换旧适配器(而非叠加)

  • 基础模型保持冻结,仅更新适配器

训练技术兼容性矩阵

初始训练 可迭代的训练方式
SFT(全秩) SFT(全秩)、RFT(全秩)
SFT(LoRA) SFT(LoRA)、RFT(LoRA)
RFT(全秩) RFT(全秩)
RFT(LoRA) RFT(LoRA)

作业启动前的兼容性验证

  • 查看上一轮训练配方,确认模型类型与训练技术(LoRA/全秩)

  • 确保新配方与上述模型类型和技术完全一致

  • 查看 manifest.json 文件,确认检查点路径准确无误

问题排查

错误:“Incompatible model training techniques detected”

原因:当前使用的训练技术(LoRA/全秩)与检查点所用技术不一致。

解决方法:确保配方使用与原模型相同的训练技术:

  • 若检查点基于 LoRA 训练,新配方需使用 LoRA

  • 若检查点基于全秩训练,新配方需使用全秩

错误:“Base model for the job extracted from model_name_or_path does not match model_type”

原因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”

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

解决方法:

  • 验证 S3 路径是否从 manifest.json 文件中正确复制

  • 确保 IAM 角色拥有访问托管存储桶的权限

  • 确认上一轮训练作业已成功完成

  • 检查路径是否存在拼写错误

迭代后性能退化

现象:新训练迭代完成后,评估指标出现下降。

解决方法:

  • 回滚:使用上一轮检查点作为基础模型

  • 分析:检查失败迭代的训练日志及数据质量

  • 调整:修改超参数(降低学习率)、提升数据质量或减少训练轮数(epoch)

  • 重试:使用调整后的参数重新启动迭代训练