bev-project/archive/docs_old/训练异常停止报告_20251031.md

5.9 KiB
Raw Blame History

BEVFusion训练异常停止报告

检测时间: 2025-10-31 08:45
训练任务: Phase 4A Stage 1 (600×600 BEV分辨率扩展)


🚨 问题摘要

训练状态: 已停止(非正常)
停止时间: 2025-10-30 17:04昨天下午5点
停止时长: ~16小时
停止位置: Epoch [1][5400/30895] (17.5%完成)


📊 训练进展

完成情况

总迭代数: 30,895 iters/epoch
已完成: 5,400 iters (17.5%)
剩余: 25,495 iters

Loss趋势停止前

起始Loss: ~6.9 (iter 1)
中期Loss: ~4.5 (iter 2600)
最终Loss: ~4.08 (iter 5400) ✅
下降幅度: 41%
趋势: 持续稳定下降

最后记录指标 (iter 5400)

分割Loss:
  Drivable Area: dice=0.28, focal=0.038
  Ped Crossing:  dice=0.44, focal=0.036
  Walkway:       dice=0.48, focal=0.044
  Stop Line:     dice=0.67 ⭐, focal=0.041
  Carpark:       dice=0.57, focal=0.027
  Divider:       dice=0.83 ⭐, focal=0.034

3D检测:
  Heatmap: 0.214
  Classification: 0.031
  BBox: 0.295
  Matched IoU: 0.625 ✅

总Loss: 4.0818
Grad Norm: 15.66 (正常)

⚠️ 异常特征

1. GPU状态

当前时间: 10-31 08:45
所有GPU: 0% 利用率
显存使用: 1.5GB (仅基础占用)
功耗: 25-38W (空闲状态)

结论: GPU完全空闲训练已停止

2. 进程状态

进程数: 14个Python进程存活
主进程PID 24763: CPU 200% (异常!)
其他进程: CPU 0-13%

运行时间: 42小时+
状态: 可能卡死(挂起)

3. 日志状态

最后日志: 2025-10-30 17:04:07
当前时间: 2025-10-31 08:45:34
无更新时长: ~15小时41分钟

无错误信息输出
无OOM信息
无异常退出记录

🔍 可能原因分析

原因1: 进程挂起(最可能)

现象:
  - 进程仍在运行,但无输出
  - 主进程CPU 200% (卡在某处)
  - 无日志更新
  
可能触发:
  - DataLoader卡死
  - 进程间通信问题
  - GPU通信超时
  - 死锁

原因2: 静默失败

现象:
  - 训练停止但进程未退出
  - 无错误日志

可能触发:
  - 数据集读取错误
  - 网络文件系统问题
  - 内存泄漏导致卡顿

原因3: 环境问题

配置差异:
  启动脚本使用: multitask_BEV2X_phase4a_stage1.yaml (600×600)
  但从PS进程看到: multitask_BEV2X_phase4a.yaml (800×800??)
  
注意: 这可能导致配置不匹配

📈 已完成的有价值训练

Loss改善

Stop Line dice: 0.94 → 0.67 ⭐ (下降29%)
Divider dice:   0.96 → 0.83 ⭐ (下降14%)
总Loss:         6.9 → 4.08 (下降41%)

训练时长

启动时间: 10-30 13:07
停止时间: 10-30 17:04
训练时长: ~4小时
完成iters: 5,400 / 30,895 (17.5%)

数据价值

✓ Loss趋势健康稳定下降
✓ 梯度正常(无爆炸/消失)
✓ 指标改善显著
✓ GPU显存使用稳定(18.7GB)
✓ 可作为断点续训的良好起点

💾 Checkpoint状态

可用Checkpoint

Phase 3: epoch_23.pth (起点)
  → 516MB, 10-29 23:21

Phase 4A Stage 1: 暂无保存
  → 训练在第一个epoch未完成前停止
  → 无intermediate checkpoint
  → 需要重新从epoch_23.pth开始

Checkpoint策略问题

❌ 默认配置: 每个epoch结束才保存
❌ 问题: Epoch 1需要~21小时才能完成首次保存
❌ 风险: 中途停止会丢失所有进度

建议改进:
  ✓ 启用每N个iteration保存
  ✓ 或每1-2小时自动保存
  ✓ 设置latest.pth实时更新

🛠️ 解决方案

方案A: 清理并重新启动(推荐)

# 1. 杀死所有训练进程
pkill -f "tools/train.py"

# 2. 清理GPU显存
nvidia-smi --gpu-reset -i 0,1,2,3

# 3. 验证环境
python -c "import torch; print('GPU:', torch.cuda.device_count())"

# 4. 重新启动训练
cd /workspace/bevfusion
bash START_PHASE4A_STAGE1.sh

# 5. 监控
bash monitor_phase4a_stage1.sh

方案B: 添加Checkpoint频率后重启

# 修改配置增加保存频率
# 在configs中添加:
checkpoint_config = dict(
    interval=500,  # 每500 iters保存一次
    by_epoch=False,
    max_keep_ckpts=3
)

# 然后重启训练

方案C: 使用4卡改为6卡可选

# 如果怀疑是4卡通信问题
# 可以尝试改回6卡训练
# 修改START_PHASE4A_STAGE1.sh中的-np参数

📋 重启前Checklist

环境检查

  • 确认PyTorch 1.10.1
  • 确认符号链接存在
  • 确认GPU全部可用
  • 确认数据集可访问

配置检查

  • 确认使用multitask_BEV2X_phase4a_stage1.yaml
  • 确认workers_per_gpu=0
  • 确认samples_per_gpu=1
  • 确认从epoch_23.pth加载

优化建议

  • 添加checkpoint保存频率
  • 启用进度监控
  • 设置日志刷新频率
  • 考虑使用screen/tmux

📊 训练性能预估(基于已完成部分)

时间统计

5400 iters: 4小时
平均: 2.67秒/iter

预估完成时间:
  Epoch 1 (30895 iters): 22.9小时
  10 epochs: 9.5天

内存使用

GPU显存: 18.7GB/32GB (58%使用率)
✓ 600×600分辨率GPU显存充足
✓ 可以考虑增加batch size或使用更多GPU

⏭️ 推荐操作

立即行动

1. 停止卡死的进程: pkill -f "tools/train.py"
2. 查看完整日志: tail -100 runs/run-326653dc-c038af2c/20251030_130713.log
3. 确认环境正常
4. 重新启动训练

监控要点

- 前30分钟密切监控日志
- 确认每2-3分钟有新输出
- 观察Loss是否从4.08继续下降
- 设置每小时检查一次

长期优化

- 实施自动监控脚本(检测无输出自动重启)
- 增加checkpoint保存频率
- 考虑使用Weights & Biases等监控工具

总结

损失: 4小时训练进度但Loss下降显著5400 iters有价值
原因: 进程挂起,具体触发点不明
状态: 需要重新启动
优先级: 高(尽快恢复训练)

建议: 立即清理进程并重启训练同时增加checkpoint保存频率以防止再次丢失进度。