242 lines
5.5 KiB
Markdown
242 lines
5.5 KiB
Markdown
# 快速使用指南
|
||
|
||
## 🚀 已实现的性能优化
|
||
|
||
根据您的测试结果,原始版本FPS只有15左右,现已进行了全面优化。
|
||
|
||
---
|
||
|
||
## 📊 性能瓶颈分析
|
||
|
||
您的CPU是12600KF(10核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 FPS(2-4倍提升)
|
||
|
||
---
|
||
|
||
### 方案2:多进程并行(推荐训练)⭐⭐
|
||
```bash
|
||
python Env/run_multiagent_env_parallel.py
|
||
```
|
||
|
||
**优化内容:**
|
||
- ✅ 同时运行10个独立环境(充分利用10核CPU)
|
||
- ✅ 每个环境应用所有单环境优化
|
||
- ✅ CPU利用率可达90-100%
|
||
|
||
**预期性能:** 300-600 steps/s(20-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
|
||
```
|
||
多进程,最大化数据收集速度
|
||
|
||
### 场景3:RL训练
|
||
```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
|
||
|
||
祝训练顺利!🎉
|
||
|