ray.rllib.algorithms.algorithm_config.AlgorithmConfig.env_runners#

AlgorithmConfig.env_runners(*, env_runner_cls: type | None = <ray.rllib.utils.from_config._NotProvided object>, num_env_runners: int | None = <ray.rllib.utils.from_config._NotProvided object>, num_envs_per_env_runner: int | None = <ray.rllib.utils.from_config._NotProvided object>, num_cpus_per_env_runner: int | None = <ray.rllib.utils.from_config._NotProvided object>, num_gpus_per_env_runner: int | float | None = <ray.rllib.utils.from_config._NotProvided object>, custom_resources_per_env_runner: dict | None = <ray.rllib.utils.from_config._NotProvided object>, validate_env_runners_after_construction: bool | None = <ray.rllib.utils.from_config._NotProvided object>, sample_timeout_s: float | None = <ray.rllib.utils.from_config._NotProvided object>, env_to_module_connector: ~typing.Callable[[~typing.Any | gymnasium.Env], ConnectorV2 | ~typing.List[ConnectorV2]] | None = <ray.rllib.utils.from_config._NotProvided object>, module_to_env_connector: ~typing.Callable[[~typing.Any | gymnasium.Env, RLModule], ConnectorV2 | ~typing.List[ConnectorV2]] | None = <ray.rllib.utils.from_config._NotProvided object>, add_default_connectors_to_env_to_module_pipeline: bool | None = <ray.rllib.utils.from_config._NotProvided object>, add_default_connectors_to_module_to_env_pipeline: bool | None = <ray.rllib.utils.from_config._NotProvided object>, episode_lookback_horizon: int | None = <ray.rllib.utils.from_config._NotProvided object>, use_worker_filter_stats: bool | None = <ray.rllib.utils.from_config._NotProvided object>, update_worker_filter_stats: bool | None = <ray.rllib.utils.from_config._NotProvided object>, compress_observations: bool | None = <ray.rllib.utils.from_config._NotProvided object>, rollout_fragment_length: int | str | None = <ray.rllib.utils.from_config._NotProvided object>, batch_mode: str | None = <ray.rllib.utils.from_config._NotProvided object>, explore: bool | None = <ray.rllib.utils.from_config._NotProvided object>, exploration_config: dict | None = <ray.rllib.utils.from_config._NotProvided object>, create_env_on_local_worker: bool | None = <ray.rllib.utils.from_config._NotProvided object>, sample_collector: ~typing.Type[~ray.rllib.evaluation.collectors.sample_collector.SampleCollector] | None = <ray.rllib.utils.from_config._NotProvided object>, enable_connectors: bool | None = <ray.rllib.utils.from_config._NotProvided object>, remote_worker_envs: bool | None = <ray.rllib.utils.from_config._NotProvided object>, remote_env_batch_wait_ms: float | None = <ray.rllib.utils.from_config._NotProvided object>, preprocessor_pref: str | None = <ray.rllib.utils.from_config._NotProvided object>, observation_filter: str | None = <ray.rllib.utils.from_config._NotProvided object>, enable_tf1_exec_eagerly: bool | None = <ray.rllib.utils.from_config._NotProvided object>, sampler_perf_stats_ema_coef: float | None = <ray.rllib.utils.from_config._NotProvided object>, num_rollout_workers=-1, num_envs_per_worker=-1, validate_workers_after_construction=-1, ignore_worker_failures=-1, recreate_failed_workers=-1, restart_failed_sub_environments=-1, num_consecutive_worker_failures_tolerance=-1, worker_health_probe_timeout_s=-1, worker_restore_timeout_s=-1, synchronize_filter=-1) AlgorithmConfig[源代码]#

设置推出工作者的配置。

参数:
  • env_runner_cls – 用于环境回放(数据收集)的 EnvRunner 类。

  • num_env_runners – 为并行采样创建的 EnvRunner 角色的数量。将其设置为 0 将强制在本地 EnvRunner(主进程或在使用 Tune 时的算法角色)中进行采样。

  • num_envs_per_env_runner – 每个 EnvRunner 要遍历的环境数量(按向量计算)。这使得在通过 RLModule 推理计算动作时可以进行批处理,从而可以提高推理瓶颈工作负载的性能。

  • num_cpus_per_env_runner – 每个 EnvRunner 分配的 CPU 数量。

  • num_gpus_per_env_runner – 每个 EnvRunner 分配的 GPU 数量。这可以是分数。通常只有在你的环境本身需要 GPU(例如,它是一个 GPU 密集型视频游戏),或者模型推理异常昂贵时才需要。

  • custom_resources_per_env_runner – 每个 EnvRunner 分配的自定义 Ray 资源。

  • sample_timeout_s – 调用远程 EnvRunner 工作线程上的 sample() 的超时时间(以秒为单位)。超过此时间的工人的结果(剧集列表)将被丢弃。仅在使用与更新步骤同步采样的算法时使用(例如 PPO 或 DQN)。对于任何异步采样的算法(如 APPO 或 IMPALA)不相关。

  • sample_collector – 仅适用于旧版API堆栈。SampleCollector类用于收集和检索环境、模型和采样器数据。覆盖SampleCollector基类以实现您自己的收集/缓冲/检索逻辑。

  • create_env_on_local_worker – 当 num_env_runners > 0 时,驱动程序(local_worker;worker-idx=0)不需要环境。这是因为它不需要采样(由 remote_workers 完成;worker-indices > 0)也不需要评估(由评估工作者完成;见下文)。

  • enable_connectors – 使用基于连接器的环境运行器,以便在代理和动作连接器中完成所有对观察的预处理和对动作的后处理。

  • env_to_module_connector – 一个接受 Env 作为输入参数并返回一个 env-to-module ConnectorV2(可能是一个管道)对象的可调用对象。

  • module_to_env_connector – 一个可调用对象,接受 Env 和 RLModule 作为输入参数,并返回一个 module-to-env ConnectorV2(可能是一个管道)对象。

  • add_default_connectors_to_env_to_module_pipeline – 如果为 True(默认),RLlib 的 EnvRunners 将自动将默认的 env-to-module ConnectorV2 组件添加到 EnvToModulePipeline 中。这些组件自动执行添加观察和状态(在有状态模块的情况下)、代理到模块的映射、批处理以及转换为张量数据。只有在你确切知道自己在做什么的情况下,才应该将此设置设置为 False。请注意,此设置仅在使用新 API 堆栈(包括新的 EnvRunner 类)时相关。

  • add_default_connectors_to_module_to_env_pipeline – 如果为 True(默认),RLlib 的 EnvRunners 将自动将默认的 module-to-env ConnectorV2 部分添加到 ModuleToEnvPipeline 中。这些自动执行移除额外的时间等级(如果适用,在有状态模块的情况下)、模块到代理的解映射、解批处理(到列表)以及从张量数据到 numpy 的转换。只有在你确切知道自己在做什么的情况下,才应该将此设置设置为 False。请注意,此设置仅在使用新 API 堆栈(包括新的 EnvRunner 类)时相关。

  • episode_lookback_horizon – 在新块(用于同一集)生成以继续在稍后时间采样时,从前一集块中保留的数据量(以时间步长为单位)。这个值越大,env-to-module连接器将能够回溯更多时间,并根据这些信息编译RLModule输入数据。例如,如果您的自定义env-to-module连接器(以及您的自定义RLModule)需要前10个奖励作为输入,则必须将此值设置为至少10。

  • use_worker_filter_stats – 是否使用 EnvRunnerGroup 中的工作线程来更新中央过滤器(由本地工作线程持有)。如果为 False,则不会使用来自工作线程的统计数据并将其丢弃。

  • update_worker_filter_stats – 是否将中心过滤器的更新(由本地工作者持有)推送到远程工作者的过滤器。将其设置为 True 可能在评估配置中有用,以便禁用使用评估轨迹来同步用于训练的中心过滤器。

  • rollout_fragment_length – 在采样过程中将片段分成每个片段的多个步骤。从EnvRunners收集此大小的轨迹,并将其组合成一个更大的`train_batch_size`批次用于学习。例如,给定rollout_fragment_length=100和train_batch_size=1000:1. RLlib从rollout workers收集10个每个100步的片段。2. 这些片段被连接起来,我们执行一个SGD的epoch。当每个worker使用多个环境时,片段大小乘以`num_envs_per_env_runner`。这是因为我们正在从多个环境并行收集步骤。例如,如果num_envs_per_env_runner=5,那么EnvRunners将以5*100 = 500步的块返回经验。这里的数据流可能因算法而异。例如,PPO进一步将训练批次分成小批次以进行多epoch SGD。将`rollout_fragment_length`设置为“auto”,让RLlib计算一个精确的值以匹配给定的批次大小。

  • batch_mode – 如何使用 EnvRunner(s) 构建单独的批次。来自分布式 EnvRunner 的批次通常会被连接起来形成训练批次。注意,下面的“步骤”可以有不同的含义(环境步骤或代理步骤),并且取决于 count_steps_by 设置,可以通过 AlgorithmConfig.multi_agent(count_steps_by=..) 进行调整:1) “截断剧集”:每次调用 EnvRunner.sample() 将返回一个最多为 rollout_fragment_length * num_envs_per_env_runner 大小的批次。如果后处理不改变批次大小,批次将正好是 rollout_fragment_length * num_envs 大小。为了满足这个大小要求,剧集可能会被截断。此模式保证批次大小均匀,但由于未来回报必须在截断边界处进行估计,因此会增加方差。2) “完成剧集”:每次调用 EnvRunner.sample() 将返回一个至少为 rollout_fragment_length * num_envs_per_env_runner 大小的批次。剧集不会被截断,但多个剧集可能会被打包在一个批次中以满足(最小)批次大小。注意,当 num_envs_per_env_runner > 1 时,剧集步骤将被缓冲直到剧集完成,因此批次可能包含大量非策略数据。

  • explore – 默认探索行为,如果在 compute_action(s) 中传递 explore=None。设置为 False 以禁用探索行为(例如,用于评估)。

  • exploration_config – 指定 Exploration 对象配置的字典。

  • remote_worker_envs – 如果使用 num_envs_per_env_runner > 1,是否在远程进程中创建这些新环境,而不是在同一个工作进程中。这会增加开销,但如果你的环境在步进/重置时需要大量时间(例如,对于《星际争霸》),这可能是有意义的。请谨慎使用;开销是显著的。

  • remote_env_batch_wait_ms – 远程工作者在轮询环境时等待的超时时间。0(当至少一个环境准备好时继续)是一个合理的默认值,但最佳值可以通过测量您的环境步骤/重置和模型推理性能来获得。

  • validate_env_runners_after_construction – 是否在创建每个远程 EnvRunner 后验证其健康状态。

  • preprocessor_pref – 是否默认使用“rllib”或“deepmind”预处理器。设置为None则不使用预处理器。在这种情况下,模型将不得不处理来自环境的可能是复杂的观察结果。

  • observation_filter – 逐元素观察过滤器,可以是“NoFilter”或“MeanStdFilter”。

  • compress_observations – 是否在回放期间收集的SampleBatches中对单个观察结果进行LZ4压缩。

  • enable_tf1_exec_eagerly – 显式地告诉推出工作器启用 TF 急切执行。这在框架为 “torch” 但需要恢复 TF2 策略以进行评估或基于联盟的目的时非常有用。

  • sampler_perf_stats_ema_coef – 如果指定,性能统计数据为指数移动平均(EMAs)。这是新数据点对平均值贡献的系数。默认值为 None,此时使用简单的全局平均值。EMA 更新规则为:updated = (1 - ema_coef) * old + ema_coef * new

返回:

这个更新的 AlgorithmConfig 对象。