bev-project/archive/docs_old/PHASE4A_GPU_MEMORY_ISSUE.md

2.0 KiB
Raw Blame History

Phase 4A 显存不足问题

时间: 2025-10-30
问题: CUDA OOM with 6 GPUs


错误信息

RuntimeError: CUDA out of memory. Tried to allocate 626.00 MiB 
(GPU 0; 31.73 GiB total capacity; 18.22 GiB already allocated; 10.25 MiB free; 
18.93 GiB reserved in total by PyTorch)

原因分析

显存需求增长

Phase 3 (400×400):

  • BEV features: 512 × 400 × 400 = 81.92 MB
  • Decoder中间层: ~300 MB
  • 梯度 + Optimizer状态: ~2x
  • 总计: ~900 MB / sample

Phase 4A (800×800):

  • BEV features: 512 × 800 × 800 = 327.68 MB (4x增长)
  • Decoder中间层: ~1.2 GB (4x增长)
  • 梯度 + Optimizer状态: ~2x
  • 总计: ~3.6 GB / sample (4x增长)

6 GPU配置

samples_per_gpu: 1
workers_per_gpu: 0
total_samples_per_iteration: 6

显存分配:
- 模型权重: ~2 GB
- 单个sample: ~3.6 GB
- 总计: ~5.6 GB per GPU

实际使用: 18.22 GB (接近32GB上限)

解决方案

方案A: 减少GPU数量到4 (已采用)

torchpack dist-run -np 4  # 6 → 4张GPU

优势:

  • 每个GPU处理更大的batch
  • 显存充足: 32 GB per GPU
  • 训练速度: 稍慢但可接受

预计速度:

  • Phase 3 (6 GPU): ~15小时/epoch
  • Phase 4A (4 GPU): ~22小时/epoch (+47%)
  • 20 epochs: ~440小时 ≈ 18天

方案B: 渐进式训练

  1. Stage 1: 先在600×600训练10 epochs
  2. Stage 2: Fine-tune到800×800训练10 epochs

优势: 更快收敛
劣势: 需要两阶段

方案C: 减少decoder深度

decoder_channels: [256, 128]  # 从[256,256,128,128]减少

优势: 节省显存
劣势: 模型容量下降


已采取行动

  1. 修改START_PHASE4A_FIXED.sh: np=4
  2. 保持其他配置不变
  3. 🔄 重新启动训练

预期结果

GPU配置: 4张 Tesla V100S-PCIE-32GB
Batch total: 4 samples
显存使用: ~22 GB per GPU (充足)
训练时间: ~18天 (20 epochs)

预期性能:
Stop Line IoU: 0.27 → 0.42+
Divider IoU: 0.19 → 0.35+
mIoU: 0.41 → 0.54+

状态: 使用4 GPU重新启动中...