关于 tao-run-automl-deft-pipeline
串联 AutoML 超参数调优、DEFT 数据改进循环,以及在增强数据集上再次运行 AutoML 的工作流桥接技能。适用于需要在 DEFT 前后调优模型,并在阶段间传递产物的流程。
主要功能
- 01三个顺序执行的工作流阶段
- 02DEFT 前后进行 AutoML 调优
- 03DEFT 数据改进循环
- 04规格与检查点交接
- 05统一的预检确认环节
适用场景
- 01在 DEFT 循环前调优模型
- 02从 AutoML 检查点启动 DEFT
- 03在 DEFT 增强数据上再次调优
- 04运行 AOI ChangeNet 改进工作流
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ nvidia/ skills --skill tao-run-automl-deft-pipeline安装后在 Claude Code 中输入/tao-run-automl-deft-pipeline确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
BENCHMARK.mdskill-card.mdskill.oms.sigconfig/skillspector-baseline.yamlevals/evals.jsonreferences/consolidated-preflight.mdphase-handoffs.mdpitfalls-and-quality-checks.mdquick-start-example.md详细介绍
AutoML + DEFT 流水线
一种工作流桥接技能,通过委派给两个现有技能,按顺序运行 三个阶段:由 tao-run-automl 负责 HPO,由 DEFT 应用技能(AOI 默认使用 tao-run-deft-aoi;非 AOI 场景使用其他 skills/applications/deft-* 技能)负责迭代式数据改进循环。
此技能不会重新实现 AutoML 或 DEFT。它只负责连接部分:HPO 规格输入、AutoML 与 DEFT 之间的规格交接,以及在 DEFT 之后对增强数据集重新运行 AutoML。
路由策略
- 用户要求“运行 AOI 工作流”或“改进我的 AOI ChangeNet 模型”——默认使用此技能,而不是直接使用
tao-run-deft-aoi。单独的 DEFT 循环是此流水线的内部阶段。 - 用户希望在同一模型/数据集上串联 AutoML 和 DEFT
- 用户说“在两端都运行 AutoML”“先调优 HP,再运行 DEFT”“暖启动 DEFT”“在 DEFT 前后都运行 AutoML”
- 用户已有经过 AutoML 调优的规格,并询问如何将其用于 DEFT
此技能不适用的情况
- 用户明确要求只运行 DEFT 循环(“只运行 DEFT 循环”“跳过 AutoML”)→ 直接使用
tao-run-deft-aoi - 用户只需要 AutoML,不需要后续的 DEFT → 直接使用
tao-run-automl - 用户正在进行零样本评估、RAG 或非训练工作流
心智模型
Phase 1 (AutoML baseline) Phase 2 (DEFT loop, plain train) Phase 3 (AutoML refinement)
───────────────────────── ──────────────────────────────── ───────────────────────────
specs/baseline_spec.yaml (Phase 1 winner pre-seeds baseline ${RESULTS_DIR}/iter${N}/dataset/
train/base/training_set.csv — DEFT skips its baseline train) train_combined_iter${N}.csv
│ │ │
▼ ▼ ▼
[ AutoML HPO sweep ] [ DEFT: baseline-inference → RCA [ AutoML HPO sweep ]
N recommendations → iter 1..N (plain retrain) ] re-tunes HPs against the
pick best by val_loss / FAR RCA / route / SDG / mining DEFT-augmented dataset
│ │ │
▼ ▼ ▼
best HPs spec + ckpt ─────► DEFT-augmented CSV ───────────► final best checkpoint
+ iter winner checkpoint (the deliverable; no
(Phase 3 warm-starts from it) further retrain)
两次交接如下:
- 阶段 1 → 阶段 2:交接内容包括一个规格文件和最佳检查点——桥接流程会将阶段 1 的 HP 深度合并到
specs/baseline_spec.yaml中,将检查点复制到${RESULTS_DIR}/baseline/train/,并预先填充deft_state.json,这样 DEFT 就会跳过基线训练,从基线推理开始,然后进行评估 → RCA → 第 1 次迭代。DEFT 保持普通训练(保留automl_policy: off)。 - 阶段 2 → 阶段 3:交接内容包括一个训练 CSV(
train_combined_iter${N_final}.csv)和迭代最佳检查点——该检查点会写入每条 rec 的train.pretrained_model_path,使阶段 3 从阶段 2 的最佳结果开始微调。阶段 3 的最佳检查点即为交付物;阶段 3 之后无需单独重新训练。
请参阅 references/phase-handoffs.md,了解两次交接的具体步骤、代码,以及 DEFT 遵循此交接方式的详细信息。
为什么需要三个阶段,而不是两个
- 仅阶段 1 会在原始训练数据分布上找到合适的 HP,但模型仍存在 DEFT 旨在填补的分布差异。
- 仅阶段 2(只运行 DEFT)可以填补这些差异,但使用的是
specs/baseline_spec.yaml中手工编写的 HP——通常并非最优。 - 仅阶段 3 会针对增强数据集运行 AutoML,但如果没有经过调优的基线,DEFT 循环的迭代成本会更高(收敛更慢,需要更多迭代才能达到 KPI)。
运行全部三个阶段:先由 AutoML 在原始数据上进行一次低成本调优,再由 DEFT 使用合理的 HP 完成大量数据处理工作,最后由 AutoML 在数据更丰富的数据集上再次调优。对于最终部署的 FAR/召回率,阶段 3 是三个阶段中最重要的。
前期成本
该流水线按顺序运行。总墙钟时间 ≈ 阶段 1(N_automl × 每条 rec 的训练时间)+ 阶段 2(M 次迭代 × 每次迭代的成本)+ 阶段 3(N_automl × 每条 rec 的训练时间)。
请注意,阶段 2 不会单独进行基线训练——阶段 1 的最佳检查点会被复用为 DEFT 的基线,因此基线成本计入阶段 1 的 N_automl 次训练中,而不是额外重新训练。启动前请向用户说明这一点。通常阶段 2 的迭代仍是主要耗时部分(每次迭代都包含 SDG 和重新训练),但在单 GPU 机器上,阶段 1 和阶段 3 各自仍需数小时。应使用用户环境提供的单任务耗时估算(如果有),而不要猜测分钟数。各阶段成本项的拆分详见 references/pitfalls-and-quality-checks.md(计算预算)。
整合式预检——一个关卡,涵盖全部三个阶段
整个流水线只有一个用户关卡。 在执行任何会产生副作用的操作(docker pull、docker login、委托给下游技能的任何作业启动调用、${RESULTS_DIR}/ 下的文件变更)之前,Agent 必须生成一份整合式预检摘要,涵盖所有下游技能的预检内容。用户批准后,运行将在全部三个阶段中自主进行——不再进行任何交互式暂停。
用户明确表示不希望在阶段之间收到提示。DEFT 循环自身的内联 ## Pre-Flight Summary 关卡将变为零问题展示步骤(所有值均由此整合式关卡预先提供),tao-run-automl 在阶段 1 和阶段 3 的共享启动预检也同样如此。
打印摘要之前,Agent 必须打开并完整阅读每个下游技能的预检部分,执行这些部分规定的所有只读检查,并呈现每项检查的结果。摘要必须包含九个部分:工作区/主机/平台/网络;凭据状态;容器镜像;数据集表;阶段 1 配置;阶段 2 配置;阶段 3 配置;计算资源估算;确认行。通过关卡后,必须传递收集到的值,以跳过所有下游交互式关卡。唯一允许在关卡通过后暂停的情况,是下游技能无法绕过的运行中硬性安全关卡。
参见 references/consolidated-preflight.md,了解需要阅读的预检部分完整列表、必需的 DEFT ## Pre-Flight 运行、九部分摘要的具体内容、用于跳过关卡的值传递方式,以及技能库版本尚不支持跳过关卡时的处理流程。
阶段 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 | 推荐数量越多,超参数越好,但计算量也会线性增加 |
spec_overrides | 固定 epochs / batch_size;仅调整与优化器相关的超参数 | 否则 AutoML 会转向长时间训练,耗尽阶段 2 的预算 |
搜索完成后,AutoML 的 result["best"]["specs"] 就是获胜的超参数字典。
移交至阶段 2
阶段 1 移交两项产物:获胜的spec 和获胜的checkpoint。在 DEFT 的基线步骤中用相同超参数重新训练会浪费计算资源——应改为使用阶段 1 的输出预先填充 DEFT 的基线状态,让 DEFT 从基线推理 → 评估 → RCA → 第 1 次迭代开始。这是一个四步衔接流程(写入合并后的 spec → 预填充 baseline/train/ → 初始化已完成基线步骤的 deft_state.json → 调用 DEFT),随后对获胜的 checkpoint 进行质量检查(按类别统计预测数量;与零样本 ChangeNet 比较)。
参见 references/phase-handoffs.md,了解步骤 1–4 的原文内容(包括 cp 命令和 deft_state.json 预填充代码)以及质量检查清单。
阶段 2 — DEFT 循环(普通训练,使用阶段 1 的预置基线)
调用 tao-skill-bank:tao-run-deft-aoi(阅读其 SKILL.md 以了解完整接口)。对于非 AOI 应用,请调用匹配的 DEFT 技能;交接格式相同。
跳过 DEFT 循环中的基线训练子步骤。 阶段 1 已使用表现最佳的 HP 训练出了检查点,而阶段 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/ 来源,且不得再次提示用户);对预置检查点执行基线推理 → 评估 → RCA;完整的逐次迭代 RCA → 路由 → SDG → 挖掘 → 组装 → 训练周期;KPI 门控和停止条件;以及 ${RESULTS_DIR}/ 目录布局(deft_state.json、DEFT_Loop_Report.html)。
循环退出后(达到 KPI 或达到 max_iterations),从 deft_state.json 中获取两个值:iterations.<best>.best_ckpt_path(循环中表现最佳的普通训练检查点)以及最终迭代标签 N_final(用于定位增强后的训练 CSV)。
如果 DEFT 循环因无法恢复的门控而硬停止,跳过阶段 3。没有经过验证的增强 CSV 可供 AutoML 使用。
阶段 3 — 在 DEFT 增强数据集上进行 AutoML 优化
再次调用 tao-skill-bank:tao-run-automl,将增强后的训练 CSV 用作训练数据集,使用之前相同的留出验证 CSV,并将阶段 2 的迭代赢家检查点用作热启动:
| 输入 | 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 |
| 初始规格 | 从 <workspace>/specs/baseline_spec_automl.yaml(阶段 1 的赢家)开始——为搜索提供一个有力的中心点,以便围绕其优化 |
| 热启动检查点 | ${RESULTS_DIR}/deft_state.json 中的 iterations.<best>.best_ckpt_path——将 spec_overrides["train"]["pretrained_model_path"] 设为此路径。这样,阶段 3 的每个推荐配置都会从阶段 2 的赢家开始微调,而不是从头训练。 |
热启动是强制要求:如果没有热启动,每个推荐配置都会从随机初始化开始,只有 10–20 个周期用于重新收敛;与 iter1 相比,val_loss 会回退 0.03–0.05,而 _pick_best 安全回退机制会悄然退回到迭代赢家。输出写入 ${RESULTS_DIR}/final_automl/;此搜索的获胜检查点就是流水线的交付物。搜索结束后,将阶段 3 的检查点注册到 deft_state.json 的 iterations.final_automl 下,并重新运行 prepare_inference_spec.py,确保交接能看到该检查点(如果阶段 3 表现退步,则回退到循环中表现最佳的检查点)。
有关以下内容,请参见 references/phase-handoffs.md:“热启动为强制要求”的完整原因与权衡、具体的 spec_overrides 选择代码、将阶段 3 输出写回 DEFT 报告的确切两步接线方式,以及关于性能回退的安全说明。
陷阱与质量检查
这些内容适用于两个 AutoML 阶段。应将其融入 Agent 的行为中,而不是只粘贴一次。详细内容见 references/pitfalls-and-quality-checks.md;简要说明如下:
- 指标陷阱 — AOI 存在类别不平衡。 ChangeNet AOI 数据集以 PASS 类为主(占比超过 90%),因此
val_loss最优的模型可能是模式坍缩模型。优先直接使用 FAR @ 100%-recall,或者通过pred_counts合理性检查来防范val_loss陷阱,或者先按 FAR @ 100%-recall 对排名前 K 的模型进行评估,再做选择。对于平衡任务或回归任务,val_loss没问题。 - 运行间噪声。 对于相同的 HP 配置,AutoML 的结果可能存在 2–3 倍的差异。如果获胜模型明显优于亚军模型,应使用新的 seed 重新运行,然后再将规格提交给阶段 2。
- 数据洁净度(数据泄漏)。 两个 AutoML 阶段都使用与 KPI 测试集(
<workspace>/kpi/testing_set.csv)不同的验证集;该测试集仅用于 DEFT 的最终报告。阶段 3 在增强后的 CSV 上训练,但保留相同的验证集,以确保阶段 1 和阶段 3 的结果具有可比性。 - 计算预算。 阶段 1:
N_automl × per-rec train;阶段 2:M_iter × (RCA + SDG + mining + retrain)(通常开销最大);阶段 3:在更大的增强数据集上执行N_automl × per-rec train。在估算实际运行时间之前,先询问用户每个作业需要多长时间。
快速开始(AOI 实例)
当用户首次提出“运行 AOI 工作流”时,Agent 会向用户说明一个三阶段计划(阶段 1 AutoML 基线 → 阶段 2 DEFT 循环 → 阶段 3 AutoML 优化),说明总成本构成(开始前无需额外重新训练基线,结束后也无需额外重新训练),询问用户每次运行所需时间以便估算实际运行时间,并等待批准。得到确认后,Agent 会调用阶段 1,写入合并后的规格,预先填充 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 规格文件”和“最佳 HP 检查点”的路径约定,以符合目标 DEFT 技能的要求
- 阶段 3 中增强 CSV 的路径,以符合目标 DEFT 技能生成的路径
交接方式相同:阶段 1 输出规格 + 检查点(检查点用于预先填充 DEFT 基线),阶段 2 使用两者并输出增强数据集,阶段 3 输出最终检查点。阶段 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— 面向客户的实例消息