| name | compare-exp |
| description | 横向比较多个训练实验(消融实验、baseline对比),输出 Config diff + 指标对比表 |
/compare-exp
用户意图:对比多个实验的训练结果,用于消融分析或 baseline 比较。
设计原则
先拉数据,后比较。日志获取和对比解耦,方便灵活组合。
调用合约
python cli/compare_training_logs.py log1.txt log2.txt [...] [--names A,B,...] [--baseline N]
| 参数 | 默认 | 说明 |
|---|
logs | 必填 | 2+ 个日志文件路径 |
--names | 文件名 | 逗号分隔的实验名称 |
--baseline | 0 | baseline 实验索引(0-based),用于计算 delta |
Cascade 行动指南
Step 1. 确定要比较的实验
用户可能说:
- "比较 exp-A 和 exp-B" → 查 experiments.md 或
history --json 找 train_id / instance_id
- "比较最近三个实验" → 用
python cli/taiji_run.py inst list 列出
- "和 baseline 比" → 找到 baseline 实验的 instance ID
Step 2. 拉取日志
对每个实验,获取日志并保存到 .taiji/cache/。
⚠ 先确认账号:查 experiments.md 中实验所在区域确定归属。不同实验可能属于不同账号,每次切换后再拉日志:
python cli/taiji_run.py account list
python cli/taiji_run.py account switch <对应账号>
# 拉取日志(按实验名命名文件)
python cli/taiji_run.py inst log <INSTANCE_A> --tail 9999 | Out-File -Encoding utf8 .taiji/cache/log_expA.txt
python cli/taiji_run.py inst log <INSTANCE_B> --tail 9999 | Out-File -Encoding utf8 .taiji/cache/log_expB.txt
Step 3. 运行对比
// turbo
python cli/compare_training_logs.py .taiji/cache/log_expA.txt .taiji/cache/log_expB.txt --names exp-A,exp-B --baseline 0
Step 4. 分析输出(Cascade 核心价值)
对比结果后,Cascade 应主动分析:
- Config Diff — 改了什么?改动是否合理?
- AUC Delta — 正向还是负向?幅度是否显著(>0.001 通常有意义)?
- 收敛趋势 — 改动是加速还是减慢收敛?
- 过拟合差异 — 哪个实验 early stop 更早?
- 速度影响 — 改动是否显著影响训练吞吐?
- 结论 — 该改动是否值得保留?是否需要进一步调参?
Step 5. 建议下一步(ask_user_question)
| 分析结论 | 建议选项 |
|---|
| 变体优于 baseline | (a) 合入 trunk / (b) 继续调参优化 / (c) 先记录结论 |
| 变体劣于 baseline | (a) 分析原因 / (b) 尝试不同超参 / (c) 放弃该方向 |
| 差异不显著 | (a) 延长训练看趋势 / (b) 换数据验证 / (c) 放弃 |
| 部分实验仍在跑 | (a) 等完成后重新对比 / (b) 先看已有结果 |
输出格式示例
## Status
- **exp-A**: running (improving), 6 epochs
- **exp-B**: running, 6 epochs
## Config Diff
| Key | **exp-A** | **exp-B** |
|-----|---------|---------|
| `some_flag` | off | on |
| `extra_feature` | False | True |
## Best Results
| Metric | **exp-A** | **exp-B** | **Delta vs exp-A** |
|--------|---------|---------|---|
| AUC_mirrored | 0.8300 (ep4) | 0.8280 (ep3) | -0.0020 (worse) |
| AUC_global | 0.8600 (ep4) | 0.8580 (ep3) | -0.0020 (worse) |
## Per-Epoch AUC_mirrored
| Epoch | **exp-A** | **exp-B** |
|-------|---------|---------|
| 1 | 0.8200 | 0.8180 |
| 2 | **0.8250** | 0.8230 |
| ...
失败处理
| 现象 | 处理 |
|---|
| 某实验无 EVAL 行 | 还没跑完第一个 epoch,等一会 |
| Config Diff 为空 | 可能改动不在 [CONFIG] 行中(如代码逻辑改动),提醒用户 |
| 日志编码错误 | 确保用 Out-File -Encoding utf8 保存 |