优化车辆生成位置偏差问题,新增红绿灯信息采集方法

This commit is contained in:
2025-10-21 13:31:18 +08:00
parent 1974aaee03
commit 22ce995916
23 changed files with 2712 additions and 23 deletions

241
Env/QUICK_START.md Normal file
View File

@@ -0,0 +1,241 @@
# 快速使用指南
## 🚀 已实现的性能优化
根据您的测试结果原始版本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
祝训练顺利!🎉