Files
MAGAIL4AutoDrive/Env/QUICK_START.md

5.5 KiB
Raw Permalink Blame History

快速使用指南

🚀 已实现的性能优化

根据您的测试结果原始版本FPS只有15左右现已进行了全面优化。


📊 性能瓶颈分析

您的CPU是12600KF10核20线程但利用率不到20%,原因是:

  1. 激光雷达计算瓶颈51辆车 × 100个激光束 = 每帧5100次射线检测
  2. 红绿灯检测低效:遍历所有车道进行几何计算
  3. Python GIL限制:单线程执行,无法利用多核
  4. 计算串行化:所有车辆依次处理,没有并行

🎯 推荐使用方案

方案1极速单环境推荐新手

python Env/run_multiagent_env_fast.py

优化内容:

  • 激光束100束 → 52束减少48%计算量)
  • 激光雷达缓存每3帧才重新计算
  • 红绿灯检测优化:避免遍历所有车道
  • 关闭所有渲染和调试

预期性能: 30-60 FPS2-4倍提升


方案2多进程并行推荐训练

python Env/run_multiagent_env_parallel.py

优化内容:

  • 同时运行10个独立环境充分利用10核CPU
  • 每个环境应用所有单环境优化
  • CPU利用率可达90-100%

预期性能: 300-600 steps/s20-40倍总吞吐量


方案3可视化调试

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渲染配置可选

config = {
    "use_render": True,
    # GPU会自动用于渲染
}

策略网络GPU加速推荐

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快速测试环境

python Env/run_multiagent_env_fast.py

单环境,快速验证功能

场景2大规模数据收集

python Env/run_multiagent_env_parallel.py

多进程,最大化数据收集速度

场景3RL训练

# 推荐使用Ray RLlib等框架它们内置了并行环境管理
# 或者修改parallel版本保存经验到replay buffer

场景4调试/可视化

python Env/run_multiagent_env_visual.py

带渲染,可以看到车辆运行


🔍 性能监控

所有版本都内置了性能统计,运行时会显示:

Step 100: FPS = 45.23, 车辆数 = 51, 平均步时间 = 22.10ms

⚙️ 高级优化选项

调整激光雷达缓存频率

编辑 run_multiagent_env_fast.py

env.lidar_cache_interval = 3  # 改为5可进一步提速但观测会更旧

调整并行进程数

编辑 run_multiagent_env_parallel.py

num_workers = 10  # 改为更少的进程数(如果内存不足)

进一步减少激光束

编辑 scenario_env.py_get_all_obs() 函数:

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

祝训练顺利!🎉