Files
zk-data-agent/skills/model-training-lite/SKILL.md
T
2026-05-28 20:06:54 +08:00

168 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: model-training-lite
name_zh: 轻量模型训练
description: 从 Codex、Claude Code 或其他 Agent 通过用户提供的 Jupyter 环境和数据版本发起一次模型训练,聚焦“准备远端工作区、同步数据、提交 CML SFT、返回 JobID”,不包含完整自主迭代闭环。
when_to_use: 当用户已经准备好训练数据,想让 Agent 使用 Jupyter/CloudML 发起一次模型训练、复用当前仓库的训练脚本和模板、或询问如何把模型训练流程沉淀成轻量 skill 时使用。
aliases: jupyter-model-training, sft-submit, 轻量训练, 模型训练提交
examples:
- 用这个 Jupyter 和 ai-planning 当前分支重新发起训练
- 数据已经提交到 autoresearch-v1,帮我提交一次 SFT
- 帮我把 Codex 通过 Jupyter 发起模型训练的流程跑起来
- 检查一下训练工作区和 CML 环境,然后提交训练任务
allowed_tools: read_file, write_file, grep_search, glob_search, ask_user_question, python_exec, bash
---
# 轻量模型训练
本 skill 只负责一次训练提交:
```text
Jupyter 授权环境
-> 创建/复用远端 kernel
-> 准备隔离训练工作区
-> 同步训练脚本与数据版本
-> 检查 CML / 数据 / zk_trainer
-> 提交 SFT
-> 返回 JobID、产物路径、下一步评测入口
```
不要把它扩展成 `model-iteration` 那种完整“baseline -> 分析 -> 增强 -> 训练 -> 评测 -> 再分析”的自主循环。
## 必要输入
开始前必须拿到:
- **Jupyter 地址和授权方式**URL;密码、token、cookie/session,或说明当前环境已有可用登录态。
- **数据版本**git repo + branch + commit,或远端工作区中已存在的数据路径。
- **训练配方**:如果是当前 ZK 中控 SFT,默认复用 `skills/model-iteration/scripts/`;如果不是,必须让用户提供训练脚本、模板或命令。
通常用户只需要显式给 `Jupyter 地址``数据版本`。当前项目的默认训练配方可从本仓库继承,不必每次追问。
可选但推荐确认:
- `owner`:远端输出目录使用的用户前缀,例如 `wuyang6`
- `run_name`:本次训练工作区名,例如 `manual_YYYYMMDD_zk_intent_xxx`
- 是否训练后立刻发起评测。默认只提交训练,不自动串接评测。
## 默认 ZK SFT 配方
当前 ZK 中控 SFT 复用这些文件:
```text
skills/model-iteration/scripts/
prepare_and_train_sft.py
resolve_run_ids.sh
submit_sft.sh
submit_cml_eval.sh
sft_train_job.yaml.tpl
skills/model-iteration/assets/config.yaml
```
默认基模和训练模板见 [references/zk_sft_defaults.md](references/zk_sft_defaults.md)。只有用户明确要求或训练任务不是 ZK 中控 SFT 时,才修改这些默认值。
## 推荐流程
### 1. 先生成提交计划
优先执行 portable script
```bash
python skills/model-training-lite/scripts/render_sft_submission_plan.py --input input.json
```
输入示例:
```json
{
"jupyter_url": "https://.../lab?",
"data_repo": "git@git.n.xiaomi.com:ai-service/ai-planning.git",
"data_branch": "autoresearch-v1",
"data_commit": "b92be709",
"owner": "wuyang6",
"run_name": "manual_20260528_zk_intent_clean_train",
"recipe": "zk_sft"
}
```
脚本只生成计划和命令草案,不连接 Jupyter,不提交训练。
### 2. 连接 Jupyter
如果已经有 session/cookie,可直接调用 Jupyter REST API
- `GET /api/kernels` 检查登录态。
- `POST /api/kernels` 创建 kernelPOST 需要 `X-XSRFToken`
- websocket 连接 `/api/kernels/<kernel_id>/channels` 执行 Python/Bash。
如果没有登录态,用用户提供的密码/token 登录;不要把密码写入仓库、日志或最终报告。
### 3. 准备远端工作区
远端路径默认:
```text
/mnt/wangsenhao/autoresearch-zk-users/<owner>/<run_name>
```
工作区内必须有:
```text
scripts/
assets/
results/
output/
ai-planning/
zk_trainer/
```
把默认 ZK SFT 配方里的 `scripts/``config.yaml` 同步到远端工作区。再 clone 或更新数据仓库,并 checkout 到用户指定 commit。
### 4. 提交前检查
提交训练前必须输出:
- `ai-planning` 当前 commit。
- 训练 JSONL 文件数量和总行数。
- 关键增量文件行数。
- 目标评测集行数,如果用户指定了评测集。
- `source ~/.cloudml-cli/.profile``cml config show` 可用。
- `zk_trainer` 已存在或 clone 成功。
如果 `cml` 不在 PATH,先检查 `~/.cloudml-cli/.profile`。不要因为 `which cml` 为空就直接判定不可用。
### 5. 提交 SFT
ZK SFT 提交命令:
```bash
source ~/.cloudml-cli/.profile
export AUTORESEARCH_CHAT_ROOT=<remote_workspace>
export AUTORESEARCH_ROOT="$AUTORESEARCH_CHAT_ROOT"
cd "$AUTORESEARCH_CHAT_ROOT"
eval "$(./scripts/resolve_run_ids.sh)"
./scripts/submit_sft.sh "$SFT_RUNDIC"
```
注意:`resolve_run_ids.sh` 只输出 `SFT_RUNDIC``EVAL_RUNDIC`,不要读取不存在的 `RUNDIC`
### 6. 成功判定
提交成功后必须回报:
- CloudML JobID。
- CloudML 链接。
- `SFT_RUNDIC``EVAL_RUNDIC`
- 远端训练工作区。
- 成功标记路径:`<remote_workspace>/sft_output/_SUCCESS`
- 查看状态命令:`cml custom_train describe <JOB_ID>`
再查一次 `cml custom_train describe <JOB_ID>`,确认状态不是提交后立即失败。
## 边界
- 不自动修改训练数据。
- 不自动做错误归因。
- 不自动生成增强样本。
- 不默认串接评测;训练成功后是否评测由用户或后续明确指令决定。
- 不把 Jupyter 密码、CloudML key、cookie 写进产物或最终回复。