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