bev-project/project/docs/NEW_DOCKER_EVAL_GUIDE.md

10 KiB
Raw Blame History

新Docker容器评估Epoch 23指南

用途: 在新的Docker容器中评估epoch_23.pth
优势: 完全隔离不影响训练Docker
生成时间: 2025-10-30 15:15


🎯 方案概述

训练Docker (当前):
  - GPU 0-3: Stage 1训练
  - 持续运行,不受影响
  
评估Docker (新建):
  - GPU 4-7或其他: Epoch 23评估
  - 独立环境,完全隔离
  - 评估完成后可删除

📋 新Docker启动步骤

Step 1: 准备Docker命令在主机执行

# 方案1: 使用相同镜像(推荐)
docker run -it --gpus '"device=4,5,6,7"' \
  --shm-size=8g \
  -v /workspace/bevfusion:/workspace/bevfusion \
  -v /path/to/dataset:/dataset \
  --name bevfusion-eval \
  <相同的镜像名称> \
  /bin/bash

# 方案2: 使用device ID范围
docker run -it --gpus '"device=4,5,6,7"' \
  --shm-size=8g \
  -v /workspace/bevfusion:/workspace/bevfusion \
  --name bevfusion-eval \
  <镜像名称> \
  /bin/bash

关键参数:

  • --gpus '"device=4,5,6,7"': 分配GPU 4-7
  • --shm-size=8g: 增大共享内存避免DataLoader错误
  • -v /workspace/bevfusion:/workspace/bevfusion: 挂载工作目录
  • --name bevfusion-eval: 容器名称

Step 2: 配置新Docker环境在新Docker内执行

# 2.1 设置PATH
export PATH=/opt/conda/bin:$PATH

# 2.2 创建符号链接(关键!)
cd /opt/conda/lib/python3.8/site-packages/torch/lib
ln -sf libtorch_cuda.so libtorch_cuda_cu.so
ln -sf libtorch_cuda.so libtorch_cuda_cpp.so
ln -sf libtorch_cpu.so libtorch_cpu_cpp.so

# 2.3 设置LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/opt/conda/lib/python3.8/site-packages/torch/lib:/opt/conda/lib:/usr/local/cuda/lib64:$LD_LIBRARY_PATH

# 2.4 验证环境
cd /workspace/bevfusion
python -c "import torch; print('PyTorch:', torch.__version__, 'CUDA:', torch.cuda.is_available())"
python -c "from mmcv.ops import nms_match; import mmcv; print('mmcv:', mmcv.__version__)"
python -c "from mmdet3d.apis import train_model; print('✅ 所有依赖正常')"

# 2.5 检查GPU可见性
python -c "import torch; print('可见GPU数量:', torch.cuda.device_count())"
nvidia-smi

Step 3: 准备评估脚本在新Docker内

创建 /workspace/bevfusion/eval_in_new_docker.sh:

#!/bin/bash
# 新Docker中的Epoch 23评估脚本

set -e

export PATH=/opt/conda/bin:$PATH
export LD_LIBRARY_PATH=/opt/conda/lib/python3.8/site-packages/torch/lib:/opt/conda/lib:/usr/local/cuda/lib64:$LD_LIBRARY_PATH
export PYTHONPATH=/workspace/bevfusion:$PYTHONPATH

cd /workspace/bevfusion

echo "========================================================================"
echo "Epoch 23评估 (新Docker容器)"
echo "========================================================================"
echo "Checkpoint: epoch_23.pth"
echo "GPU: 全部可用GPU"
echo "========================================================================"
echo ""

# 创建评估输出目录
EVAL_DIR="eval_results/epoch23_new_docker_$(date +%Y%m%d_%H%M%S)"
mkdir -p "$EVAL_DIR"

CONFIG="configs/nuscenes/det/transfusion/secfpn/camera+lidar/swint_v0p075/multitask_enhanced_phase1_HIGHRES.yaml"
CHECKPOINT="runs/enhanced_from_epoch19/epoch_23.pth"

echo "配置: $CONFIG"
echo "Checkpoint: $CHECKPOINT"
echo "输出: $EVAL_DIR"
echo ""

# 检查GPU数量
GPU_COUNT=$(python -c "import torch; print(torch.cuda.device_count())")
echo "可用GPU数量: $GPU_COUNT"
echo ""

echo "开始评估..."
echo ""

# 使用所有可用GPU
/opt/conda/bin/torchpack dist-run -np $GPU_COUNT /opt/conda/bin/python tools/test.py \
  "$CONFIG" \
  "$CHECKPOINT" \
  --eval bbox \
  --out "$EVAL_DIR/results.pkl" \
  --cfg-options data.workers_per_gpu=4 \
  2>&1 | tee "$EVAL_DIR/eval.log"

echo ""
echo "========================================================================"
echo "评估完成!"
echo "========================================================================"
echo "结果: $EVAL_DIR/results.pkl"
echo "日志: $EVAL_DIR/eval.log"
echo ""

# 提取关键指标
echo "性能指标摘要:"
echo "========================================================================"
grep -E "(NDS|mAP|mIoU)" "$EVAL_DIR/eval.log" | tail -30

echo ""
echo "详细结果请查看: $EVAL_DIR/eval.log"
echo "========================================================================"

Step 4: 运行评估

cd /workspace/bevfusion
chmod +x eval_in_new_docker.sh
bash eval_in_new_docker.sh

📊 数据访问说明

需要挂载的目录

必须挂载:

/workspace/bevfusion  → 代码、配置、checkpoint
/path/to/nuscenes     → nuScenes数据集

验证数据访问:

# 检查checkpoint
ls -lh /workspace/bevfusion/runs/enhanced_from_epoch19/epoch_23.pth

# 检查数据集
ls /dataset/nuScenes/  # 或您的数据集路径

# 检查配置中的dataset_root
grep "dataset_root" /workspace/bevfusion/configs/nuscenes/det/transfusion/secfpn/camera+lidar/swint_v0p075/multitask_enhanced_phase1_HIGHRES.yaml

🔧 环境配置Checklist

新Docker容器中必做

  • 启动Docker容器GPU 4-7
  • 设置PATH环境变量
  • 创建符号链接3个
  • 设置LD_LIBRARY_PATH
  • 验证PyTorch可用
  • 验证mmcv可加载
  • 验证GPU可见性
  • 检查数据集访问
  • 检查checkpoint访问
  • 运行评估脚本

⚠️ 常见问题与解决

问题1: mmcv无法加载

# 症状
ImportError: libtorch_cuda_cu.so

# 解决
cd /opt/conda/lib/python3.8/site-packages/torch/lib
ln -sf libtorch_cuda.so libtorch_cuda_cu.so
ln -sf libtorch_cuda.so libtorch_cuda_cpp.so
ln -sf libtorch_cpu.so libtorch_cpu_cpp.so

问题2: GPU不可见

# 检查
nvidia-smi
python -c "import torch; print(torch.cuda.device_count())"

# 如果GPU数量不对
# 检查docker run的--gpus参数

问题3: 数据集路径错误

# 检查配置
grep "dataset_root" CONFIG_FILE

# 如果路径不对,使用--cfg-options覆盖
--cfg-options dataset_root=/your/actual/path

问题4: 共享内存不足

# 症状
RuntimeError: unable to write to file

# 解决1: Docker启动时加--shm-size=8g
# 解决2: 评估时使用workers=0
--cfg-options data.workers_per_gpu=0

📊 预期评估输出

评估时间

GPU数量: 4张 (GPU 4-7)
验证集大小: ~6,000样本
预计时间: 2-3小时

输出文件

eval_results/epoch23_new_docker_TIMESTAMP/
├── results.pkl        # 详细预测结果
├── eval.log          # 评估日志
└── (可能的可视化输出)

性能指标

3D检测:
  - NDS, mAP
  - 各类别AP (Car, Pedestrian, etc.)
  - 错误指标 (mATE, mASE, mAOE, etc.)

BEV分割:
  - mIoU
  - 各类别IoU (6类)
  - 不同阈值下的性能

🔄 与训练Docker的协调

文件共享

通过/workspace/bevfusion挂载:
  ✓ 评估结果保存在共享目录
  ✓ 训练Docker可以访问评估结果
  ✓ 便于后续对比分析

GPU隔离

训练Docker: GPU 0-3
评估Docker: GPU 4-7
→ 完全物理隔离,零冲突

资源竞争

CPU: 可能有轻微竞争
内存: 评估需要~8GB应该充足
磁盘IO: 轻微竞争,但影响不大
网络: 无竞争

📝 快速启动清单

在主机执行:

# 1. 确认镜像名称
docker images | grep bevfusion

# 2. 启动新Docker (替换<镜像名称>)
docker run -it --gpus '"device=4,5,6,7"' \
  --shm-size=8g \
  -v /workspace/bevfusion:/workspace/bevfusion \
  --name bevfusion-eval \
  <镜像名称> \
  /bin/bash

在新Docker内执行:

# 1. 设置环境
export PATH=/opt/conda/bin:$PATH
export LD_LIBRARY_PATH=/opt/conda/lib/python3.8/site-packages/torch/lib:/opt/conda/lib:/usr/local/cuda/lib64:$LD_LIBRARY_PATH

# 2. 创建符号链接
cd /opt/conda/lib/python3.8/site-packages/torch/lib
ln -sf libtorch_cuda.so libtorch_cuda_cu.so
ln -sf libtorch_cuda.so libtorch_cuda_cpp.so
ln -sf libtorch_cpu.so libtorch_cpu_cpp.so

# 3. 验证环境
cd /workspace/bevfusion
python -c "from mmcv.ops import nms_match; print('✅ OK')"

# 4. 运行评估
bash eval_in_new_docker.sh

🎯 评估完成后

提取结果

# 在训练Docker或新Docker中
cd /workspace/bevfusion

# 查看评估摘要
grep -A 100 "Evaluation" eval_results/epoch23_new_docker_*/eval.log

# 提取关键指标
grep -E "(NDS|mAP|mIoU|stop_line|divider)" eval_results/epoch23_new_docker_*/eval.log

对比分析

Epoch 23评估结果 vs Baseline (日志提取)
→ 验证一致性
→ 建立精确baseline

等Epoch 1完成后:
Epoch 1评估结果 vs Epoch 23
→ 量化改进幅度

优势总结

新Docker方案优势

✅ 完全隔离: 零干扰风险
✅ 独立环境: 可以不同配置
✅ 灵活分配: GPU可自由选择
✅ 安全可靠: 训练100%不受影响

实施成本

准备时间: 30-60分钟
  - 启动Docker: 5分钟
  - 环境配置: 10-15分钟
  - 验证测试: 10分钟
  
评估时间: 2-3小时
总计: 3-4小时

📞 需要的信息

为了帮您启动新Docker需要确认:

  1. Docker镜像名称:

    训练Docker使用的镜像是什么
    可通过: docker ps 查看
    
  2. 数据集挂载路径:

    nuScenes数据集在主机的哪个目录
    当前配置中dataset_root指向哪里
    
  3. GPU分配:

    评估使用GPU 4-7吗
    还是其他GPU组合
    

🚀 简化版启动(如果环境相同)

如果新Docker镜像与训练Docker完全相同:

# 在主机执行 - 一键启动
docker run -it --gpus '"device=4,5,6,7"' \
  --shm-size=8g \
  -v /workspace/bevfusion:/workspace/bevfusion \
  --name bevfusion-eval \
  <训练Docker的镜像名> \
  bash -c "
    export PATH=/opt/conda/bin:\$PATH && \
    export LD_LIBRARY_PATH=/opt/conda/lib/python3.8/site-packages/torch/lib:/opt/conda/lib:/usr/local/cuda/lib64:\$LD_LIBRARY_PATH && \
    cd /opt/conda/lib/python3.8/site-packages/torch/lib && \
    ln -sf libtorch_cuda.so libtorch_cuda_cu.so && \
    ln -sf libtorch_cuda.so libtorch_cuda_cpp.so && \
    ln -sf libtorch_cpu.so libtorch_cpu_cpp.so && \
    cd /workspace/bevfusion && \
    python -c 'from mmcv.ops import nms_match; print(\"\u2705 环境就绪\")' && \
    bash eval_in_new_docker.sh
  "

状态: 新Docker评估指南已准备完成
下一步: 提供Docker镜像名称和数据集路径即可启动