[ PROMPT_NODE_27434 ]
vectorized_envs
[ SKILL_DOCUMENTATION ]
# Stable Baselines3 中的向量化环境
本文档提供了关于 Stable Baselines3 中用于高效并行训练的向量化环境的全面信息。
## 概述
向量化环境将多个独立的环境实例堆叠到一个单一的环境中,以批处理方式处理动作和观测。你不再是每次与一个环境交互,而是同时与 `n` 个环境进行交互。
**优势:**
- **速度:** 并行执行显著加快了训练速度
- **样本效率:** 更快地收集更多样化的经验
- **必要性:** 适用于帧堆叠(Frame stacking)和归一化包装器(Normalization wrappers)
- **适用场景:** 同策略算法(PPO, A2C)
## VecEnv 类型
### DummyVecEnv
在当前 Python 进程中按顺序执行环境。
python
from stable_baselines3.common.vec_env import DummyVecEnv
# 方法 1: 使用 make_vec_env
from stable_baselines3.common.env_util import make_vec_env
env = make_vec_env("CartPole-v1", n_envs=4, vec_env_cls=DummyVecEnv)
# 方法 2: 手动创建
def make_env():
def _init():
return gym.make("CartPole-v1")
return _init
env = DummyVecEnv([make_env() for _ in range(4)])
**何时使用:**
- 轻量级环境(CartPole,简单网格)
- 当多进程开销大于计算时间时
- 调试(更容易跟踪错误)
- 单线程环境
**性能:** 无实际并行(顺序执行)。
### SubprocVecEnv
在单独的进程中执行每个环境,实现真正的并行。
python
from stable_baselines3.common.vec_env import SubprocVecEnv
from stable_baselines3.common.env_util import make_vec_env
env = make_vec_env("CartPole-v1", n_envs=8, vec_env_cls=SubprocVecEnv)
**何时使用:**
- 计算昂贵的环境(物理模拟,3D 游戏)
- 当环境计算时间足以抵消多进程开销时
- 当你需要真正的并行执行时
**重要提示:** 使用 forkserver 或 spawn 时,需要将代码包装在 `if __name__ == "__main__":` 中:
python
if __name__ == "__main__":
env = make_vec_env("CartPole-v1", n_envs=8, vec_env_cls=SubprocVecEnv)
model = PPO("MlpPolicy", env)
model.learn(total_timesteps=100000)
**性能:** 跨 CPU 核心的真正并行。
## 使用 make_vec_env 快速设置
创建向量化环境的最简单方法:
python
from stable_baselines3.common.env_util import make_vec_env
from stable_baselines3.comm