ray.rllib.algorithms.algorithm_config.AlgorithmConfig.训练#
- AlgorithmConfig.training(*, gamma: float | None = <ray.rllib.utils.from_config._NotProvided object>, lr: float | ~typing.List[~typing.List[int | float]] | None = <ray.rllib.utils.from_config._NotProvided object>, grad_clip: float | None = <ray.rllib.utils.from_config._NotProvided object>, grad_clip_by: str | None = <ray.rllib.utils.from_config._NotProvided object>, train_batch_size: int | None = <ray.rllib.utils.from_config._NotProvided object>, train_batch_size_per_learner: int | None = <ray.rllib.utils.from_config._NotProvided object>, model: dict | None = <ray.rllib.utils.from_config._NotProvided object>, optimizer: dict | None = <ray.rllib.utils.from_config._NotProvided object>, max_requests_in_flight_per_sampler_worker: int | None = <ray.rllib.utils.from_config._NotProvided object>, learner_class: ~typing.Type[Learner] | None = <ray.rllib.utils.from_config._NotProvided object>, learner_connector: ~typing.Callable[[RLModule], ConnectorV2 | ~typing.List[ConnectorV2]] | None = <ray.rllib.utils.from_config._NotProvided object>, add_default_connectors_to_learner_pipeline: bool | None = <ray.rllib.utils.from_config._NotProvided object>, learner_config_dict: ~typing.Dict[str, ~typing.Any] | None = <ray.rllib.utils.from_config._NotProvided object>) AlgorithmConfig [源代码]#
设置与训练相关的配置。
- 参数:
gamma – 指定马尔可夫决策过程的折扣因子的浮点数。
lr – 学习率(浮点数)或学习率调度表,格式为 [[时间步, 学习率值], [时间步, 学习率值], …]。如果是调度表,中间的时间步将被分配为线性插值的学习率值。调度表配置的第一个条目必须从时间步 0 开始,即:[[0, 初始值], […]]。注意:如果您需要 a) 多个优化器(每个 RLModule),b) 非 Adam 类型的优化器,c) 非线性插值的分段调度表,或 d) 指定优化器的构造函数参数(如 Adam 的 epsilon),则必须重写 Learner 的
configure_optimizer_for_module()
方法,并自行处理学习率调度。grad_clip – 如果为 None,则不会应用梯度裁剪。否则,根据
grad_clip_by
的设置,grad_clip
的(浮点)值将产生以下效果:如果grad_clip_by=value
:将在区间 [-grad_clip
, +`grad_clip`] 内单独裁剪所有计算的梯度。如果grad_clip_by=norm
,将分别计算每个权重/偏置梯度张量的 L2 范数,然后裁剪所有梯度,使得这些 L2 范数不超过grad_clip
。张量的 L2 范数通过以下方式计算:sqrt(SUM(w0^2, w1^2, ..., wn^2))
,其中 w[i] 是张量的元素(无论张量的形状如何)。如果grad_clip_by=global_norm
,将分别计算每个权重/偏置梯度张量的 L2 范数的平方,将所有这些平方的 L2 范数在所有给定的梯度张量(例如,要更新的整个模块)上求和,对总和进行平方根运算,然后裁剪所有梯度,使得这个全局 L2 范数不超过给定值。一组张量(例如 W 和 V)的全局 L2 范数通过以下方式计算:sqrt[SUM(w0^2, w1^2, ..., wn^2) + SUM(v0^2, v1^2, ..., vm^2)]
,其中 w[i] 和 v[j] 是张量 W 和 V 的元素(无论这些张量的形状如何)。grad_clip_by – 参见
grad_clip
以了解此设置对梯度裁剪的影响。允许的值为value
、norm
和global_norm
。train_batch_size_per_learner – 每个 Learner 工作者的训练批次大小。此设置仅适用于新的 API 堆栈。可以通过
config.resources( num_learners=...)
设置 Learner 工作者的数量。总的有效批次大小为num_learners
xtrain_batch_size_per_learner
,并且可以通过属性AlgorithmConfig.total_train_batch_size
访问它。train_batch_size – 训练批次大小,如果适用。在新API栈上时,不应再使用此设置。相反,应使用
train_batch_size_per_learner`(结合 `num_learners
)。model – 传递给策略模型的参数。有关可用模型选项的完整列表,请参见 models/catalog.py。TODO: 提供 ModelConfig 对象而不是字典。
optimizer – 传递给策略优化器的参数。当
enable_rl_module_and_learner=True
时,此设置不使用。max_requests_in_flight_per_sampler_worker – 每个采样工作者的最大并发请求数。更多详情请参见FaultTolerantActorManager类。在运行大型样本批次实验时,调整这些值非常重要,因为存在对象存储可能填满的风险,导致对象溢出到磁盘。这可能会使任何异步请求变得非常慢,从而使您的实验运行缓慢。您可以通过在头节点上调用ray memory,并使用ray仪表板来检查实验期间的对象存储。如果您发现对象存储正在填满,请减少并发远程请求的数量,或在实验的时间步长中启用压缩。
learner_class – 用于(分布式)更新 RLModule 的
Learner
类。仅在enable_rl_module_and_learner=True
时使用。learner_connector – 一个可调用对象,接受环境观察空间和环境动作空间作为输入,并返回一个学习者 ConnectorV2(可能是一个管道)对象。
add_default_connectors_to_learner_pipeline – 如果为 True(默认),RLlib 的学习者将自动为 LearnerPipeline 添加默认的 Learner ConnectorV2 组件。这些自动执行以下操作:a) 如果用户提供的连接器组件尚未完成,则将来自剧集的观察结果添加到训练批次中;b) 如果 RLModule 是有状态的,则向训练批次添加时间等级,对数据进行零填充,并添加正确的状态输入,前提是用户提供的连接器组件尚未完成此操作;c) 如果用户提供的连接器组件尚未完成,则将所有其他信息(动作、奖励、终止等)添加到训练批次中。只有在你确切知道自己在做什么的情况下,才应将此设置设置为 False。请注意,此设置仅在使用新 API 堆栈(包括新的 EnvRunner 类)时相关。
learner_config_dict – 一个字典,用于插入学习者实例中可访问的任何设置。这应仅在与自定义学习者子类一起使用时使用,并且当用户不想仅为向基础算法的配置类添加几个设置而编写额外的
AlgorithmConfig
子类时。
- 返回:
这个更新的 AlgorithmConfig 对象。