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 环境指南了解更多详细信息。
学习率 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_runners
和 num_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=True
时 EnvRunner
会调用 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 文件夹概述页面。
每个示例脚本通常会介绍一个新的配置设置,或者向您展示如何通过设置某些配置选项并向实验中添加自定义代码来实现特定的自定义功能。