ray.rllib.算法.算法配置.AlgorithmConfig.评估#
- AlgorithmConfig.evaluation(*, evaluation_interval: int | None = <ray.rllib.utils.from_config._NotProvided object>, evaluation_duration: int | str | None = <ray.rllib.utils.from_config._NotProvided object>, evaluation_duration_unit: str | None = <ray.rllib.utils.from_config._NotProvided object>, evaluation_sample_timeout_s: float | None = <ray.rllib.utils.from_config._NotProvided object>, evaluation_parallel_to_training: bool | None = <ray.rllib.utils.from_config._NotProvided object>, evaluation_force_reset_envs_before_iteration: bool | None = <ray.rllib.utils.from_config._NotProvided object>, evaluation_config: ~ray.rllib.algorithms.algorithm_config.AlgorithmConfig | dict | None = <ray.rllib.utils.from_config._NotProvided object>, off_policy_estimation_methods: ~typing.Dict | None = <ray.rllib.utils.from_config._NotProvided object>, ope_split_batch_by_episode: bool | None = <ray.rllib.utils.from_config._NotProvided object>, evaluation_num_env_runners: int | None = <ray.rllib.utils.from_config._NotProvided object>, custom_evaluation_function: ~typing.Callable | None = <ray.rllib.utils.from_config._NotProvided object>, always_attach_evaluation_results=-1, evaluation_num_workers=-1) AlgorithmConfig [源代码]#
设置配置的评估设置。
- 参数:
evaluation_interval – 在每次
evaluation_interval
训练迭代时进行评估。评估统计数据将在“evaluation”指标键下报告。设置为 None(或 0)以禁用评估。evaluation_duration – 每次
evaluation_interval
运行评估的持续时间。持续时间的单位可以通过evaluation_duration_unit
设置为“episodes”(默认)或“timesteps”。如果在evaluation_num_env_runners > 1
设置中使用多个评估工作线程(EnvRunners),则运行的 episodes/timesteps 数量将在这之间分配。如果evaluation_parallel_to_training=True
,可以使用特殊值“auto”。这是在尝试尽可能节省评估时间时的推荐方式。算法将通过评估工作线程运行尽可能多的 timesteps,同时不超过并行运行的训练步骤,从而不会在训练或评估工作线程上浪费任何空闲时间。当使用此设置(evaluation_duration="auto"
)时,强烈建议同时设置evaluation_interval=1
和evaluation_force_reset_envs_before_iteration=True
。evaluation_duration_unit – 用于计算评估持续时间的单位。可以是“episodes”(默认)或“timesteps”。请注意,如果
evaluation_duration="auto"
,则此设置将被忽略。evaluation_sample_timeout_s – 在以下情况下,评估工作者的超时时间(以秒为单位)用于采样一个完整的情节:
evaluation_duration != auto
且evaluation_duration_unit=episode
。超过此时间后,用户将收到警告并获得如何解决问题的指示。evaluation_parallel_to_training – 是否在调用
Algorithm.training_step()
时使用线程并行运行评估。默认=False。例如,对于 evaluation_interval=1 -> 在每次调用Algorithm.train()
时,Algorithm.training_step()
和Algorithm.evaluate()
调用将并行运行。请注意,此设置虽然非常高效,因为它不会浪费额外的时间进行评估,但会导致评估结果比训练结果滞后一次迭代。这在选择一个好的检查点时非常重要。例如,如果第42次迭代报告了良好的评估episode_return_mean
,请注意这些结果是在第41次迭代训练的权重上取得的,因此您可能应该选择第41次迭代的检查点。evaluation_force_reset_envs_before_iteration – 是否在迭代评估步骤开始之前强制重置所有环境(即使它们尚未完成)。将其设置为 True(默认值)将确保评估结果不会被实际上(至少部分)使用较早权重集实现的剧情节统计数据所污染。请注意,此设置仅在新 API 堆栈 w/ EnvRunners 和 ConnectorV2 上受支持(
config.enable_rl_module_and_learner=True
和config.enable_env_runner_and_connector_v2=True
)。evaluation_config – 典型用法是将额外参数传递给评估环境创建者,并通过计算确定性动作来禁用探索。重要提示:策略梯度算法能够找到最优策略,即使这是一个随机的策略。在此处设置“explore=False”将导致评估工作线程不使用此最优策略!
off_policy_estimation_methods – 指定如何评估当前策略,以及任何可选的配置参数。这仅在读取离线经验时有效(“input”不是“sampler”)。可用键:{ope_method_name: {“type”: ope_type, …}},其中
ope_method_name
是用户定义的字符串,用于保存OPE结果,ope_type
可以是任何OffPolicyEstimator的子类,例如 ray.rllib.offline.estimators.is::ImportanceSampling 或您自己的自定义子类,或者是子类的完整类路径。您还可以在字典中添加额外的配置参数,传递给OffPolicyEstimator,例如 {“qreg_dr”: {“type”: DoublyRobust, “q_model_type”: “qreg”, “k”: 5}}ope_split_batch_by_episode – 是否使用 SampleBatch.split_by_episode() 在估计ope指标之前将输入批次按剧集分割。对于强盗问题,您应该将其设置为False以提高ope评估速度。对于强盗问题,不按剧集分割是可以的,因为每个记录已经是一个时间步。默认值为True。
evaluation_num_env_runners – 用于评估的并行 EnvRunner 数量。请注意,默认情况下此值设置为零,这意味着评估将在算法进程中运行(仅当
evaluation_interval
不为 0 或 None 时)。如果增加此值,将增加算法的 Ray 资源使用量,因为评估工作线程是与用于采样训练数据的 EnvRunner 分开创建的。custom_evaluation_function – 自定义评估方法。这必须是一个签名函数 (algo: Algorithm, eval_workers: EnvRunnerGroup) -> (metrics: dict, env_steps: int, agent_steps: int) (如果
enable_env_runner_and_connector_v2=True
,则为 metrics: dict),其中env_steps
和agent_steps
定义了评估迭代期间采样的步数。请参阅 Algorithm.evaluate() 方法以查看默认实现。算法保证在此函数被调用之前,所有评估工作器都具有最新的策略状态。
- 返回:
这个更新的 AlgorithmConfig 对象。