with one click
byted-ark-trainer
// 基于ark_sdk的大模型训练任务自动化工具。帮助用户通过自然语言创建并提交方舟模型训练任务,支持用户自备数据的SFT训练、RFT+GRPO和直接GRPO策略,并引导用户完成训练、状态跟踪与评估闭环。使用场景:当用户需要进行大模型SFT监督微调、RLHF训练、GRPO训练、RFT训练,或需要自动化训练流程时触发。
// 基于ark_sdk的大模型训练任务自动化工具。帮助用户通过自然语言创建并提交方舟模型训练任务,支持用户自备数据的SFT训练、RFT+GRPO和直接GRPO策略,并引导用户完成训练、状态跟踪与评估闭环。使用场景:当用户需要进行大模型SFT监督微调、RLHF训练、GRPO训练、RFT训练,或需要自动化训练流程时触发。
[HINT] Download the complete skill directory including SKILL.md and all related files
| name | byted-ark-trainer |
| description | 基于ark_sdk的大模型训练任务自动化工具。帮助用户通过自然语言创建并提交方舟模型训练任务,支持用户自备数据的SFT训练、RFT+GRPO和直接GRPO策略,并引导用户完成训练、状态跟踪与评估闭环。使用场景:当用户需要进行大模型SFT监督微调、RLHF训练、GRPO训练、RFT训练,或需要自动化训练流程时触发。 |
| license | Apache-2.0 |
| metadata | {"version":"1.0.0","author":"volcengine/modelark","tags":"ark model-training sft rft grpo"} |
所有提及的 scripts/ 和 references/ 目录均为相对于本skill安装目录的路径,而非当前工作目录。
执行脚本或读取文档时,必须先定位到 byted-ark-trainer skill 的安装目录,或使用完整绝对路径调用。
所有工具功能统一通过 ark-trainer-helper 命令入口调用,例如:
如果skill安装在 ~/.agents/skills/byted-ark-trainer/,则调用命令时应使用:
python ~/.agents/skills/byted-ark-trainer/scripts/ark_trainer_helper.py <命令> <参数>
或配置到PATH后直接使用:
ark-trainer-helper <命令> <参数>
本SKILL的所有流程要求优先级最高,高于任何通用推理逻辑。所有步骤必须严格按顺序执行,严禁跳过、调整顺序或自行发挥。如果对流程有任何疑问,必须先询问用户确认,不得自行决定。 违反流程要求的执行会直接导致任务失败,必须回退到对应的步骤重新执行。
每执行下一步前,必须先对照以下清单检查前置条件是否全部满足,未满足的务必向用户询问:
ark-trainer-helper --help 可正常运行experiments/ 实验目录list-models 确认精确模型名(非模糊前缀),已通过 list-versions 与用户确认版本,已通过 ark get foundation-model ... --fields hyperparameters 校验该模型+版本支持用户期望的训练方式,并记录可配置超参数清单experiments/ 下创建唯一的子目录,所有job文件/临时脚本都会放在该子目录中references/模型精调数据集格式指南/SFT.md 并校验用户提供的数据集EXPERIMENT.md在执行训练流程前,根据训练类型检查不同文件:
所有工具功能统一通过 ark-trainer-helper 命令入口调用,使用任意功能前,务必先运行 ark-trainer-helper <模块> --help 或 ark-trainer-helper <模块> <子命令> --help 查看完整的参数说明、使用示例和参数默认值,避免因参数配置错误导致任务失败。
例如:
ark-trainer-helper train evaluate --helpark-trainer-helper job status --helpark-trainer-helper model 只有 list-models 和 list-versions,没有 get-hyperparameters 子命令;查询超参数必须使用 ark get foundation-model --model <基础模型名> --version <版本号> --fields hyperparameters。CLI助手工具提供以下核心功能:
ark-trainer-helper job status --job-id <任务ID>ark-trainer-helper job get-model --job-id <任务ID>HEARTBEAT.md 顶部系统提醒块):ark-trainer-helper job register-heartbeat --job-id <任务ID> --job-type <SFT/RFT/GRPO/...> --job-url <任务链接> --exp-dir <实验子目录绝对路径># 查询所有LLM基础模型
ark-trainer-helper model list-models
# 模糊查询名称包含'doubao'的模型
ark-trainer-helper model list-models --name doubao
# 查询支持FinetuneLoRA训练的模型
ark-trainer-helper model list-models --supported-customization-type FinetuneLoRA
ark-trainer-helper model list-versions --model-name <模型名> (例如 doubao-seed-1-6)ark get foundation-model --model <基础模型名> --version <版本号> --fields hyperparameters
(该命令可用于获取训练任务支持的所有超参数列表、取值范围和默认值)ark-trainer-helper train evaluate --dataset <数据集路径> --rollout <rollout文件路径> --grader <grader文件路径> --output-dir <实验子目录>/eval_output
⚠️ 实际评估的模型由 rollout.py 内部 chat.completions.create(model=...) 传入的字符串决定。运行 evaluate 前必须先把 rollout 中的 model= 改成目标模型名/版本/端点ID/自定义模型ID;详见「评估前强制步骤:把 rollout 的 model 字段改成当前评估对象」。本命令不接受 --model 参数。
⚠️ --output-dir 必须指向本次实验子目录下的子目录(例如 experiments/exp_xxx/eval_output / rft_eval_output / final_eval_output),不得放在工作区根目录或其他实验的目录中。日志会自动写入 <output-dir>/logs/eval_YYYYMMDD_HHMMSS.log,支持自动轮转,最大10MB。ark-trainer-helper train rft-data-collect --eval-results <评估结果JSON路径> --output-file <输出JSONL路径> --rollout <rollout文件路径>所有命令均可通过 --help 查看详细参数。
用户提供训练数据后,不要凭经验判断格式;必须按训练类型和数据内容加载对应指南,只加载需要的文件:
| 场景 | 必读指南 |
|---|---|
| SFT监督微调 | references/模型精调数据集格式指南/SFT.md |
| GRPO/PPO/RL数据 | references/模型精调数据集格式指南/RL.md |
| DPO/偏好学习 | references/模型精调数据集格式指南/DPO.md |
| CPT/继续预训练 | references/模型精调数据集格式指南/CPT.md |
| Function Calling样本 | references/模型精调数据集格式指南/Function Calling 样本要求.md |
| 图片或多模态图片样本 | references/模型精调数据集格式指南/图片文件要求.md |
| 视频样本或视频抽帧 | references/模型精调数据集格式指南/视频文件要求.md,必要时再读 references/模型精调数据集格式指南/对视频内容进行抽帧处理.md |
| thinking/reasoning_content字段 | references/模型精调数据集格式指南/数据集Thinking字段处理工具.md,多轮场景再读 references/模型精调数据集格式指南/多轮reasoning_content的样本文件拆分.md |
SFT数据集校验至少要确认:JSONL每行都是合法JSON;文件绝对路径不含 *、?、[、];样本结构符合用户要训练的模型类型;必填字段存在且类型正确;多模态资源路径/TOS/base64格式符合附录要求;reasoning_content、thinking、Function Calling字段只在模型和格式指南允许时使用。
遇到同类情况必须优先按本节处理,避免重复试错。
<用户指定python> <skill目录>/scripts/ark_trainer_helper.py --help
ModuleNotFoundError: No module named '<模块名>',说明当前Python环境缺少该模块依赖,必须安装到用户指定Python环境后再继续,不要切换Python环境来绕过问题:
<用户指定python> -m pip install <模块名>
.env 中通常是 KEY=value 格式,直接 source .env 只会设置当前shell变量,Python子进程可能读不到。set -a; source .env; set +a; <用户指定python> <skill目录>/scripts/ark_trainer_helper.py ...
或显式 export ARK_API_KEY=...、export VOLCENGINE_ACCESS_KEY=...、export VOLCENGINE_SECRET_KEY=...。ARK_API_KEY environment variable is not set,优先修正导出方式,不要反复重跑同一命令。No rollout function found,在rollout文件末尾增加别名导出,例如:rollout_func = demo_rollout。No grader function found,在grader文件末尾增加别名导出,例如:grader_func = random_reward_fn。references/ 官方文档中的SDK结构。ark get foundation-model --model <基础模型名> --version <版本号> --fields hyperparameters 查询该模型当前支持的超参数。FinetuneLoRA 常用字段是 epoch、batch_size、learning_rate、warmup_step_rate、seq_len、lora_rank、lora_alpha、save_model_per_epoch。GRPOLoRA 常用字段是 num_steps、batch_size、lr、lr_warmup_steps、num_generations、num_iterations_per_batch、temperature、top_p、max_new_tokens、save_every_n_steps、test_every_n_steps。GRPOLoRA 字段直接复用到 FinetuneLoRA。例如 FinetuneLoRA 使用 learning_rate,不是 lr;不要配置 num_steps、temperature、top_p、max_new_tokens 这类GRPO rollout字段。OperationDenied.InvalidHyperparameter,不要重试提交;立即查询超参数并修正 job.yaml。ark-trainer-helper job register-heartbeat 更新 HEARTBEAT.md,再告知“已添加到心跳监控”。先根据用户目标确定流程分支:
🔴 校验点:必须执行,跳过直接导致流程失败
首先询问用户:「是否已有现成的ARK训练工作区?」
ark init workspace <项目名> --template rl_demo 命令创建标准化训练工作区在工作区根目录下创建(或复用)实验总目录 experiments/,用于集中存放所有实验的临时脚本和job文件。
为当前这次训练任务在 experiments/ 下创建一个唯一的实验子目录:
exp_<YYYYMMDD_HHMMSS>_<简短任务描述>,例如 exp_20260425_143200_sft_doubao_lorajob.yaml / job.py、临时脚本、评估脚本、实验说明 EXPERIMENT.md 等data/、plugins/),在实验子目录的 job.yaml 中通过相对/绝对路径引用即可EXPERIMENT.md,记录:本次实验目标、训练策略、与用户确认过的关键配置、后续流程、实验子目录绝对路径所有后续操作均在该工作区内完成;所有本次实验相关的临时脚本和job文件都必须放在实验子目录内,不得散落在工作区根目录或与其他实验混放。 ✅ 自我验证:
data/、plugins/、experiments/ 等标准结构EXPERIMENT.md 已初始化并写入实验计划和已确认信息工作区结构参考:byted-ark-trainer/references/ark-sdk guide.md 中「项目的初始化」章节。
<工作区根目录>/
├── data/ # 公共数据集目录
├── plugins/ # 公共 rollout/grader 插件目录
├── experiments/ # 所有实验集中存放
│ ├── exp_20260425_143200_sft_doubao_lora/
│ │ ├── EXPERIMENT.md # 本次实验计划、已确认信息、后续流程
│ │ ├── job.yaml # 本次实验的训练任务配置
│ │ ├── submit.sh # 可选:本次实验使用的提交脚本
│ │ ├── eval_output/ # 初始评估结果目录(evaluate --output-dir 指向这里;日志自动落在其下 logs/ 子目录)
│ │ ├── rft_eval_output/ # 可选:RFT 阶段 teacher 模型轨迹收集结果目录
│ │ └── final_eval_output/ # 可选:训练完成后的测试集评估结果目录
│ └── exp_20260426_101500_grpo_v1/
│ ├── EXPERIMENT.md
│ └── job.yaml
└── .env
每个实验子目录必须在创建时初始化 EXPERIMENT.md,后续随着用户确认信息增量更新:
# 实验:<实验名>
- 实验子目录绝对路径:/absolute/path/to/experiments/exp_xxx
- 工作区绝对路径:/absolute/path/to/workspace
- 创建时间:2026-04-25 14:32:00
- 训练策略:SFT / RFT+GRPO / 直接GRPO
- 基础模型:doubao-seed-1-6 (version 250828)
## 实验计划
1. ...
2. ...
## 基础模型与训练方式确认
- 精确模型名:doubao-seed-1-6
- 选定版本:251015
- 该模型支持的训练方式:FinetuneSft, FinetuneLoRA, GRPO, GRPOLoRA, DPO, DPOLoRA, PPO, OPD, OPDLoRA
- 本次选用的训练方式:FinetuneLoRA
- 允许配置的超参数清单:epoch / batch_size / learning_rate / lora_rank / ...
- 查询命令:`ark get foundation-model --model doubao-seed-1-6 --version 251015 --fields hyperparameters`
## 已与用户确认的信息
- Python环境:...
- 数据集路径(训练/测试):...
- rollout / grader 文件路径:...
- 超参数:...
- 任务链接:<任务提交后补充>
- 任务ID:<任务提交后补充>
## 后续流程
- 任务完成后需要执行的下一步(例如:获取模型ID → 在测试集上评估 → 对比BON/AON/AvgN)
验证以下内容:
<用户指定python> <skill目录>/scripts/ark_trainer_helper.py --help.env 文件,或环境变量中是否已配置:
ARK_API_KEY:ARK平台API密钥VOLCENGINE_ACCESS_KEY:火山引擎访问密钥AKVOLCENGINE_SECRET_KEY:火山引擎访问密钥SK.env 文件set -a; source .env; set +a 或显式 export,确认Python子进程能读取这些变量🔴 强制校验点:所有训练类型(SFT / RFT / GRPO / DPO / ...)在进入数据集处理之前必须完成本步,且每一项都需要得到用户明确确认。严禁凭经验/训练数据猜测模型是否存在、版本号是否正确、或该模型+版本是否支持用户期望的训练方式。
执行顺序和校验要点如下:
用户给出模型名后(例如"doubao-seed-1-6"),不要直接当作最终名称使用——list-models --name 是前缀模糊匹配,doubao-seed-1-6 会同时命中 doubao-seed-1-6、doubao-seed-1-6-flash、doubao-seed-1-6-lite、doubao-seed-1-6-vision、doubao-seed-1-6-thinking、doubao-seed-1-6-nano 等多个模型。
ark-trainer-helper model list-models --name <用户输入的模型名>
ark-trainer-helper model list-versions --model-name <精确模型名>
展示所有版本号给用户,询问用户希望使用的版本。若用户没有偏好,优先向用户推荐稳定版本(例如纯数字日期的版本号如 250615、251015),而不是 dev / preview / med 等后缀版本;但最终版本号必须由用户明确确认,不得自行决定。
说明:同一模型的不同版本可视为支持相同的训练方式与超参数。因此本步只需任选一个版本(优先用户选定版本)查询一次;若用户选定版本查询失败(如版本已下线、接口返回为空),可退回到该模型的其他版本查询,结论仍可复用。
ark get foundation-model --model <精确模型名> --version <版本号> --fields hyperparameters
FinetuneSft、FinetuneLoRA、GRPO、GRPOLoRA、DPO、DPOLoRA、PPO、OPD、OPDLoRA 等。FinetuneLoRA(LoRA 训练,默认)或 FinetuneSft(全量)中的至少一个。LoRA 优先。FinetuneLoRA / FinetuneSft。GRPOLoRA(LoRA,默认)或 GRPO(全量)中的至少一个。LoRA 优先。job.yaml 时允许配置的唯一超参数集合;严禁跨训练方式复用字段(例如把 GRPOLoRA 的 lr / num_steps 用到 FinetuneLoRA)。EXPERIMENT.md在进入数据集处理前,必须把本步结论以如下结构写入当前实验子目录的 EXPERIMENT.md:
## 基础模型与训练方式确认
- 精确模型名:doubao-seed-1-6
- 选定版本:250615
- 该模型支持的训练方式:FinetuneSft, FinetuneLoRA, GRPO, GRPOLoRA, DPO, DPOLoRA, PPO, OPD, OPDLoRA
- 本次选用的训练方式:FinetuneLoRA
- 允许配置的超参数(FinetuneLoRA):
- epoch: [1, N], default=...
- batch_size: {...}, default=...
- learning_rate: [..., ...], default=...
- lora_rank: ...
- ...
- 查询命令与时间:`ark get foundation-model --model doubao-seed-1-6 --version 250615 --fields hyperparameters`(2026-04-25 14:30)
只有当以上四步全部完成、并得到用户明确确认后,才能进入 Step 3 数据集处理。
🔴 RL/RFT/GRPO校验点:必须确保有明确的训练集和测试集才能继续后续流程,禁止使用整个数据集同时做训练和评估
references/模型精调数据集格式指南/SFT.md,根据模型类型和数据内容校验格式。validation_percentage 或不配置验证集;不得强制划分测试集。data/ 目录,保留原始文件不变。data/ 目录🔴 强制要求:RL/RFT/GRPO初始评估前必须执行,用户确认后才能继续;SFT场景跳过本节
整理初始评估相关的关键信息,示例格式:
📊 初始评估前信息汇总
====================================
Python环境:conda环境 py310 (ark-sdk v2.1.0)
工作目录:/home/user/ark_training/my_project
测试集:test.jsonl (200条)
Rollout文件:/home/user/ark_training/rollout.py
Grader文件:/home/user/ark_training/grader.py
评估模型:doubao-seed-1-6
评估配置:每个样本8次rollout,最大并发15
====================================
向用户说明初始评估流程:
📋 即将执行初始评估:
1. 在测试集上运行模型评估,计算BON/AON/AvgN指标
2. 根据BON指标自动选择训练策略(BON<0.3:RFT+GRPO;BON≥0.3:直接GRPO)
3. 评估结果将作为训练策略选择的唯一依据
询问用户:「以上评估信息是否确认无误?是否开始初始评估?」
只有用户明确确认后,才能进入初始评估步骤 ⚠️ 未获得用户确认不得执行评估任务
RL/RFT/GRPO必须执行,不得跳过;SFT场景跳过本步骤
rollout.py 中的 model= 字段改成当前基础模型(按「评估前强制步骤:把 rollout 的 model 字段改成当前评估对象」中的流程操作)。本次评估对象是 Step 2.5 确认的基础模型名+版本(如 doubao-seed-1-6-flash-250615)。ark-trainer-helper train evaluate(使用完整路径)在测试集上评估当前基础模型效果。--output-dir 必须指向本次实验子目录下的 eval_output/(不是工作区根目录、不是其他实验目录):ark-trainer-helper train evaluate \
--dataset <测试集路径> \
--rollout <rollout.py路径> \
--grader <grader.py路径> \
--output-dir experiments/exp_xxx/eval_output
experiments/exp_xxx/eval_output/logs/eval_YYYYMMDD_HHMMSS.log(与结果天然绑定在同一目录,查 bad case 时无需跨目录翻找)
⚠️ RL/RFT/GRPO不允许跳过该步骤,训练策略选择必须基于评估结果。
⚠️ 本命令不接受 --model 参数;实际评估的模型完全由 rollout.py 内部 model= 字段决定。每次执行evaluate命令前,务必检查 rollout.py 中的 model= 字段是否与当前预期评估对象一致。RL/RFT/GRPO必须基于BON指标判断,不得提前选择策略;SFT场景按用户明确意图直接走SFT策略
🔴 强制要求:正式训练前必须执行,用户确认后才能继续
整理评估结果和训练相关的所有关键信息,示例格式:
📊 正式训练前信息汇总
====================================
初始评估结果:
BON Score: 0.21 / AON Score: 0.05 / AvgN Score: 0.18
训练策略:BON=0.21 < 0.3,采用「先RFT再GRPO」策略
训练配置:
训练类型:默认使用LoRA训练(FinetuneLoRA + GRPOLoRA)
RFT Teacher模型:doubao-seed-1-6 或 cm-xxxxxxxxxxxx-xxxxx(用户提供)
训练集:train.jsonl (1000条)
Rollout/Grader文件与评估阶段一致
====================================
SFT场景示例:
📊 SFT训练前信息汇总
====================================
训练策略:SFT监督微调(用户自备训练数据)
数据集格式校验:已按 references/模型精调数据集格式指南/SFT.md 检查通过
训练类型:默认使用LoRA训练(FinetuneLoRA),如用户明确要求全量则使用FinetuneSft
基础模型:doubao-seed-1-6-flash (version 250828)
训练集:data/sft_train.jsonl (1000条)
验证集:未配置 / validation_percentage=10 / data/sft_val.jsonl
====================================
向用户说明完整训练流程:
📋 即将执行完整训练流程:
【先RFT再GRPO策略】
1. 使用teacher模型在训练集上生成RFT轨迹数据
2. 筛选reward=1.0的优质轨迹生成RFT训练数据
3. 提交RFT训练任务
4. RFT完成后提交GRPO训练任务
5. 训练完成后在测试集上重新评估模型效果
6. 输出最终效果提升报告和模型ID
(如果是直接GRPO策略则对应调整流程说明) SFT场景需说明:
📋 即将执行SFT训练流程:
1. 使用用户自备训练集提交SFT训练任务
2. 跟踪训练任务状态
3. 训练完成后返回模型ID
4. 如用户提供评估集和评估方式,再执行后续效果评估
明确询问用户:「以上训练信息是否确认无误?是否同意开始正式训练?」
只有当用户明确回复确认后,才能进入后续训练执行步骤
如果用户对配置有异议,先调整相关参数,重新确认后再执行 ⚠️ 严禁在未获得用户明确确认的情况下提交任何训练任务
适用条件:用户明确要做SFT/监督微调,且训练数据由用户自行准备。SFT不是RFT,不需要teacher模型,不需要rollout/grader,不需要初始BON评估。
确认训练目标与数据类型:
references/模型精调数据集格式指南/SFT.md;若包含图片、视频、Function Calling或thinking字段,再按「数据集格式指南按需加载」读取对应附录。检查SFT数据集格式:
*、?、[、]。loss_weight、thinking、reasoning_content、多模态资源地址。配置SFT训练任务:
customization_type: FinetuneLoRA。customization_type: FinetuneSft,并提前告知全量训练产物可能不支持自动创建共享端点。references/templates/job_sft_lora.yaml(YAML)或 references/templates/job_sft_lora.py(Python)复制到本次实验子目录(experiments/exp_xxx/job.yaml 或 job.py),再按实际情况改值。严禁从零手写 job 文件,也严禁参考其他实验子目录里已有的 job 文件当模板。name、model_reference.foundation_model.{name, model_version}(model_version 必须是字符串!)、data.training_set.local_files、hyperparameters、可选 data.validation_set 或 data.validation_percentage。hyperparameters 只保留 Step 2.5 查询到的白名单字段,模板里默认带的字段如果不在白名单内必须删除。references/ark-sdk guide.md 中「精调参数的配置」章节;模板文件头的注释也给出了常见踩坑速查。job.yaml。ark get foundation-model --model <基础模型名> --version <版本号> --fields hyperparameters 查询该模型版本支持的 FinetuneLoRA 或 FinetuneSft 超参数,并只配置查询结果允许的字段。custom_rl_pipeline,不要配置 enable_trajectory。提交前确认:
ark create mcj -f job.yaml 提交任务(或使用绝对路径提交)。EXPERIMENT.md(详细信息都写在这里)ark-trainer-helper job register-heartbeat 登记到 HEARTBEAT.md,严禁用编辑器手写 HEARTBEAT.md 的任何内容(理由见下方「心跳任务添加方式」)ark-trainer-helper job get-model --job-id <任务ID> 自动获取 SFT 产出的模型 ID(格式 cm-xxx),禁止让用户手动去控制台查询RFT数据准备:
cm-)rollout.py 中的 model= 字段改成 teacher 模型(按「评估前强制步骤:把 rollout 的 model 字段改成当前评估对象」流程操作;初始评估时改过的值需要在此重新改为 teacher 模型)。ark-trainer-helper train evaluate(使用完整路径)使用teacher模型在训练集上运行,生成完整轨迹数据。--output-dir 必须指向当前实验子目录下的 rft_eval_output/:
ark-trainer-helper train evaluate \
--dataset <训练集路径> \
--rollout <rollout.py路径> \
--grader <grader.py路径> \
--output-dir experiments/exp_xxx/rft_eval_output
日志自动落在 experiments/exp_xxx/rft_eval_output/logs/eval_YYYYMMDD_HHMMSS.log。
⚠️ 本命令不接受 --model 参数;teacher 模型必须已经写入 rollout.py。若漏改,收集到的将是上一次 rollout 中的模型的轨迹,RFT 训练数据质量失去可信性。ark-trainer-helper train rft-data-collect(使用完整路径)从评估结果中筛选reward=1.0的优质轨迹,自动生成符合RFT格式的训练数据。--output-file 建议写在同一实验子目录下:
ark-trainer-helper train rft-data-collect \
--eval-results experiments/exp_xxx/rft_eval_output/eval_results.json \
--output-file experiments/exp_xxx/rft_train_data.jsonl \
--rollout <rollout.py路径>
如果rollout插件无法通过 rollout_tools 或 tools 变量暴露工具定义,改用 --tools-file <tools.json> 要求用户提供tools.json文件显式传入顶层 tools 定义。提交RFT训练任务: ⚠️ 重要提醒:RFT训练使用的基础模型必须与初始评估阶段使用的模型一致!teacher模型仅用于收集RFT轨迹数据,不作为训练的基础模型。
references/templates/job_sft_lora.yaml 或 job_sft_lora.py 复制到本次实验子目录起步,严禁从零手写。FinetuneLoRA;用户明确要求全量时才用 FinetuneSft。data.training_set.local_files)hyperparameters 只保留 Step 2.5 查询到的白名单字段byted-ark-trainer/references/ark-sdk guide.md(使用完整路径)中「精调参数的配置」章节ark create mcj -f job.yaml 提交任务EXPERIMENT.md;必须用 ark-trainer-helper job register-heartbeat 命令登记到 HEARTBEAT.md,严禁手写RFT模型获取:
执行 ark-trainer-helper job get-model --job-id <RFT任务ID> 获取 RFT 产出的自定义模型 ID(格式 cm-xxxxxxxxxxxx-xxxxx)。该命令要求任务状态为 Completed;若任务还未完成,等待心跳触发后再执行,禁止让用户手动去控制台查 ID,也不得自己编造或假设模型 ID。
提交GRPO训练任务:
references/templates/job_grpo_lora.yaml 或 job_grpo_lora.py 复制到本次实验子目录起步,严禁从零手写。模板中已包含 custom_rl_pipeline 骨架和 enable_trajectory: true。byted-ark-trainer/references/ark-sdk guide.md(使用完整路径)中「强化学习配置」章节和 byted-ark-trainer/references/RL guide.md(使用完整路径)完整文档EXPERIMENT.md 中标注当前阶段为「GRPO」,并在同一个子目录下使用新的 job.yaml(可命名为 job_grpo.yaml);如果新建实验子目录,则按 Step 1 的命名规则重新创建并初始化 EXPERIMENT.mdcustom_model_id = <RFT模型ID>GRPO 或 GRPOLoRAcustom_rl_pipeline 字段,正确关联rollout和grader pluginenable_trajectory: true 启用轨迹分析功能EXPERIMENT.md;必须用 ark-trainer-helper job register-heartbeat 命令登记到 HEARTBEAT.md,严禁手写跳过RFT阶段,直接提交GRPO训练任务:
references/templates/job_grpo_lora.yaml 或 job_grpo_lora.py 复制到本次实验子目录起步,严禁从零手写。byted-ark-trainer/references/ark-sdk guide.md(使用完整路径)和 byted-ark-trainer/references/RL guide.md(使用完整路径)文档experiments/exp_xxx/)下创建 job.yaml,不得放在工作区根目录foundation_model 字段)GRPO 或 GRPOLoRAEXPERIMENT.md(含后续流程=「GRPO完成后在测试集上评估并输出BON/AON/AvgN对比」);必须用 ark-trainer-helper job register-heartbeat 命令登记到 HEARTBEAT.md,严禁手写⚠️ 在任何 ark create mcj / python job.py 提交命令之前,必须先在工作区根目录下执行以下两条命令,给 FaaS 足够的目录遍历权限和文件读取权限:
find . -type d -exec chmod 755 {} \;
find . -type f -name "*.py" -exec chmod 644 {} \;
⚠️ ark-trainer-helper train evaluate 不提供 --model 参数;实际请求打到哪个模型完全由 rollout.py 内部 chat.completions.create(model="...") 传入的字符串决定。每次 evaluate(及 RFT 数据收集阶段的 evaluate)之前,必须先按本步骤把 rollout 中的 model= 改成本次要评估的对象,不得省略。
在 byted-ark-trainer 流程中,以下三个时机都会调用 train evaluate,每个时机对应的评估对象不一样:
doubao-seed-1-6-flash-250615,即「基础模型名-版本」拼接)。ep-xxx、或自定义模型ID cm-xxx)。ark-trainer-helper job get-model 返回的 cm-xxxxxxxxxxxx-xxxxx)。--output-dir 必须指向实验子目录--output-dir 必须指向当前实验子目录下的一个子目录,推荐命名:
experiments/exp_xxx/eval_outputexperiments/exp_xxx/rft_eval_outputexperiments/exp_xxx/final_eval_output./eval_output、./final_eval_output 等相对工作区根目录的路径——否则不同实验的评估结果会互相覆盖,而且无法通过实验子目录定位评估产物。<output-dir>/logs/eval_YYYYMMDD_HHMMSS.log(10MB 自动轮转)。结果与日志天然绑定在同一目录,便于 bad case 分析和心跳接手 AI 排查。--output-dir 的绝对路径增量记录到 EXPERIMENT.md,便于后续对比。ark-trainer-helper job get-model --job-id <任务ID> 获取训练产出的自定义模型 ID(格式 cm-xxx)。禁止让用户手动去控制台查询,也不得自己编造或假设模型 ID。rollout.py 中的 model= 字段改成本次训练产出的自定义模型ID(cm-xxxxxxxxxxxx-xxxxx),再调用 ark-trainer-helper train evaluate(使用完整路径)在测试集上重新评估模型效果。--output-dir 必须指向当前训练任务所属实验子目录下的 final_eval_output/(与该次训练的 job.yaml、初始评估的 eval_output/ 同级):
ark-trainer-helper train evaluate \
--dataset <测试集路径> \
--rollout <rollout.py路径> \
--grader <grader.py路径> \
--output-dir experiments/exp_xxx/final_eval_output
日志自动落在 experiments/exp_xxx/final_eval_output/logs/eval_YYYYMMDD_HHMMSS.log。
⚠️ 本命令不接受 --model 参数;要评估的模型完全由 rollout.py 中 model= 决定。忘改 rollout 将导致「训练前后对比」其实对比的是同一个模型两遍,BON/AON/AvgN 数字差异毫无意义。详见「评估前强制步骤:把 rollout 的 model 字段改成当前评估对象」。FinetuneLoRA;若用户明确要求全量SFT,使用 FinetuneSft。训练任务提交后,通过心跳任务跟踪任务状态:
心跳任务可能在另一个新的AI会话中被触发,当前上下文届时不可用。HEARTBEAT.md 本身只承担索引的作用——它告诉接手的AI「有哪些任务需要监控」「去哪里读完整上下文」;所有详细信息(实验计划、已确认信息、后续流程)统一保存在每个实验子目录下的 EXPERIMENT.md,不在 HEARTBEAT.md 中冗余登记。
登记训练任务到 HEARTBEAT.md 的唯一允许方式是调用以下命令:
ark-trainer-helper job register-heartbeat \
--job-id <任务ID> \
--job-type <SFT/RFT/GRPO/RFT+GRPO 等> \
--job-url <控制台任务详情链接> \
--exp-dir <实验子目录绝对路径> \
[--submit-time 'YYYY-MM-DD HH:MM'] # 可选,默认当前时间
[--status Running] # 可选,默认 Running
[--heartbeat-file ~/.openclaw/workspace/HEARTBEAT.md] # 可选,默认 ~/.openclaw/workspace/HEARTBEAT.md
该命令会自动:
HEARTBEAT.md 不存在 → 用完整模板创建(含 6 条 AI 接手必读系统提醒 + 表头 + 新任务一行)HEARTBEAT.md 已存在但顶部系统提醒块缺失/不完整 → 在文件最顶部自动补齐提醒块,再 append 新任务行--job-id 已登记 → 幂等跳过,不重复写⛔ 严禁使用文本编辑器(edit / write)直接修改 HEARTBEAT.md——人肉写法几乎必然漏掉顶部系统提醒块,导致心跳触发时接手的 AI 丢失必要上下文。只有当 helper 命令不可用(例如脚本报错、Python 环境挂了),并且已经向用户报告并获得用户明确同意时,才可以退回到手写方式;手写时必须按本章末尾的文件模板完整复制顶部系统提醒块。
HEARTBEAT.md 的规范文件模板(仅用于排查/理解;不要据此手动编辑文件)# byted-ark-trainer心跳监控任务列表
> ⚠️【系统提醒 · AI接手训练任务时必读】
> 1. **必须先加载 ark-trainer skill**:保持 ark-trainer skill 始终在上下文中,若不在则主动加载 ark-trainer skill(读取该skill的SKILL.md)。
> 2. **接手任务前必须先读取对应的实验目录**:在处理下表任何任务前,必须先打开该任务「实验目录绝对路径」下的 `EXPERIMENT.md`,理解实验计划、已与用户确认的关键配置、后续流程。**不读完 `EXPERIMENT.md` 不允许执行任何动作**。
> 3. **逐项检查任务状态**:对下表每个ARK训练任务执行 `ark-trainer-helper job status --job-id <任务ID>` 查询最新状态,并把结果同步回下表的「最新状态」列。
> 4. **任务完成且有后续流程时,不需要用户二次确认**:若任务状态变为 Completed,按该任务 `EXPERIMENT.md` 中「后续流程」的记录**立即执行下一步**(例如 RFT 完成后提交 GRPO、训练完成后在测试集上评估),执行完毕后再通知用户结果,并把结果增量更新到 `EXPERIMENT.md`。
> 5. **任务失败必须报告用户,不得自行移除**:状态为 Failed/Terminated 时,立即向用户展示完整错误信息和失败原因,询问是否重试或调整配置;**只有在用户明确确认后才能将该任务从下表中移除**,在用户确认之前必须保留该条目以便追溯。
> 6. **严禁编造上下文**:如果实验目录或 `EXPERIMENT.md` 缺失导致无法理解任务意图,不得自行猜测,必须先询问用户。
| 任务ID | 任务类型 | 提交时间 | 最新状态 | 任务链接 | 实验目录绝对路径 |
|--------|----------|----------|----------|----------|------------------|
| mcj-20260425143200-sft01 | SFT | 2026-04-25 14:32 | Running | https://console.volcengine.com/ark/... | /abs/path/workspace/experiments/exp_xxx |
Running → Completed / Failed 等)除以上两种情况,其它所有新增/重写动作必须走 ark-trainer-helper job register-heartbeat。
每次心跳任务触发时(可能在新的AI会话中),执行以下操作:
HEARTBEAT.md 顶部的系统提醒并严格遵守HEARTBEAT.md 摘要表中每个任务:
EXPERIMENT.md,完整理解实验计划、已确认信息和后续流程;这一步是强制的,不读完 EXPERIMENT.md 不允许执行任何状态处理动作ark-trainer-helper job status --job-id <任务ID> 查询最新状态EXPERIMENT.mdFailed(或 Terminated),保留条目,等待用户处理ark-trainer-helper job get-model --job-id <任务ID> 获取训练产出的模型ID,并登记到对应 EXPERIMENT.mdEXPERIMENT.md 中「后续流程」的记录立即执行下一步(例如 RFT→GRPO、训练→评估),不需要用户二次确认;执行完毕后再通知用户结果ark-trainer-helper job register-heartbeat 把新任务登记到 HEARTBEAT.md(不要手写表格)EXPERIMENT.md 永远保留用于追溯)训练完成需要进行后续评估或GRPO训练时,使用 ark-trainer-helper endpoint create(使用完整路径)工具创建模型端点:
ark-trainer-helper自动创建共享服务端点,无需用户干预ark-trainer-helper endpoint create创建端点时报错「the model don't support share_service type endpoint」,提示用户该模型不支持自动创建共享端点本SKILL的约束优先级高于:
ark-trainer-helper model list-models验证用户提供的模型ID是否存在byted-ark-trainer/references/官方文档中的SDK调用结构,只能修改必要配置字段ARK_API_KEY、VOLCENGINE_ACCESS_KEY、VOLCENGINE_SECRET_KEY环境变量的情况下执行任何API相关操作ark-trainer-helper model get-hyperparameters;超参数只能用 ark get foundation-model ... --fields hyperparameters 查询GRPOLoRA 的 lr、num_steps、max_new_tokens 直接用于 FinetuneLoRAcustom_rl_pipeline 或 enable_trajectoryjob.yaml / job.py / 临时脚本放在工作区根目录或其他实验的子目录中,必须放在当前实验独立的 experiments/exp_xxx/ 子目录EXPERIMENT.md 的情况下提交训练任务edit / write)直接手写/新增 HEARTBEAT.md 的任务条目;登记任务的唯一允许入口是 ark-trainer-helper job register-heartbeat。仅允许的编辑器改动是:更新「最新状态」列,或在用户明确确认后删除失败任务条目。违反此项会导致顶部系统提醒块被漏写,心跳接手 AI 丢失上下文EXPERIMENT.md 的情况下执行任何后续动作(包括状态查询后的处理逻辑)HEARTBEAT.md 摘要表中删除list-models 确认精确模型名、未通过 list-versions 与用户确认版本、未通过 ark get foundation-model ... --fields hyperparameters 校验训练方式兼容性之前,进入数据集处理或编写 job.yamllist-models --name 的模糊前缀匹配结果的第一条(或任意一条)自行当成"用户要的模型";必须由用户在命中列表中明确选择job.yaml / job.py;每次编写必须先从 references/templates/ 对应模板复制,再按本次实验改值job.yaml / job.py 的 hyperparameters 中保留 Step 2.5 查询白名单之外的字段(无论是模板自带的、还是 AI 自行添加的);提交前必须过一遍白名单过滤rollout.py 中 model= 字段改成当前评估对象的情况下运行 ark-trainer-helper train evaluate;该命令不接受 --model 参数,评估对象完全由 rollout 决定,漏改会让 BON/AON/AvgN 指向错误模型train evaluate 的 --output-dir 放在工作区根目录(例如 ./eval_output)或其他实验的子目录中;必须指向当前实验子目录下的 eval_output/ / rft_eval_output/ / final_eval_output/,违反会导致不同实验的评估结果互相覆盖、心跳接手 AI 找不到评估产物✅ 所有脚本使用前必须先运行--help查看参数说明
✅ 使用用户指定Python执行helper;首次使用前必须确认依赖可用
✅ 从.env加载密钥时必须确保变量被导出给Python子进程
✅ 提交训练任务前必须查询并校验当前模型版本支持的训练超参数
✅ SFT场景必须按需加载 references/模型精调数据集格式指南/SFT.md 和相关附录,检查用户提供的数据集格式
✅ 关键配置(训练类型、超参数、模型选择)必须向用户确认后再提交任务
✅ 任何 ark create mcj / python job.py 提交命令之前,必须先在实验子目录内执行 FaaS 权限修复命令(find . -type d -exec chmod 755 {} \; 和 find . -type f -name "*.py" -exec chmod 644 {} \;),详见「提交前强制步骤:修复 FaaS 权限」
✅ 任何 ark-trainer-helper train evaluate 之前(包括初始评估、RFT 数据收集、训练后评估三个时机),必须先手工把 rollout.py 中 chat.completions.create(model=...) 的 model 字段改成当前评估对象(基础模型名+版本 / teacher 端点ID / 训练产出 cm-xxx);详见「评估前强制步骤:把 rollout 的 model 字段改成当前评估对象」
✅ train evaluate 的 --output-dir 必须指向当前实验子目录下的子目录(experiments/exp_xxx/eval_output / rft_eval_output / final_eval_output),运行日志会自动落在 <output-dir>/logs/ 下,与评估结果同目录便于排查
✅ 全量训练前必须明确告知用户端点创建风险并获得用户确认
✅ 每个步骤执行完成后必须验证成功才能进入下一步
✅ 遇到任何错误或不明确的情况必须立即停止并询问用户,不得自行处理
✅ 调用scripts目录下的脚本或读取references目录下的文档时,必须使用完整路径或确保当前工作目录为 byted-ark-trainer skill 的安装目录
✅ 每次训练任务都必须有一个独立的 experiments/exp_<时间戳>_<任务描述>/ 子目录;该子目录内必须同时存在 EXPERIMENT.md 与 job.yaml(或 job.py)
✅ 随着与用户的确认推进,必须增量地把每一项已确认的信息写入 EXPERIMENT.md,确保该文件任何时刻都是「接手AI能够独立理解当前任务」的充分上下文
✅ 向 HEARTBEAT.md 登记任务时必须用 ark-trainer-helper job register-heartbeat 命令;该命令会自动维护顶部系统提醒块并把新任务行 append 到摘要表。详细上下文统一写入 EXPERIMENT.md,HEARTBEAT.md 中不再冗余登记
✅ 心跳任务检测到 Failed/Terminated 状态时,必须先向用户报告并等待用户确认后,才能从摘要表中删除对应条目
✅ 进入数据集处理之前,必须按 Step 2.5 完成「模型存在确认 → 版本选择 → 训练方式兼容性与超参数校验」三步,并把结论写入 EXPERIMENT.md 的「基础模型与训练方式确认」一节
byted-ark-trainer/references/templates/ - 提供 SFT-LoRA 和 GRPO-LoRA 的 job.yaml + job.py 现成模板。每次编写 job.yaml / job.py 时必须先复制这里对应的模板再改,严禁从零手写。见目录索引 byted-ark-trainer/references/templates/README.md。byted-ark-trainer/references/ark-sdk guide.md - 包含环境配置、工作区初始化、任务提交、命令行工具用法等基础内容byted-ark-trainer/references/RL guide.md - 包含rollout/grader plugin开发规范、配置示例、测试方法等RL训练专属内容byted-ark-trainer/references/模型精调数据集格式指南/ - 包含SFT、RL、DPO、CPT、Function Calling、多模态、thinking字段等数据格式要求,按训练类型和数据内容加载。
遇到配置或API使用问题时优先查阅上述文档。