275 lines
5.2 KiB
Markdown
275 lines
5.2 KiB
Markdown
|
|
# 模型优化 - 快速开始指南
|
|||
|
|
|
|||
|
|
**当前状态**: 跳过评估,直接开始模型优化
|
|||
|
|
**Baseline**: Epoch 23 (NDS 0.6941, mAP 0.6446, mIoU 0.4130)
|
|||
|
|
**目标**: 为Orin部署准备优化模型
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ⚡ 一键开始(5分钟)
|
|||
|
|
|
|||
|
|
### 立即运行模型分析
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd /workspace/bevfusion
|
|||
|
|
|
|||
|
|
# 一键启动分析
|
|||
|
|
bash 开始模型分析.sh
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**这个脚本会**:
|
|||
|
|
1. ✅ 分析模型参数量和大小
|
|||
|
|
2. ✅ 统计各模块参数分布
|
|||
|
|
3. ✅ 生成优化建议
|
|||
|
|
4. ✅ 创建详细分析报告
|
|||
|
|
|
|||
|
|
**预计时间**: 2-5分钟
|
|||
|
|
**GPU使用**: 不需要(CPU分析)
|
|||
|
|
**不影响**: Stage 1训练继续运行
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📊 预期分析结果
|
|||
|
|
|
|||
|
|
基于BEVFusion架构,预期结果:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
模型规模:
|
|||
|
|
总参数量: ~110M
|
|||
|
|
模型大小: ~441MB (FP32)
|
|||
|
|
|
|||
|
|
主要模块:
|
|||
|
|
Camera Encoder: ~47M (43%) ← 最大模块,优先优化
|
|||
|
|
LiDAR Encoder: ~19M (17%)
|
|||
|
|
Detection Head: ~18M (16%)
|
|||
|
|
Decoder: ~16M (14%)
|
|||
|
|
Segmentation Head: ~8M (7%)
|
|||
|
|
|
|||
|
|
优化潜力:
|
|||
|
|
剪枝40%: → 66M参数, 264MB
|
|||
|
|
INT8量化: → 66MB模型
|
|||
|
|
总压缩: 85% (441MB → 66MB)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🎯 三阶段优化路线
|
|||
|
|
|
|||
|
|
### 阶段1: 模型分析(今天,1小时)
|
|||
|
|
```
|
|||
|
|
任务:
|
|||
|
|
✓ 运行复杂度分析
|
|||
|
|
✓ 确定优化策略
|
|||
|
|
✓ 准备剪枝工具
|
|||
|
|
|
|||
|
|
输出:
|
|||
|
|
- model_complexity.txt
|
|||
|
|
- optimization_recommendations.md
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 阶段2: 结构化剪枝(3-5天)
|
|||
|
|
```
|
|||
|
|
目标:
|
|||
|
|
参数量: 110M → 60M (-45%)
|
|||
|
|
模型大小: 441MB → 240MB
|
|||
|
|
精度损失: <1.5%
|
|||
|
|
|
|||
|
|
步骤:
|
|||
|
|
Day 1-2: 实施剪枝
|
|||
|
|
Day 3-4: 微调3 epochs
|
|||
|
|
Day 5: 评估效果
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 阶段3: INT8量化(4-6天)
|
|||
|
|
```
|
|||
|
|
目标:
|
|||
|
|
模型大小: 240MB → 60MB (-75%)
|
|||
|
|
推理加速: 2-3倍
|
|||
|
|
累计精度损失: <3%
|
|||
|
|
|
|||
|
|
步骤:
|
|||
|
|
Day 1: PTQ快速验证
|
|||
|
|
Day 2-5: QAT训练5 epochs
|
|||
|
|
Day 6: 最终评估
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📋 分析后的下一步
|
|||
|
|
|
|||
|
|
### 查看分析结果
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 查看最新分析
|
|||
|
|
ANALYSIS_DIR=$(ls -td analysis_results/analysis_* | head -1)
|
|||
|
|
|
|||
|
|
# 查看模型复杂度
|
|||
|
|
cat $ANALYSIS_DIR/model_complexity.txt
|
|||
|
|
|
|||
|
|
# 查看优化建议
|
|||
|
|
cat $ANALYSIS_DIR/optimization_recommendations.md
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 准备剪枝工具
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 安装torch-pruning(如果需要)
|
|||
|
|
pip install torch-pruning
|
|||
|
|
|
|||
|
|
# 或使用PyTorch内置剪枝
|
|||
|
|
# 已包含在环境中
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 创建剪枝配置
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
# configs/nuscenes/det/.../multitask_pruned.yaml
|
|||
|
|
|
|||
|
|
# 基于原始配置,修改:
|
|||
|
|
pruning:
|
|||
|
|
enabled: true
|
|||
|
|
method: 'l1' # L1范数剪枝
|
|||
|
|
target_params: 60000000 # 目标60M参数
|
|||
|
|
|
|||
|
|
# 各模块剪枝比例
|
|||
|
|
ratios:
|
|||
|
|
encoders.camera: 0.30 # 剪枝30%
|
|||
|
|
decoder: 0.25
|
|||
|
|
heads.object: 0.15
|
|||
|
|
heads.map: 0.15
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🚀 立即执行的命令
|
|||
|
|
|
|||
|
|
### Step 1: 运行分析(现在)
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd /workspace/bevfusion
|
|||
|
|
|
|||
|
|
# 启动分析
|
|||
|
|
bash 开始模型分析.sh
|
|||
|
|
|
|||
|
|
# 等待完成(2-5分钟)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Step 2: 查看结果
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 找到最新分析目录
|
|||
|
|
ANALYSIS_DIR=$(ls -td analysis_results/analysis_* | head -1)
|
|||
|
|
|
|||
|
|
# 查看关键信息
|
|||
|
|
echo "=== 总体统计 ==="
|
|||
|
|
cat $ANALYSIS_DIR/model_complexity.txt | grep -A 6 "总体统计"
|
|||
|
|
|
|||
|
|
echo -e "\n=== 模块分布 ==="
|
|||
|
|
cat $ANALYSIS_DIR/model_complexity.txt | grep -A 15 "各模块参数统计"
|
|||
|
|
|
|||
|
|
echo -e "\n=== 优化建议 ==="
|
|||
|
|
cat $ANALYSIS_DIR/model_complexity.txt | grep -A 10 "优化建议"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Step 3: 准备剪枝(今天晚些时候)
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 安装剪枝库(如需要)
|
|||
|
|
pip install torch-pruning
|
|||
|
|
|
|||
|
|
# 检查安装
|
|||
|
|
python -c "import torch_pruning as tp; print(tp.__version__)"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📊 并行执行(不影响训练)
|
|||
|
|
|
|||
|
|
**当前状态**:
|
|||
|
|
- ✅ Stage 1训练运行中(GPU 0-3)
|
|||
|
|
- ✅ 模型分析可并行(CPU或GPU 4-7)
|
|||
|
|
- ✅ 互不影响
|
|||
|
|
|
|||
|
|
**资源使用**:
|
|||
|
|
```
|
|||
|
|
GPU 0-3: Stage 1训练
|
|||
|
|
GPU 4-7: 空闲(可选用于分析)
|
|||
|
|
CPU: 模型分析(主要)
|
|||
|
|
内存: ~2GB(分析需要)
|
|||
|
|
磁盘: ~100MB(结果文件)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🎯 今天的目标
|
|||
|
|
|
|||
|
|
### 必须完成
|
|||
|
|
- [ ] 运行模型分析
|
|||
|
|
- [ ] 查看分析结果
|
|||
|
|
- [ ] 理解优化策略
|
|||
|
|
- [ ] 准备剪枝工具
|
|||
|
|
|
|||
|
|
### 可选完成
|
|||
|
|
- [ ] 安装torch-pruning
|
|||
|
|
- [ ] 创建剪枝配置模板
|
|||
|
|
- [ ] 阅读剪枝文档
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📚 相关文档
|
|||
|
|
|
|||
|
|
### 已创建文档
|
|||
|
|
1. **模型优化启动计划.md** - 完整优化计划
|
|||
|
|
2. **模型优化_快速开始.md** - 快速开始(本文档)
|
|||
|
|
3. **EPOCH23_训练中的评估结果.md** - Baseline数据
|
|||
|
|
|
|||
|
|
### 分析脚本
|
|||
|
|
1. **开始模型分析.sh** - 一键启动脚本
|
|||
|
|
2. **tools/analysis/model_complexity_simple.py** - 复杂度分析
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📞 常见问题
|
|||
|
|
|
|||
|
|
### Q: 分析需要多久?
|
|||
|
|
**A**: 2-5分钟。主要是加载模型和统计参数,不需要GPU。
|
|||
|
|
|
|||
|
|
### Q: 会影响训练吗?
|
|||
|
|
**A**: 不会。分析主要使用CPU,不占用训练GPU。
|
|||
|
|
|
|||
|
|
### Q: 分析结果准确吗?
|
|||
|
|
**A**: 参数统计是准确的。FLOPs和推理时间是估算值。
|
|||
|
|
|
|||
|
|
### Q: 下一步做什么?
|
|||
|
|
**A**: 查看分析结果,准备剪枝工具,明天开始剪枝实施。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🎉 总结
|
|||
|
|
|
|||
|
|
### 当前进度
|
|||
|
|
- ✅ 跳过评估(已有baseline数据)
|
|||
|
|
- ✅ 创建优化计划和工具
|
|||
|
|
- ⏳ 准备运行模型分析
|
|||
|
|
- ⏳ Stage 1训练继续进行
|
|||
|
|
|
|||
|
|
### 立即行动
|
|||
|
|
```bash
|
|||
|
|
# 一行命令启动
|
|||
|
|
cd /workspace/bevfusion && bash 开始模型分析.sh
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 今天结束前
|
|||
|
|
1. 完成模型分析
|
|||
|
|
2. 理解优化策略
|
|||
|
|
3. 准备剪枝工具
|
|||
|
|
4. 明天开始剪枝实施
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**状态**: 🚀 准备就绪
|
|||
|
|
**时间**: 5分钟启动
|
|||
|
|
**影响**: 零影响训练
|
|||
|
|
**下一步**: 运行分析脚本
|
|||
|
|
|