Files
MAGAIL4AutoDrive/Env/QUICK_START.md

242 lines
5.5 KiB
Markdown
Raw Permalink 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.

# 快速使用指南
## 🚀 已实现的性能优化
根据您的测试结果原始版本FPS只有15左右现已进行了全面优化。
---
## 📊 性能瓶颈分析
您的CPU是12600KF10核20线程但利用率不到20%,原因是:
1. **激光雷达计算瓶颈**51辆车 × 100个激光束 = 每帧5100次射线检测
2. **红绿灯检测低效**:遍历所有车道进行几何计算
3. **Python GIL限制**:单线程执行,无法利用多核
4. **计算串行化**:所有车辆依次处理,没有并行
---
## 🎯 推荐使用方案
### 方案1极速单环境推荐新手
```bash
python Env/run_multiagent_env_fast.py
```
**优化内容:**
- ✅ 激光束100束 → 52束减少48%计算量)
- ✅ 激光雷达缓存每3帧才重新计算
- ✅ 红绿灯检测优化:避免遍历所有车道
- ✅ 关闭所有渲染和调试
**预期性能:** 30-60 FPS2-4倍提升
---
### 方案2多进程并行推荐训练⭐⭐
```bash
python Env/run_multiagent_env_parallel.py
```
**优化内容:**
- ✅ 同时运行10个独立环境充分利用10核CPU
- ✅ 每个环境应用所有单环境优化
- ✅ CPU利用率可达90-100%
**预期性能:** 300-600 steps/s20-40倍总吞吐量
---
### 方案3可视化调试
```bash
python Env/run_multiagent_env_visual.py
```
**说明:** 保留渲染功能FPS约15仅用于调试
---
## 🔧 关于GPU加速
### GPU能否加速MetaDrive
**简短回答有限支持主要瓶颈不在GPU**
**详细说明:**
1. **物理计算(主要瓶颈)** ❌ 不支持GPU
- MetaDrive使用Bullet物理引擎只在CPU运行
- 激光雷达射线检测也在CPU
- 这是FPS低的主要原因
2. **图形渲染** ✅ 支持GPU
- Panda3D会自动使用GPU渲染
- 但我们训练时关闭了渲染所以GPU无用武之地
3. **策略网络** ✅ 支持GPU
- 可以把Policy模型放到GPU上
- 但环境本身仍在CPU
### GPU渲染配置可选
```python
config = {
"use_render": True,
# GPU会自动用于渲染
}
```
### 策略网络GPU加速推荐
```python
import torch
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
policy_model = PolicyNet().to(device)
# 批量推理
obs_tensor = torch.tensor(obs_list).to(device)
actions = policy_model(obs_tensor)
```
**详细说明请看:** `GPU_ACCELERATION.md`
---
## 📈 性能对比
| 版本 | FPS | CPU利用率 | 改进 |
|------|-----|-----------|------|
| 原始版本 | 15 | 20% | - |
| 极速版本 | 30-60 | 30-50% | 2-4x |
| 并行版本 | 30-60/env | 90-100% | 总吞吐20-40x |
---
## 💡 使用建议
### 场景1快速测试环境
```bash
python Env/run_multiagent_env_fast.py
```
单环境,快速验证功能
### 场景2大规模数据收集
```bash
python Env/run_multiagent_env_parallel.py
```
多进程,最大化数据收集速度
### 场景3RL训练
```bash
# 推荐使用Ray RLlib等框架它们内置了并行环境管理
# 或者修改parallel版本保存经验到replay buffer
```
### 场景4调试/可视化
```bash
python Env/run_multiagent_env_visual.py
```
带渲染,可以看到车辆运行
---
## 🔍 性能监控
所有版本都内置了性能统计,运行时会显示:
```
Step 100: FPS = 45.23, 车辆数 = 51, 平均步时间 = 22.10ms
```
---
## ⚙️ 高级优化选项
### 调整激光雷达缓存频率
编辑 `run_multiagent_env_fast.py`
```python
env.lidar_cache_interval = 3 # 改为5可进一步提速但观测会更旧
```
### 调整并行进程数
编辑 `run_multiagent_env_parallel.py`
```python
num_workers = 10 # 改为更少的进程数(如果内存不足)
```
### 进一步减少激光束
编辑 `scenario_env.py``_get_all_obs()` 函数:
```python
lidar = self.engine.get_sensor("lidar").perceive(
num_lasers=20, # 从40进一步减少到20
distance=20, # 从30减少到20米
...
)
```
---
## 🎓 为什么CPU利用率低
### 原因分析:
1. **单线程瓶颈**
- Python GIL限制
- MetaDrive主循环是单线程的
- 即使有10个核心也只用1个
2. **I/O等待**
- 等待渲染完成(如果开启)
- 等待磁盘读取数据
3. **计算不均衡**
- 某些计算很重(激光雷达),某些很轻
- CPU在重计算之间有空闲
### 解决方案:
**已实现:** 多进程并行(`run_multiagent_env_parallel.py`
- 每个进程占用1个核心
- 10个进程可充分利用10核CPU
- CPU利用率可达90-100%
---
## 📚 相关文档
- `PERFORMANCE_OPTIMIZATION.md` - 详细的性能优化指南
- `GPU_ACCELERATION.md` - GPU加速的完整说明
---
## ❓ 常见问题
### Q: 为什么关闭渲染后FPS还是只有20
A: 主要瓶颈是激光雷达计算,不是渲染。请使用 `run_multiagent_env_fast.py`
### Q: GPU能加速训练吗
A: 环境模拟在CPU但策略网络可以在GPU上训练。
### Q: 如何最大化CPU利用率
A: 使用 `run_multiagent_env_parallel.py` 多进程版本。
### Q: 会影响观测精度吗?
A: 激光束减少会略微降低精度但实践中影响很小。缓存会让观测滞后1-2帧。
### Q: 如何恢复原始配置?
A: 使用 `run_multiagent_env_visual.py` 或修改配置文件中的参数。
---
## 🚦 下一步
1. 先测试 `run_multiagent_env_fast.py`,验证性能提升
2. 如果满意,用于日常训练
3. 需要大规模训练时,使用 `run_multiagent_env_parallel.py`
4. 考虑将策略网络迁移到GPU
祝训练顺利!🎉