bev-project/project/docs/NEW_DOCKER_EVAL_GUIDE.md

448 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 新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命令在主机执行
```bash
# 方案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内执行
```bash
# 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`:
```bash
#!/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: 运行评估
```bash
cd /workspace/bevfusion
chmod +x eval_in_new_docker.sh
bash eval_in_new_docker.sh
```
---
## 📊 数据访问说明
### 需要挂载的目录
**必须挂载**:
```
/workspace/bevfusion → 代码、配置、checkpoint
/path/to/nuscenes → nuScenes数据集
```
**验证数据访问**:
```bash
# 检查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无法加载
```bash
# 症状
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不可见
```bash
# 检查
nvidia-smi
python -c "import torch; print(torch.cuda.device_count())"
# 如果GPU数量不对
# 检查docker run的--gpus参数
```
### 问题3: 数据集路径错误
```bash
# 检查配置
grep "dataset_root" CONFIG_FILE
# 如果路径不对,使用--cfg-options覆盖
--cfg-options dataset_root=/your/actual/path
```
### 问题4: 共享内存不足
```bash
# 症状
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: 轻微竞争,但影响不大
网络: 无竞争
```
---
## 📝 快速启动清单
**在主机执行**:
```bash
# 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内执行**:
```bash
# 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
```
---
## 🎯 评估完成后
### 提取结果
```bash
# 在训练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完全相同:
```bash
# 在主机执行 - 一键启动
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镜像名称和数据集路径即可启动