mcpField
F
finetuning

finetuning

github.com/awslabs开发932151 次安装3 周前更新
代码仓库

关于 finetuning

finetuning 是在 SageMaker 上生成模型微调代码的 Agent skill,面向已确定用例、基础模型、微调技术和数据集的用户。它按技术类型使用指定模板,并包含 RLVR、RLAIF 和许可确认等对应步骤。

主要功能

  1. 01按微调技术选择代码模板
  2. 02生成配置并保存训练笔记本
  3. 03为 RLVR 配置奖励函数
  4. 04提供 RLAIF 和许可处理流程
  5. 05训练运行及状态检查指导

适用场景

  1. 01为 SFT 或 DPO 准备训练笔记本
  2. 02创建 RLVR 奖励函数配置
  3. 03启动训练并查看作业状态

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/awslabs/agent-plugins --skill finetuning

安装后在 Claude Code 中输入/finetuning确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

code_templates/
dpo.py
rlaif_builtin.py
rlaif_custom_prompt.py
rlvr.py
sft.py
references/
code_output_guide.md
continuous_customization.md
eula_links.md
rlaif_guide.md
rlvr_reward_function.md
scripts/
mlflow_reference.py
templates/
nova_rlvr_reward_function_source_template.py
rlvr_reward_function_source_template.py

详细介绍

前置条件

开始此工作流前,请确认:

  1. 存在 use_case_spec.md 文件

    • 如果缺失:先启用 use-case-specification 技能,然后继续
    • 绝不要在未启用 use-case-specification 技能的情况下,提出创建用例规范。
  2. 已选定微调技术(SFT、DPO、RLVR、RLAIF 或 CPT/RFT(用于 Nova))和基础模型

    • 如果缺失:启用 model-selection 和/或 finetuning-technique 技能以收集缺少的信息,然后继续
    • 不要临时提出建议。必须启用相应的技能。
  3. 已确定 SageMakerHub 上可用的基础模型名称

    • 如果缺失:启用 model-selection 技能来获取
    • **重要:**只能使用 model-selection 获取的模型名称,因为它可能与该模型的其他常用名称不同。
  4. 已验证 SDK 环境(SDK 版本、区域、执行角色)

    • 如果尚未完成:先启用 sdk-getting-started 技能,然后继续
  5. 已将训练数据集上传到环境默认区域中的存储桶。

    • 如果尚未满足:帮助用户将数据集上传到正确的 S3

关键规则

代码生成规则

  • ✅ 使用每个代码模板中列出的准确导入语句
  • ❌ 不要添加额外的导入语句,即使它们看起来有用
  • ❌ 不要在相应章节需要变量之前创建变量
  • 📋 严格复制代码结构,不要自行发挥
  • 🎯 严格遵循最少代码原则
  • ✅ 编写代码时,确保缩进和 f 字符串正确

用户沟通规则

  • ❌ 训练进行期间,绝不要提出转到后续技能(逻辑上不可能)
  • ❌ 未经用户在对话中明确确认,绝不要将 ACCEPT_EULA 设置为 True
  • ✅ 始终同时提及所引用章节的编号和标题
  • ✅ 如果用户询问如何运行(notebook):如果有 run_cell,则提出代为运行;否则告知用户逐个运行单元格(并提及 ipykernel 要求)。
  • ✅ 如果用户询问如何运行(脚本):告知用户使用 python3 <script>.py 运行

工作流

1. 代码生成设置

1.1 目录设置
  1. 根据对话上下文确定项目目录
    • 如果不明确(存在多个相关目录)→ 询问用户要使用哪个文件夹
    • 如果不存在项目目录 → 启用 directory-management 技能来创建目录

⏸ 等待用户。

1.2 选择代码模板

阅读 references/code_output_guide.md,了解输出格式规则,然后阅读与微调策略对应的代码模板:

  • SFT → code_templates/sft.py
  • DPO → code_templates/dpo.py
  • RLVR → code_templates/rlvr.py
  • 使用内置奖励的 RLAIF → code_templates/rlaif_builtin.py
  • 使用自定义提示词的 RLAIF → code_templates/rlaif_custom_prompt.py

模板是一个 Python 文件,其中每条 # Cell N: Label 注释都标记了新章节的开始。按这些标记拆分——从一条标记到下一条标记之间的所有内容,都作为一个输出单元。

1.3 生成代码
  1. 按照 code_output_guide.md 中的规则编写模板代码
  2. 使用与模板相同的顺序、依赖项和导入语句
  3. 不要自行发挥或添加额外代码
  4. 如果模型不是 Meta/Llama 模型(模型 ID 不以 meta- 开头):
    • 从配置单元格中省略 ACCEPT_EULA = False 这一行
    • 从训练器调用中省略 accept_eula=ACCEPT_EULA, 这一行
  5. 如果模型属于 Nova 系列,则从“配置训练器”章节和“超参数覆盖”章节中省略任何包含 max_epochs 或 lr_warmup_steps_ratio 的代码
1.4 自动生成配置值

在“Setup & Credentials”单元格中填写:

  1. BASE_MODEL

    • 使用上下文中的 SageMakerHub 模型名称,务必完全一致
  2. MODEL_PACKAGE_GROUP_NAME

    • 根据使用场景生成(如有需要,请读取 use_case_spec.md)
    • 格式规则:
      • 仅使用小写字母、数字和连字符
      • 1-63 个字符
      • 模式:[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}
      • 示例:“客户支持聊天机器人” → customer-support-chatbot-v1
  3. 保存 Notebook

2. RLVR 奖励函数(仅适用于 RLVR;如果技术方案是 SFT 或 DPO,请跳过此部分)

2.1 检查奖励函数状态
  • 询问用户是否已有奖励函数,或是否需要帮助创建。
    • 如果用户表示已有 → 询问 SageMaker Hub Evaluator ARN。只有在用户提供有效的 Evaluator ARN 后,才继续第 2.3 节。如果该函数尚未注册为 SageMaker Hub Evaluator,则继续第 2.2 节。
    • 如果用户表示没有 → 继续第 2.2 节
2.2 根据模板生成奖励函数
  1. 按照 references/rlvr_reward_function.md 中“帮助用户创建自定义奖励函数”部分的工作流操作
2.3 设置 CUSTOM_REWARD_FUNCTION 值
  1. 在 Notebook 中,将奖励函数的 ARN 设为 CUSTOM_REWARD_FUNCTION 的值(该 ARN 可以由用户直接提供,也可以通过函数生成代码中的 evaluator.arn 获取)。

3. RLAIF(仅适用于 RLAIF;如果技术方案不是 RLAIF,请跳过此部分)

阅读 references/rlaif_guide.md 并遵循其中的说明。

4. EULA 审核与接受

  1. 从 references/eula_links.md 中查找所选基础模型的官方许可链接
  2. 按照 references/eula_links.md 中的措辞向用户展示许可。对于 OSS 模型:“此模型采用 {License} 许可。请在此处查看许可条款:{URL}。”对于 Nova 模型:“此模型受 AWS 服务条款约束:{URL}。”
  3. 检查所选基础模型是否为 Meta/Llama 模型(模型 ID 以 meta- 开头)
    • 如果是 Meta/Llama:告知用户使用此模型前必须阅读并同意 EULA。询问:“您是否接受许可条款?(是/否)”。如果用户确认,将 ACCEPT_EULA = True,并在生成的 Notebook 中取消注释 accept_eula=ACCEPT_EULA。如果用户拒绝,则保留 ACCEPT_EULA = False,并警告用户:未接受许可将导致训练失败。
    • 如果不是 Meta 模型:告知用户相关许可以供参考。无需在代码层面采取任何操作——Notebook 中应已省略 ACCEPT_EULA 变量和 accept_eula 参数(参见步骤 1.3)。

5. 生成后

生成代码后,询问用户是否要运行。训练可能需要数小时,具体取决于数据集和模型。

Notebook 模式: 如果有 run_cell,询问用户是否要运行这些单元格。否则,告知用户自行运行单元格。

脚本模式: 向用户提供以下选项:

“您希望我:

  1. 由您自行运行 — 使用 python scripts/[script_name] 运行
  2. 运行脚本并等待完成
  3. 启动脚本但不等待 — 我们之后可以查看状态”
  • 选项 1: 完成。等待用户回来。
  • 选项 2: 按原样执行脚本。trainer.train(wait=True) 会一直阻塞到训练完成。报告最终状态。
  • 选项 3: 将脚本中的 wait=True 改为 wait=False,然后执行,并报告训练任务名称。

查看状态:

  • describe-training-job --training-job-name NAME → TrainingJobStatus、FailureReason、SecondaryStatusTransitions
  • 完成后获取模型包 ARN:list-model-packages --model-package-group-name GROUP_NAME --sort-by CreationTime --sort-order Descending --max-results 1

完成后展示结果:

  • 参考 scripts/mlflow_reference.py,查询 MLflow 指标
  • 以文本表格展示每个 epoch 的损失(SFT 显示 total_loss、val_eval_total_loss;DPO 显示 rewards/margins;RLVR 显示 critic/rewards/mean)

重要:

  • 训练完成前,不要建议用户进入下一步
  • 除非用户特别询问,否则不要详细介绍后续步骤。

6. 持续自定义

如果用户想微调已经自定义过的模型,请遵循 references/continuous_customization.md 中的说明


参考资料

  • rlvr_reward_function.md - Lambda 奖励函数创建指南(仅适用于 RLVR)
  • templates/rlvr_reward_function_source_template.py - 面向开源权重模型的 Lambda 奖励函数源码模板(仅适用于 RLVR)
  • templates/nova_rlvr_reward_function_source_template.py - 面向 Nova 2.0 Lite 的 Lambda 奖励函数源码模板(仅适用于 RLVR)
  • code_templates/sft.py - 监督式微调(OSS 路径)的完整 Notebook 模板
  • code_templates/dpo.py - 直接偏好优化(OSS 路径)的完整 Notebook 模板
  • code_templates/rlvr.py - 可验证奖励强化学习(OSS 路径)的完整 Notebook 模板
  • references/continuous_customization.md - 微调已完成微调的模型的说明。
  • rlaif_guide.md - RLAIF 微调选项说明
  • rlaif_builtin.py - 使用内置裁判提示词的 RLAIF 代码模板
  • rlaif_custom_prompt.py - 使用自定义裁判提示词的 RLAIF 代码模板

评论

支持 Markdown