| 名称 | tao-run-automl-deft-pipeline |
| 描述 | > 运行NVIDIA标准的AOI三阶段训练流水线——阶段1 AutoML基线(HPO), 阶段2 DEFT循环(RCA → SDG → 挖掘 → 普通训练重训),阶段3对DEFT增强数据集进行AutoML优化。 当用户要求“运行AOI工作流”,“端到端微调我的PCB AOI模型”,“改进我的AOI ChangeNet模型”, 或“带AutoML的AOI工作流”时使用——除非用户明确要求仅DEFT循环(例如“只运行DEFT循环”,“跳过AutoML,仅DEFT”), 否则应路由到此技能,而不是直接tao-run-deft-aoi。 同样处理非AOI DEFT应用的相同三阶段模式——AutoML基线,然后从AutoML胜出的超参数热启动DEFT循环, 再在迭代增强数据集上进行后DEFT AutoML优化。 触发短语包括“运行AOI工作流”,“AOI端到端”,“AutoML + DEFT”,“先AutoML再DEFT”, “调超参数然后DEFT”,“两端都是AutoML的DEFT”,“热启动DEFT”,“改进我的AOI模型”。 |
| 开源协议 | Apache-2.0 compatibility: 需要docker + nvidia-container-toolkit。工作流(tao-run-automl, tao-run-deft-aoi)声明了额外要求。 metadata: |
| 作者 | NVIDIA Corporation |
| 版本 | “0.1.0” allowed-tools: Read Skill Bash Write tags: - tao - applications |
AutoML + DEFT 流水线
一个工作流桥接技能,通过委托给两个已有技能按顺序运行三个阶段——tao-run-automl 进行 HPO,以及一个 DEFT 应用技能(对于 AOI 默认是 tao-run-deft-aoi;对于非 AOI 情况使用其他 skills/applications/deft-* 技能)进行迭代数据改进循环。
该技能不重新实现 AutoML 或 DEFT。它只负责连接部分:HPO 规范输入、AutoML 与 DEFT 之间的规范交接,以及在增强数据集上重新运行 AutoML 的阶段 3。
路由策略
- 用户要求“运行 AOI 工作流”或“改进我的 AOI ChangeNet 模型”——默认使用此技能,而不是直接使用
tao-run-deft-aoi。纯 DEFT 循环是这个流水线的内部阶段。 - 用户希望在同一个模型/数据集上链式执行 AutoML 和 DEFT
- 用户说“两端都 AutoML”、“先调 HP 再 DEFT”、“热启动 DEFT”、“DEFT 前后都 AutoML”
- 用户有一个 AutoML 调优后的 spec,并询问如何将其输入 DEFT
此技能不适用的场景
- 用户明确要求仅执行 DEFT 循环(“只执行 DEFT 循环”、“跳过 AutoML”)→ 直接使用
tao-run-deft-aoi - 用户只想要 AutoML,没有后续 DEFT → 直接使用
tao-run-automl - 用户正在做零样本评估、RAG 或非训练工作流
心智模型
阶段 1(AutoML 基线) 阶段 2(DEFT 循环,普通训练) 阶段 3(AutoML 优化)
───────────────────────── ──────────────────────────────── ───────────────────────────
specs/baseline_spec.yaml (阶段 1 胜者预置基线 ${RESULTS_DIR}/iter${N}/dataset/
train/base/training_set.csv — DEFT 跳过其基线训练) train_combined_iter${N}.csv
│ │ │
▼ ▼ ▼
[ AutoML HPO 搜索 ] [ DEFT: 基线推理 → RCA → [ AutoML HPO 搜索 ]
N 条推荐 迭代 1..N(普通重训)] 基于 DEFT 增强数据集
按 val_loss / FAR 选择最佳 RCA / 路由 / SDG / 挖掘 重新调优 HP
│ │ │
▼ ▼ ▼
最佳 HP spec + ckpt ─────► DEFT 增强 CSV ───────────► 最终最佳 checkpoint
+ 迭代胜者 checkpoint (交付物;之后不再重训)
(阶段 3 从此热启动)
两个交接点是:
- 阶段 1 → 阶段 2:一个spec 文件和一个胜出 checkpoint——桥接将阶段 1 的 HP 深度合并到
specs/baseline_spec.yaml上,将 checkpoint 复制到${RESULTS_DIR}/baseline/train/,并预填充deft_state.json/loop_log.jsonl,使 DEFT 跳过其基线训练并从基线推理 → 评估 → RCA → 迭代 1 恢复。DEFT 保持普通训练(保留automl_policy: off)。 - 阶段 2 → 阶段 3:一个训练 CSV(
train_combined_iter${N_final}.csv)和一个迭代胜者的 checkpoint——将 checkpoint 接入每个推荐的train.pretrained_model_path,使阶段 3 从阶段 2 的胜者进行微调。阶段 3 的胜出 checkpoint 是交付物;阶段 3 之后无需单独重训。
关于这两个交接点的确切步骤、代码以及“DEFT 遵守此交接”的细节,请参见 references/phase-handoffs.md。
为什么用三阶段而不是两阶段
- 仅阶段 1 可以在原始训练分布上找到好的 HP,但模型仍然存在 DEFT 旨在填补的分布差距。
- 仅阶段 2(仅 DEFT)可以填补差距,但使用的是
specs/baseline_spec.yaml中手工编写的 HP——通常不是最优的。 - 仅阶段 3 将针对增强数据集运行 AutoML,但如果没有调优的基线,DEFT 循环的迭代成本会更高(收敛更慢,达到 KPI 需要更多迭代)。
运行全部三个阶段:AutoML 在原始数据上廉价地调优一次,DEFT 使用合理的 HP 完成繁重的数据工作,然后 AutoML 在现在更丰富的数据集上再次调优。阶段 3 对最终部署的 FAR/召回率来说是最重要的。
前期成本
流水线是顺序的。总墙钟时间 ≈ 阶段 1(N_automl × 每个推荐的训练)+ 阶段 2(M 次迭代 × 每次迭代成本)+ 阶段 3(N_automl × 每个推荐的训练)。
请注意,阶段 2 没有单独的基线训练——阶段 1 的胜出 checkpoint 被重用为 DEFT 的基线,因此基线成本落在阶段 1 的 N_automl 次训练中,而不是额外的重训。在开始前应向用户说明这一点。通常阶段 2 的迭代仍然占主导(每次迭代都包括 SDG + 重训),但阶段 1 和阶段 3 在单 GPU 机器上各会增加几个小时。请使用用户设置中的每个作业估算(如果存在)而不是猜分钟。参见 references/pitfalls-and-quality-checks.md(计算预算)了解每个阶段的详细项。
合并预检查——一次门禁覆盖全部三个阶段
流水线只有一个用户门禁。 在执行任何有副作用的操作(docker pull、docker login、委托给下游技能的任何作业启动调用、在 ${RESULTS_DIR}/ 下的文件修改)之前,代理必须生成一份合并的预检查摘要,覆盖每个下游技能的预检查。一旦用户批准,运行将通过全部三个阶段自主进行——不再有交互式暂停。
用户明确不希望在各阶段之间被呼叫。DEFT 循环自身的行内 ## 预检查摘要 门禁变成零问题展示步骤(每个值都从合并门禁预填),tao-run-automl 在阶段 1 和阶段 3 的共享启动预检查也是如此。
在打印摘要之前,代理必须完整阅读每个下游技能的预检查部分,运行这些部分规定的所有只读检查,并报告每项检查的结果。摘要包含九个必填部分(工作区/主机/平台/网络;凭据状态;容器镜像;数据集表;阶段 1 配置;阶段 2 配置;阶段 3 配置;计算估算;确认行)。门禁之后,通过传递收集到的值来抑制每个下游的交互式门禁。唯一允许的门禁后暂停是下游技能无法绕过的运行中硬停止安全门。
参见 references/consolidated-preflight.md:要读取的完整预检查部分列表、要求的 DEFT ## 预检查 运行、九段摘要在内的确切内容、用于门禁抑制的值传递,以及当技能库版本尚不支持门禁抑制时的过程。
阶段 1 — AutoML 基线
使用以下输入调用 tao-skill-bank:tao-run-automl:
| 输入 | AOI 默认值 | 说明 |
|---|---|---|
network_arch |
visual-changenet |
DEFT 循环期望的相同模型 |
train_dataset_uri |
<workspace>/train/base/training_set.csv |
DEFT 将开始的相同训练集 |
eval_dataset_uri |
<workspace>/train/base/validation_set.csv |
保持独立——不能是 KPI 测试集(<workspace>/kpi/testing_set.csv),因为该集合预留给 DEFT 的最终报告 |
metric |
FAR @ 100% recall(首选)或 val_loss |
参见 references/pitfalls-and-quality-checks.md 中的指标陷阱——ChangeNet AOI 类别不平衡,单独使用 val_loss 可能导致模式坍缩 |
algorithm |
bayesian |
如果计算资源紧张,可用 LLM-brain 或 autoresearch |
automl_max_recommendations |
AOI 为 5–10 | 更多推荐 = 更好的 HP,但计算量线性增加 |
spec_overrides |
固定 epochs / batch_size;只搜索优化器相关 HP | 否则 AutoML 会进入长时间训练区域,破坏阶段 2 的预算 |
搜索完成后,AutoML 的 result["best"]["specs"] 即为胜出超参数字典。
交接给阶段 2
阶段 1 交出两个工件:胜出的 spec 和胜出的 checkpoint。在 DEFT 的基线步骤中用相同 HP 重训是浪费计算——相反,从阶段 1 的输出预置 DEFT 的基线状态,使 DEFT 从基线推理 → 评估 → RCA → 迭代 1 开始。这是一个四步桥接(写合并后的 spec → 预置 baseline/train/ → 初始化 deft_state.json 且基线已完成 → 调用 DEFT),随后对胜出 checkpoint 进行质量检查(按类预测计数;与零样本 ChangeNet 对比)。
参见 references/phase-handoffs.md 中逐字的步骤 1–4(包括 cp 命令、deft_state.json 补丁代码和 loop_log.jsonl 追加)以及质量检查清单。
阶段 2 — DEFT 循环(普通训练,基线从阶段 1 预置)
调用 tao-skill-bank:tao-run-deft-aoi(阅读其 SKILL.md 获取完整接口)。对于非 AOI 应用,调用匹配的 DEFT 技能;交接形状相同。
DEFT 循环的基线训练子步骤被跳过。 阶段 1 已经产生了在胜出 HP 下训练的 checkpoint,并且阶段 1 的交接(见 references/phase-handoffs.md)已预填充了 ${RESULTS_DIR}/baseline/train/ 和 ${RESULTS_DIR}/deft_state.json,使 DEFT 在基线推理 → 评估 → RCA → 迭代 1 恢复。DEFT 循环的其余部分保持不变。不要修改其 automl_policy: off 不变式。
DEFT 循环拥有:其预检查摘要展示步骤(不是新的用户门禁——上面的合并预检查是唯一门禁;DEFT 摘要仍然作为预置 baseline/train/ 来源的审计跟踪展示,绝不能再次提示);对预置 checkpoint 的基线推理 → 评估 → RCA;完整的每迭代 RCA → 路由 → SDG → 挖掘 → 组装 → 训练循环;KPI 门控和停止条件;以及 ${RESULTS_DIR}/ 布局(deft_state.json、loop_log.jsonl、DEFT_Loop_Report.html)。
循环退出后(KPI 达到或达到 max_iterations),从 deft_state.json 捕获两个值:iterations.<best>.best_ckpt_path(循环的最佳普通训练 checkpoint)和最终迭代标签 N_final(用于定位增强的训练 CSV)。
如果 DEFT 循环在不可恢复的门禁处硬停止,跳过阶段 3。没有验证过的增强 CSV 可供给 AutoML。
阶段 3 — 在 DEFT 增强数据集上运行 AutoML 优化
使用增强后的训练 CSV 作为训练数据集、之前相同的独立验证 CSV、以及阶段 2 的迭代胜者 checkpoint 作为热启动,重新调用 tao-skill-bank:tao-run-automl:
| 输入 | AOI 值 |
|---|---|
network_arch |
visual-changenet |
train_dataset_uri |
${RESULTS_DIR}/iter${N_final}/dataset/train_combined_iter${N_final}.csv |
eval_dataset_uri |
与阶段 1 相同(<workspace>/train/base/validation_set.csv)——保持比较对等 |
metric |
与阶段 1 相同的指标 |
algorithm |
与阶段 1 相同 |
automl_max_recommendations |
5–10 |
| 初始 spec | 从 <workspace>/specs/baseline_spec_automl.yaml 开始(阶段 1 的胜者)——给搜索一个强有力的中心点进行细化 |
| 热启动 checkpoint | 来自 ${RESULTS_DIR}/deft_state.json 的 iterations.<best>.best_ckpt_path——设置 spec_overrides["train"]["pretrained_model_path"] 为该路径。这样每个阶段 3 的推荐都从阶段 2 的胜者进行微调,而不是从头训练。 |
热启动是强制性的:否则每个推荐从随机初始化开始,只有 10–20 个 epoch 重新收敛,val_loss 相对迭代 1 回退 0.03–0.05,并且 _pick_best 安全网会静默回滚到迭代胜者。输出进入 ${RESULTS_DIR}/final_automl/;本次搜索的胜出 checkpoint 是流水线的交付物。搜索结束后,在 deft_state.json 中注册阶段 3 的 checkpoint 为 iterations.final_automl,并重新运行 prepare_inference_spec.py 以便交接看到它(如果阶段 3 回退,则回退到循环的最佳值)。
参见 references/phase-handoffs.md:关于“为什么热启动是强制的”完整理由和权衡、具体的 spec_overrides 选择代码、将阶段 3 输出接回 DEFT 报告的两步接线方法,以及关于回退的安全说明。
陷阱与质量检查
这些适用于两个 AutoML 阶段。将其融入代理行为——不要只粘贴一次。完整细节在 references/pitfalls-and-quality-checks.md;简要说明:
- 指标陷阱——AOI 类别不平衡。 ChangeNet AOI 数据集以 PASS 为主(超过 90%),因此
val_loss胜者可能是模式坍缩的模型。优先直接使用 FAR @ 100%-recall,或用pred_counts健全性检查保护 val_loss,或在选择前评估 FAR @ 100%-recall 的 Top-K。对于平衡/回归任务,val_loss 是合适的。 - 运行间噪声。 同一 HP 配置的 AutoML 可能显示 2–3 倍方差。如果胜者明显好于亚军,在将 spec 提交到阶段 2 之前用一个新的随机种子重新运行。
- 清洁性(数据泄漏)。 两个 AutoML 阶段都使用与 KPI 测试集(
<workspace>/kpi/testing_set.csv)不同的验证集,后者保留给 DEFT 的最终报告。阶段 3 在增强 CSV 上训练,但保持相同的验证集,以便阶段 1 和阶段 3 的数字可比较。 - 计算预算。 阶段 1
N_automl × 每个推荐训练;阶段 2M_iter × (RCA + SDG + 挖掘 + 重训)(通常最大);阶段 3N_automl × 每个推荐训练,但基于更大的增强数据集。在引用墙钟时间之前,询问用户每个作业的时间。
快速开始(AOI 示例)
当从“运行 AOI 工作流”开始时,代理向用户展示三阶段计划(阶段 1 AutoML 基线 → 阶段 2 DEFT 循环 → 阶段 3 AutoML 优化),说明总成本结构(前端没有额外基线重训,末端没有额外重训),询问用户每次运行时间以估算墙钟时间,并等待批准。确认后,调用阶段 1,写入合并后的 spec,预填充 deft_state.json,以所有输入预设的方式调用 DEFT 循环,然后调用阶段 3——除非下游技能遇到不可恢复的硬停止,否则不再暂停。最后总结轨迹(基线 AutoML 最佳 → DEFT 迭代 1 → … → DEFT 迭代 N_final → 阶段 3 最佳)。
参见 references/quick-start-example.md 获取逐字的面向客户的示例消息块和确认后的精确调用序列。
非 AOI DEFT 应用
相同的三阶段模式适用于其他 DEFT 技能。替换:
network_arch为相关模型- 阶段 2 中调用的 DEFT 技能
- 将“最佳 HP spec 文件”和“最佳 HP checkpoint”的路径约定替换为目标 DEFT 技能期望的路径
- 阶段 3 中的增强 CSV 路径替换为目标 DEFT 技能生成的路径
交接形状——阶段 1 输出 spec + checkpoint(checkpoint 预置 DEFT 基线),阶段 2 消耗两者并输出增强数据集,阶段 3 输出最终 checkpoint——完全相同。阶段 1 → 阶段 2 的基线跳过机制是通用的:任何暴露可恢复基线状态的 DEFT 风格循环都可以用相同方式播种。
参见
tao-skill-bank:tao-run-automl— AutoML 接口、算法、HP 范围tao-skill-bank:tao-run-deft-aoi— 完整的 DEFT AOI 循环(阶段 2 默认)tao-skill-bank:tao-train-visual-changenet— 底层 ChangeNet 训练/评估/推理技能(被 AutoML 和 DEFT 使用)- 其他
skills/applications/deft-*技能 — 非 AOI 阶段 2 目标 references/consolidated-preflight.md— 完整的单门禁预检查references/phase-handoffs.md— 两个交接、基线预置和阶段 3 热启动的逐字说明references/pitfalls-and-quality-checks.md— 指标陷阱、运行间噪声、泄漏、计算预算references/quick-start-example.md— 客户可见的示例消息