| name | parse-log |
| description | 解析 Taiji pod 日志,保留全部有用内容,仅压缩重复训练进度行并丢弃 tqdm 噪音 |
/parse-log
用户意图:分析某次训练的 pod 日志,快速了解训练配置、进度、eval 结果和异常。
设计原则
默认保留所有有用内容,仅做两件事:
- 丢弃纯噪音(tqdm 进度条、裸时间戳行)
- 压缩重复的训练进度行(
[STEP]、[TRAIN_AUC])
日志格式变更时无需改代码——新增的日志字段会自动通过。
调用合约
python cli/parse_training_log.py <log_file|-> [--max-step-lines N] [--eval-only]
| 参数 | 默认 | 说明 |
|---|
log_file | 必填 | 日志文件路径,或 - 从 stdin 读取 |
--max-step-lines | 10 | 每个重复 block 保留的最大行数(0 = 不压缩) |
--eval-only | off | 仅输出 epoch 摘要、eval 结果和 early stopping |
Cascade 行动指南
Step 1. 获取日志
| 用户说 | Cascade 做 |
|---|
给了文件路径 logs/xxx.txt | 直接用文件路径 |
| "看 #12345 的日志" / "分析最近一次" | 先保存到文件再解析(见下方命令) |
| 没指定 | 用 latest |
保存日志(注意 Windows PowerShell 编码):
python cli/taiji_run.py inst log <ID> --tail 9999 | Out-File -Encoding utf8 .taiji/cache/tmp_log.txt
Step 2. 运行解析
// turbo
python cli/parse_training_log.py .taiji/cache/tmp_log.txt
若只关心 eval 结果:
python cli/parse_training_log.py .taiji/cache/tmp_log.txt --eval-only
Step 3. 分析输出(Cascade 核心价值)
解析结果后,Cascade 应主动分析:
- 训练趋势 — avg_loss 是否持续下降?有无 spike?
- 过拟合信号 — train AUC vs valid AUC gap,PredDist p99 趋势
- 收敛判断 — valid AUC 是否已平台期?还在上升?
- 速度异常 — speed 是否有显著波动(提示 I/O 瓶颈或 GC)
- LR schedule — lr_dense 变化是否符合预期
- 异常事件 — NaN loss、WARNING、early stopping
Step 4. 按需调整
# 不压缩,看全部训练进度
python cli/parse_training_log.py <log_path> --max-step-lines 0
# 高压缩,每 block 只保留 5 行
python cli/parse_training_log.py <log_path> --max-step-lines 5
Step 5. 完成后建议下一步(ask_user_question)
| 分析结论 | 建议选项 |
|---|
| 训练正常,已收敛 | (a) 看 metrics 图表 /view-metrics / (b) 发布 ckpt / (c) 先这样 |
| 发现异常 (NaN/spike) | (a) 看完整 log 定位问题 / (b) 调整超参重跑 |
| 仍在训练中 | (a) 等一会再看 / (b) 看实时 log inst log <ID> --tail 50 |
失败处理
| 现象 | 处理 |
|---|
| 日志文件为空 | 任务可能还没启动,等几分钟 |
| UnicodeEncodeError | Windows 终端编码问题,脚本已内置 utf-8 reconfigure |
无 [Eval] 行 | 首个 epoch 还没结束,等一会 |