mcpField
T
tao-run-automl-deft-pipeline

tao-run-automl-deft-pipeline

github.com/nvidia开发3.8k1.6k 次安装今天更新
代码仓库

关于 tao-run-automl-deft-pipeline

串联 AutoML 超参数调优、DEFT 数据改进循环,以及在增强数据集上再次运行 AutoML 的工作流桥接技能。适用于需要在 DEFT 前后调优模型,并在阶段间传递产物的流程。

主要功能

  1. 01三个顺序执行的工作流阶段
  2. 02DEFT 前后进行 AutoML 调优
  3. 03DEFT 数据改进循环
  4. 04规格与检查点交接
  5. 05统一的预检确认环节

适用场景

  1. 01在 DEFT 循环前调优模型
  2. 02从 AutoML 检查点启动 DEFT
  3. 03在 DEFT 增强数据上再次调优
  4. 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.md
skill-card.md
skill.oms.sig
config/
skillspector-baseline.yaml
evals/
evals.json
references/
consolidated-preflight.md
phase-handoffs.md
pitfalls-and-quality-checks.md
quick-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_archvisual-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 的最终报告
metricFAR @ 100% recall(优先)或 val_loss参见 references/pitfalls-and-quality-checks.md 中的指标陷阱——ChangeNet AOI 类别不平衡,仅使用 val_loss 可能导致模式坍塌
algorithmbayesian如果计算资源紧张,可使用 LLM-brain 或 autoresearch
automl_max_recommendationsAOI 使用 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_archvisual-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_recommendations5–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 — 面向客户的实例消息

评论

支持 Markdown