151 lines
4.3 KiB
Bash
151 lines
4.3 KiB
Bash
#!/bin/bash
|
||
# 一键执行剪枝+微调流程
|
||
|
||
set -e
|
||
|
||
cd /workspace/bevfusion
|
||
|
||
echo "========================================================================"
|
||
echo "BEVFusion 模型剪枝+微调 完整流程"
|
||
echo "========================================================================"
|
||
echo ""
|
||
echo "Baseline: Epoch 23"
|
||
echo " - 参数量: 45.72M"
|
||
echo " - NDS: 0.6941, mAP: 0.6446, mIoU: 0.4130"
|
||
echo ""
|
||
echo "目标: 剪枝30% → 32M参数"
|
||
echo "预期: 精度损失<2%"
|
||
echo ""
|
||
|
||
# 配置
|
||
CHECKPOINT="runs/enhanced_from_epoch19/epoch_23.pth"
|
||
PRUNED_OUTPUT="pruning_results/bevfusion_pruned_32M.pth"
|
||
TARGET_RATIO=0.70 # 保留70%参数(剪枝30%)
|
||
|
||
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
|
||
FINETUNE_DIR="runs/pruned_finetune_${TIMESTAMP}"
|
||
|
||
# 检查checkpoint
|
||
if [ ! -f "$CHECKPOINT" ]; then
|
||
echo "错误: Checkpoint不存在: $CHECKPOINT"
|
||
exit 1
|
||
fi
|
||
|
||
# 创建输出目录
|
||
mkdir -p pruning_results
|
||
mkdir -p "$FINETUNE_DIR"
|
||
|
||
echo "========================================================================"
|
||
echo "阶段1: 模型剪枝(预计15分钟)"
|
||
echo "========================================================================"
|
||
echo ""
|
||
|
||
# 执行剪枝
|
||
/opt/conda/bin/python tools/pruning/prune_bevfusion_builtin.py \
|
||
--checkpoint "$CHECKPOINT" \
|
||
--output "$PRUNED_OUTPUT" \
|
||
--target-ratio $TARGET_RATIO \
|
||
2>&1 | tee "pruning_results/pruning_log_${TIMESTAMP}.txt"
|
||
|
||
if [ $? -ne 0 ]; then
|
||
echo "错误: 剪枝失败"
|
||
exit 1
|
||
fi
|
||
|
||
echo ""
|
||
echo "✅ 剪枝完成!"
|
||
echo " 输出: $PRUNED_OUTPUT"
|
||
echo ""
|
||
|
||
# 询问是否继续微调
|
||
echo "========================================================================"
|
||
echo "阶段2: 微调训练(预计12-15小时)"
|
||
echo "========================================================================"
|
||
echo ""
|
||
echo "是否立即开始微调训练?"
|
||
echo ""
|
||
echo "微调配置:"
|
||
echo " - Epochs: 3"
|
||
echo " - 学习率: 5e-6 (很小)"
|
||
echo " - GPU: 8张"
|
||
echo " - 预计时间: 12-15小时"
|
||
echo ""
|
||
echo "选项:"
|
||
echo " [1] 立即开始微调(后台运行)"
|
||
echo " [2] 稍后手动启动"
|
||
echo " [3] 查看剪枝结果后再决定"
|
||
echo ""
|
||
|
||
read -p "请选择 [1/2/3]: " choice
|
||
|
||
case $choice in
|
||
1)
|
||
echo ""
|
||
echo "启动微调训练..."
|
||
|
||
CONFIG="configs/nuscenes/det/transfusion/secfpn/camera+lidar/swint_v0p075/multitask_enhanced_phase1_HIGHRES.yaml"
|
||
|
||
# 后台启动微调
|
||
nohup /opt/conda/bin/torchpack dist-run -np 8 /opt/conda/bin/python tools/train.py \
|
||
"$CONFIG" \
|
||
--load_from "$PRUNED_OUTPUT" \
|
||
--run-dir "$FINETUNE_DIR" \
|
||
--cfg-options \
|
||
max_epochs=3 \
|
||
optimizer.lr=5.0e-6 \
|
||
data.samples_per_gpu=2 \
|
||
data.workers_per_gpu=0 \
|
||
2>&1 | tee "${FINETUNE_DIR}/finetune.log" &
|
||
|
||
FINETUNE_PID=$!
|
||
echo $FINETUNE_PID > pruning_results/finetune.pid
|
||
|
||
echo ""
|
||
echo "✅ 微调训练已启动(后台运行)"
|
||
echo " PID: $FINETUNE_PID"
|
||
echo " 日志: ${FINETUNE_DIR}/finetune.log"
|
||
echo ""
|
||
echo "监控命令:"
|
||
echo " tail -f ${FINETUNE_DIR}/finetune.log | grep 'Epoch'"
|
||
echo ""
|
||
;;
|
||
2)
|
||
echo ""
|
||
echo "稍后手动启动微调。"
|
||
echo ""
|
||
echo "启动命令:"
|
||
echo " torchpack dist-run -np 8 python tools/train.py \\"
|
||
echo " configs/.../multitask_enhanced_phase1_HIGHRES.yaml \\"
|
||
echo " --load_from $PRUNED_OUTPUT \\"
|
||
echo " --cfg-options max_epochs=3 optimizer.lr=5.0e-6"
|
||
echo ""
|
||
;;
|
||
3)
|
||
echo ""
|
||
echo "查看剪枝结果:"
|
||
echo " python tools/analysis/analyze_checkpoint.py $PRUNED_OUTPUT"
|
||
echo ""
|
||
echo "如果满意,再启动微调。"
|
||
echo ""
|
||
;;
|
||
*)
|
||
echo "无效选择,退出。"
|
||
exit 1
|
||
;;
|
||
esac
|
||
|
||
echo "========================================================================"
|
||
echo "剪枝流程完成"
|
||
echo "========================================================================"
|
||
echo ""
|
||
echo "已生成文件:"
|
||
echo " - $PRUNED_OUTPUT"
|
||
echo " - pruning_results/pruning_log_${TIMESTAMP}.txt"
|
||
echo ""
|
||
echo "下一步:"
|
||
echo " 1. 等待微调完成(如已启动)"
|
||
echo " 2. 评估剪枝+微调后的模型"
|
||
echo " 3. 进行INT8量化"
|
||
echo ""
|
||
|