10 KiB
10 KiB
新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,需要确认:
-
Docker镜像名称:
训练Docker使用的镜像是什么? 可通过: docker ps 查看 -
数据集挂载路径:
nuScenes数据集在主机的哪个目录? 当前配置中dataset_root指向哪里? -
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镜像名称和数据集路径即可启动