AlgorithmConfig API#

注意

Ray 2.40 默认使用 RLlib 的新 API 栈。Ray 团队已基本完成将算法、示例脚本和文档迁移到新代码库的工作。

如果您仍在使用旧的 API 栈,请参阅新 API 栈迁移指南了解如何迁移的详细信息。

RLlib 的 AlgorithmConfig API 是用于配置和构建 RLlib Algorithm 的自动验证和类型安全的网关。

本质上,您首先创建 AlgorithmConfig 的一个实例,然后调用其某些方法来设置各种配置选项。RLlib 在其所有代码部分使用以下符合 black 标准的格式。

请注意,您可以将多个方法调用链接在一起,包括构造函数

from ray.rllib.algorithms.algorithm_config import AlgorithmConfig

config = (
    # Create an `AlgorithmConfig` instance.
    AlgorithmConfig()
    # Change the learning rate.
    .training(lr=0.0005)
    # Change the number of Learner actors.
    .learners(num_learners=2)
)

提示

出于值检查和类型安全的原因,您不应该直接在您的 AlgorithmConfig 中设置属性,而应该始终通过适当的方法进行设置

# WRONG!
config.env = "CartPole-v1"  # <- don't set attributes directly

# CORRECT!
config.environment(env="CartPole-v1")  # call the proper method

算法特定的配置类#

实践中您不会直接使用基础 AlgorithmConfig 类,而总是使用其算法特定的子类,例如 PPOConfig。每个子类都有自己的一组 additional arguments 用于 training() 方法。

通常,您应该选择与您希望运行学习实验的 Algorithm 相匹配的特定 AlgorithmConfig 子类。例如,如果您想使用 IMPALA 作为您的算法,则应导入其特定的 config 类

from ray.rllib.algorithms.impala import IMPALAConfig

config = (
    # Create an `IMPALAConfig` instance.
    IMPALAConfig()
    # Specify the RL environment.
    .environment("CartPole-v1")
    # Change the learning rate.
    .training(lr=0.0004)
)

要更改算法特定设置(此处针对 IMPALA),也使用 training() 方法

# Change an IMPALA-specific setting (the entropy coefficient).
config.training(entropy_coeff=0.01)

您可以通过调用 build_algo() 方法直接从 config 对象构建 IMPALA 实例

# Build the algorithm instance.
impala = config.build_algo()

任何已构建 Algorithm 实例中存储的 config 对象是您原始 config 的一个副本。这使您可以进一步修改原始 config 对象并构建另一个 algorithm 实例,而不会影响之前构建的实例

# Further alter the config without affecting the previously built IMPALA object ...
config.training(lr=0.00123)
# ... and build a new IMPALA from it.
another_impala = config.build_algo()

如果您正在使用 Ray Tune,请将您的 AlgorithmConfig 实例传递给 Tuner 的构造函数

from ray import tune

tuner = tune.Tuner(
    "IMPALA",
    param_space=config,  # <- your RLlib AlgorithmConfig object
    ..
)
# Run the experiment with Ray Tune.
results = tuner.fit()

通用配置设置#

大多数配置设置是通用的,适用于 RLlib 的所有 Algorithm 类。以下部分将引导您了解用户在深入研究其他配置设置和开始超参数微调之前应密切关注的最重要的配置设置。

RL 环境#

要配置您的算法针对哪个 RL 环境进行训练,请使用 environment() 方法的 env 参数

config.environment("Humanoid-v5")

请参阅此RL 环境指南了解更多详细信息。

提示

安装 AtariMuJoCo 即可运行 RLlib 的所有调优示例

pip install "gymnasium[atari,accept-rom-license,mujoco]"

学习率 lr#

通过 training() 方法的 lr 参数设置更新模型的学习率

config.training(lr=0.0001)

训练批次大小#

通过 training() 方法的 train_batch_size_per_learner 参数设置每个 Learner actor 的训练批次大小

config.training(train_batch_size_per_learner=256)

注意

您可以通过将 train_batch_size_per_learner 乘以 (num_learners or 1) 来计算总的有效训练批次大小。或者,您也可以直接检查配置的 total_train_batch_size 属性的值

config.training(train_batch_size_per_learner=256)
config.learners(num_learners=2)
print(config.total_train_batch_size)  # expect: 512 = 256 * 2

折扣因子 gamma#

通过 training() 方法的 gamma 参数设置 RL 折扣因子

config.training(gamma=0.995)

使用 num_env_runnersnum_learners 进行扩展#

通过 env_runners() 方法的 num_env_runners 参数设置用于收集训练样本的 EnvRunner actor 数量

config.env_runners(num_env_runners=4)

# Also use `num_envs_per_env_runner` to vectorize your environment on each EnvRunner actor.
# Note that this option is only available in single-agent setups.
#  The Ray Team is working on a solution for this restriction.
config.env_runners(num_envs_per_env_runner=10)

通过 learners() 方法的 num_learners 参数设置用于更新模型的 Learner actor 数量。这应该与您可用于训练的 GPU 数量相对应。

config.learners(num_learners=2)

禁用 explore 行为#

通过 env_runners() 方法的 explore 参数切换开启/关闭探索行为。要计算动作,当 explore=TrueEnvRunner 会调用 RLModule 上的 forward_exploration(),当 explore=False 时会调用 forward_inference()。默认值为 explore=True

# Disable exploration behavior.
# When False, the EnvRunner calls `forward_inference()` on the RLModule to compute
# actions instead of `forward_exploration()`.
config.env_runners(explore=False)

Rollout 长度#

通过 rollout_fragment_length 参数设置每个 EnvRunner 针对其每个 RL 环境副本进行的 timestep 数量。将此参数传递给 env_runners() 方法。请注意,某些算法(例如 PPO)会根据训练批次大小EnvRunner actor 数量以及每个 EnvRunner 中的环境数量自动设置此值。

config.env_runners(rollout_fragment_length=50)

所有可用方法及其设置#

除了前面描述的最常见的设置之外,AlgorithmConfig 类及其算法特定的子类还提供了许多其他配置选项。

为了使结构更具语义性,AlgorithmConfig 将其各种配置设置分组到以下类别中,每个类别由其自己的方法表示

要熟悉 RLlib 的众多不同配置选项,您可以浏览 RLlib 的 examples 文件夹或查看此examples 文件夹概述页面

每个示例脚本通常会介绍一个新的配置设置,或者向您展示如何通过设置某些配置选项并向实验中添加自定义代码来实现特定的自定义功能。