Ray 词汇表#

在此页面上,您可以找到 Ray 文档中使用的重要术语列表,按字母顺序排列。

Action space#

强化学习环境的属性。强化学习环境中的动作被允许具有的形状和数据类型。示例:一个强化学习环境,其中智能体可以向上、向下、向左或向右移动,其动作空间可能是 Discrete(4)(整数值 0、1、2 或 3)。一个强化学习环境,其中智能体可以对关节施加介于 -1.0 和 1.0 之间的扭矩,其动作空间可能是 Box(-1.0, 1.0, (1,), float32)(介于 -1.0 和 1.0 之间的单个浮点值)。

Actor#

Ray Actor 是类的一个远程实例,本质上是一个有状态的服务。了解更多关于 Ray Actor 的信息

Actor task#

Ray Actor 方法的调用。有时我们也称之为任务。

Ray Agent#

运行在每个 Ray 节点上的守护进程。它有多种功能,例如收集本地节点上的指标和安装运行时环境。

Agent#

强化学习环境中的一个行动实体。一个强化学习环境可能包含一个(单智能体强化学习)或多个(多智能体强化学习)行动智能体。同一环境中的不同智能体可能具有不同的观测空间和动作空间、不同的奖励函数,并在不同的时间步行动。

Algorithm#

一个类,它包含了训练一个或多个强化学习智能体的谁/何时/何地/如何。用户直接与 Algorithm 实例交互以训练他们的智能体(这是 RLlib 最高层的用户面向 API)。

Asynchronous execution#

一种执行模型,其中后续任务可以在并行中开始执行,无需等待先前任务完成。Ray 任务和 Actor 任务都是异步执行的。

Asynchronous sampling#

采样是在强化学习环境中 rollout(玩)episode 的过程,从而收集训练数据(观测、动作和奖励)。在异步采样设置中,Ray Actor 在后台运行采样并将收集到的样本发送回主驱动脚本。驱动频繁检查这些“就绪”数据,然后触发中心模型的学习更新。因此,采样和学习同时发生。请注意,正因为如此,即使在 on-policy 算法中,用于创建样本(动作计算)的策略也可能略微落后于中心学习的策略模型。

Autoscaler#

Ray 组件,根据集群上运行的应用请求的资源,通过添加和删除 Ray 节点来扩缩 Ray 集群。

Autoscaling#

自动扩缩 Ray 集群的过程。

Backend#

一个类,包含特定深度学习框架(例如 Torch, TensorFlow)的初始化和清理逻辑,用于设置 Ray Train 内置训练器 的分布式数据并行训练。

Batch format#

Ray Data 表示数据批次的方式。

Dataset.iter_batches()Dataset.map_batches() 等方法中设置 batch_format 以指定批次类型。

>>> import ray
>>> dataset = ray.data.range(10)
>>> next(iter(dataset.iter_batches(batch_format="numpy", batch_size=5)))
{'id': array([0, 1, 2, 3, 4])}
>>> next(iter(dataset.iter_batches(batch_format="pandas", batch_size=5)))
   id
0   0
1   1
2   2
3   3
4   4

要了解更多关于批次格式的信息,请阅读配置批次格式

Batch size#

模型训练上下文中的批次大小是指用于计算和应用一次梯度更新到模型权重的 数据点数量。

Block#

数据的一个处理单元。Dataset 由一组块组成。

在底层,Ray Data 将行分区到一组分布式数据块中。这使得它可以并行执行操作。

与作为用户面向对象的批次不同,块是内部抽象。

Placement Group Bundle#

必须在单个 Ray 节点上保留的资源集合。了解更多

Checkpoint#

Ray Train Checkpoint 是一个通用接口,用于跨不同的 Ray 组件和库访问数据和模型。Checkpoint 的数据可以表示为本地(磁盘上)存储上的目录,也可以表示为外部存储(例如,云存储)上的目录,还可以表示为内存中的字典。了解 更多

Ray Client#

Ray Client 是一个 API,用于将 Python 脚本连接到远程 Ray 集群。实际上,它允许您像在本地机器上运行 Ray 一样利用远程 Ray 集群。了解更多

Ray Cluster#

Ray 集群是一组连接到公共 Ray 头节点的 Worker 节点。Ray 集群可以是固定大小的,也可以根据集群上运行的应用请求的资源自动扩缩。

Connector#

Connector 对来自数据集或强化学习环境的数据执行转换,然后将数据传递给模型。Connector 是灵活的组件,可以替换,这样模型很容易重用,并且无需为不同的数据转换重新训练。

Tune Config#

这是与 Tune Trial 对应的超参数集合。从超参数搜索空间采样将产生一个 config。

Ray Dashboard#

Ray 的内置 Dashboard 是一个 Web 界面,提供指标、图表和其他功能,帮助 Ray 用户理解和调试 Ray 应用。

Dataset (对象)#

一个产生分布式数据块序列的类。

Dataset 公开了用于大规模读取、转换和消费数据的方法。

要了解更多关于 Dataset 及其支持的操作的信息,请阅读Datasets API 参考

Deployment#

Deployment 是 Ray Serve 中可以处理流量的 Actor 组。Deployment 被定义为一个类,包含许多选项,包括 Deployment 的“副本”数量,每个副本在运行时将映射到一个 Ray Actor。对 Deployment 的请求会在其副本之间进行负载均衡。

Ingress Deployment#

在 Ray Serve 中,“ingress” deployment 是接收和响应入站用户流量的 deployment。它处理 HTTP 解析和响应格式化。在模型组合的情况下,它也会将请求分派给其他 deployment,以执行数据预处理和 ML 模型的正向传递等操作。

Driver#

“Driver” 是运行主脚本的进程的名称,该脚本启动所有其他进程。对于 Python,这通常是您使用 python ... 启动的脚本。

Tune Driver#

Tune driver 是在启动 Tune 实验的节点上运行的主事件循环。此事件循环根据集群资源调度 trials,在远程 Trainable Actor 上执行训练,并处理来自这些 Actor 的结果和 checkpoint。

Distributed Data-Parallel#

分布式数据并行 (DDP) 训练作业将机器学习训练扩展到多个节点,每个节点处理完整数据集的一个分片。每个 worker 都持有一份模型权重副本,并且更新权重的常见策略是“镜像策略”,其中每个 worker 始终持有完全相同的权重,计算出的梯度经过平均后应用于所有 worker。

对于 N 个 worker 节点和大小为 D 的数据集,每个 worker 仅负责 D / N 个数据点。如果每个 worker 节点在大小为 B 的批次上计算梯度,则 DDP 训练的有效批次大小为 N * B

Environment#

世界或模拟,一个或多个强化学习智能体必须在其中学习如何根据给定的奖励函数最优地行动。环境包括观测空间、奖励函数、动作空间、状态转移函数以及初始状态(重置后)的分布。

通过环境播放包含一个或多个时间步的 episodes,以生成和收集用于学习的样本。这些样本包含每个时间步一个 [observation, action, reward, next observation] 的 4 元组。

Episode#

强化学习环境时间步的后续序列,每个时间步都是一个 4 元组:[observation, action, reward, next observation]。Episode 可以以 terminated- 或 truncated-flags 为 True 结束。一个 episode 通常跨越一个或多个智能体的多个时间步。Episode 在强化学习中是一个重要的概念,因为“最优智能体行为”被定义为选择最大化一个 episode 过程中所有收到的个体奖励总和的动作。

Trial Executor#

一个内部的 Ray Tune 组件,它管理每个 trial 相应远程 Trainable Actor 的资源管理和执行。Trial Executor 的职责包括启动训练、checkpointing 和恢复远程任务。

Experiment#

Ray Tune 或 Ray Train Experiment 是一个或多个训练作业的集合,这些作业可能对应于不同的超参数配置。这些实验通过 Tuner APITrainer API 启动。

Fault tolerance#

Ray Train 和 Tune 中的容错包括 experiment 级别的恢复和 trial 级别的恢复。Experiment 级别的恢复是指在实验训练过程中因集群级故障中断时恢复所有 trials。Trial 级别的恢复是指在 trial 遇到运行时错误(例如 OOM)时恢复单个 trials。

Framework#

RLlib Algorithm 中用于模型、损失和优化器的深度学习框架。RLlib 目前支持 PyTorch 和 TensorFlow。

GCS / Global Control Service#

Ray 集群的集中式元数据服务器。它运行在 Ray 头节点上,具有管理节点成员身份和 Actor 目录等功能。它也称为全局控制存储。

Head node#

除了 Worker 节点上运行的进程外,还运行额外集群级进程(如 GCS 和 API 服务器)的节点。Ray 集群只有一个头节点。

HPO#

超参数优化 (HPO) 是为学习算法选择一组最优超参数的过程。超参数可以是用于控制学习过程(例如,学习率)、定义模型架构(例如,隐藏层数量)或影响数据预处理的参数。对于 Ray Train,超参数还可以包括计算横向扩展参数,例如分布式训练 worker 的数量。

Job#

Ray job 是一个打包好的 Ray 应用,可以在(远程)Ray 集群上执行。了解更多

Lineage#

对于 Ray 对象,这是一组最初执行以生成该对象的任务。如果由于节点故障导致对象的值丢失,Ray 可能会尝试通过重新执行对象的 lineage 来恢复该值。

Model#

一个具有可训练参数的函数逼近器(例如,神经网络),可以通过算法在可用数据或从强化学习环境收集的数据上进行训练。参数通常随机初始化(未学习状态)。在训练过程中,可以创建模型的 checkpoint,这样在学习过程关闭或崩溃后,训练可以从最新的权重恢复,而无需从头开始重新学习。训练过程完成后,模型可以使用 Ray Serve 部署到生产环境中进行推理。

Multi-agent#

表示一个强化学习环境设置,其中几个(多于一个)智能体在同一环境中行动,并学习相同或不同的最优行为。多智能体设置中不同智能体之间的关系可能是对抗性的(相互对抗)、合作性的(尝试达到共同目标)或中立的(智能体并不真正关心其他智能体的行动)。可用于多智能体训练的神经网络模型架构范围从“独立”(每个智能体训练自己的独立模型),到“部分共享”(例如,某些智能体可能共享其价值函数,因为它们有共同的目标),再到“相同”(所有智能体在同一模型上训练)。

Namespace#

Namespace 是 jobs 和命名 actor 的逻辑分组。当 actor 被命名时,其名称在 namespace 内必须唯一。如果未指定 namespace,Ray 会将您的 job 放在匿名 namespace 中。

Node#

Ray 节点是 Ray 集群的一部分的物理或虚拟机。另请参见 头节点

Object#

应用程序的值。这些是任务返回的值或通过 ray.put 创建的值。

Object ownership#

所有权是用于确定某个 ObjectRef(以及创建该值的任务)的元数据应存储在哪里的概念。如果 worker 调用 foo.remote()ray.put(),它拥有返回的 ObjectRef 的元数据,例如引用计数和位置信息。如果一个对象的 owner 死亡而另一个 worker 尝试获取该值,它将收到 OwnerDiedError 异常。

Object reference#

指向应用程序值的一个指针,该值可以存储在集群中的任何地方。可以通过调用 foo.remote()ray.put() 来创建。如果使用 foo.remote(),则返回的 ObjectRef 也是一个 future。

Object store#

一个分布式内存数据存储,用于存储 Ray 对象。

Object spilling#

对象存储中的对象一旦容量用尽,就会溢出到外部存储。这使得内存密集型分布式应用可以进行核外数据处理。由于数据需要写入磁盘,这会带来性能损失。

Observation#

强化学习环境的全部或部分状态,智能体在每个时间步看到(可以访问)的状态。完全可观测环境产生的观测包含足够的信息来充分推断环境当前底层状态。这种状态也称为“马尔可夫”。具有马尔可夫观测的环境示例包括国际象棋或 2D 游戏,其中玩家在每一帧都能看到游戏状态的全部。部分可观测(或非马尔可夫)环境产生的观测不包含足够的信息来推断确切的底层状态。这里的示例是一个头部装有摄像头的机器人,摄像头面向前方。机器人在迷宫中行走,但从单个摄像头帧可能不知道它身后目前有什么。

Offline data#

预先在强化学习环境中收集并以某种数据格式(例如 JSON)存储的数据。离线数据可用于训练强化学习智能体。这些数据可能由非强化学习/机器学习系统生成,例如一个简单的决策脚本。此外,当从离线数据训练时,强化学习算法将无法在新的情况下探索新的动作,因为与环境的所有交互都已在过去发生(在训练之前已记录)。

Offline RL#

强化学习 (RL) 的一个子领域,其中专门的离线强化学习算法学习如何为环境中的智能体计算最优动作,而无需与该环境进行实时交互。相反,用于训练的数据已经预先收集(甚至可能由非强化学习/机器学习系统收集)。这与监督学习设置非常相似。离线强化学习算法的示例包括 MARWIL、CQL 和 CRR。

Off-Policy#

一种强化学习算法类型。在离线策略算法中,用于计算强化学习环境中的动作(以生成训练数据)的策略可能与正在优化的策略不同。离线策略算法的示例包括 DQN、SAC 和 DDPG。

On-Policy#

一种强化学习算法类型。在在线策略算法中,用于计算强化学习环境中的动作(以生成训练数据)的策略必须与正在优化的策略完全相同(始终匹配神经网络权重)。在线策略算法的示例包括 PPO、APPO 和 IMPALA。

OOM (Out of Memory)#

如果应用在单个节点上使用过多内存,Ray 可能会内存不足。在这种情况下,Ray OOM killer 将启动并杀死 worker 进程以释放内存。

Placement group#

Placement group 允许用户原子地预留跨多个节点的资源组(即 gang scheduling)。然后它们可以用于调度 Ray 任务和 Actor,尽可能紧密打包以实现局部性 (PACK),或分散开 (SPREAD)。Placement group 通常用于 gang-scheduling Actor,但也支持任务。了解更多

Policy#

一个(神经网络)模型,将某个智能体的强化学习环境观测映射到其在强化学习环境中的下一个动作。

Predictor#

一个 用于 输入 数据 使用 训练好的 模型 执行 推理(预测)的接口。

Preprocessor#

一个用于预处理 Dataset 以进行训练和推理(预测)的接口。Preprocessor 可以是有状态的,因为它们可以在训练数据集上进行拟合,然后用于转换训练和评估数据集。

Ray application#

源自同一脚本的一组 Ray 任务、Actor 和对象。

Raylet#

运行在每个 Ray 节点上的系统进程。它负责调度和对象管理。

Replica#

Replica 是处理给定 Serve deployment 请求的单个 actor。一个 deployment 可以由许多 replicas 组成,可以通过 num_replicas 进行静态配置,也可以使用自动扩缩进行动态配置。

Resource (逻辑和物理)#

Ray 资源是任务和 Actor 使用的逻辑资源(例如 CPU、GPU)。它不一定与 Ray 集群运行的机器的物理资源一一对应。了解更多

Reward#

强化学习环境中每个智能体在执行每个动作后收到的单个浮点值。智能体在强化学习环境中被定义为最优行动,当在一个 episode 内收到的所有奖励总和最大化时。

请注意,奖励可能会延迟(不会立即告诉智能体动作是好是坏)或稀疏(值通常为零),这使得智能体更难学习。

Rollout#

通过依次执行动作来推进强化学习环境中的一个 episode(带有一个或多个强化学习智能体)的过程。在 rollouts 期间,算法应收集环境产生的 4 元组 [观测、动作、奖励、下一个观测],以便(稍后或同时)从这些数据中学习如何更优地行动。

Rollout Worker#

RLlib Algorithm 中的组件,负责在强化学习环境中推进和收集观测和奖励。环境中不同智能体的动作由 Algorithm 的策略模型计算。分布式算法可能拥有多个 Rollout Worker 作为 Ray Actor 运行,以扩展数据收集过程,从而加速强化学习训练。

RolloutWorker 用作 @ray.remote Actor,以并行收集和返回来自环境或离线文件的样本。一个 RLlib Algorithm 通常在其 EnvRunnerGroup(位于 self.workers 下)中有 num_workersEnvRunner 实例,外加一个“本地” EnvRunner(非 @ray.remote)。

根据其评估配置设置,一个额外的 EnvRunnerGroup,包含用于评估的 EnvRunner 实例,可能存在于 Algorithm(位于 self.evaluation_workers 下)中。

Runtime environment#

运行时环境定义了 Python 脚本运行所需的依赖项,例如文件、包、环境变量。它在运行时动态安装在集群上,可以为 Ray job 或特定的 Actor 和任务指定。了解更多

Remote Function#

参见 Task

Remote Class#

参见 Actor

(Ray) Scheduler#

Ray 组件,将执行单元 (Task/Actor) 分配给 Ray 节点。

Search Space#

超参数可能值的定义。可以由常量、离散值、函数分布组成。这也称为“参数空间”(Tuner 中的 param_space)。

Search algorithm#

搜索算法建议由 Tune 评估的新超参数配置。默认的搜索算法是随机搜索,其中每个新配置都独立于前一个配置。更复杂的搜索算法(例如使用贝叶斯优化的算法)将拟合模型以预测将产生最佳模型的超参数配置,同时还探索可能超参数的空间。许多流行的搜索算法内置于 Tune 中,其中大多数是与其他库的集成。

Serve application#

应用是 Serve 集群中的升级单元。

应用由一个或多个 deployment 组成。其中一个 deployment 被认为是“ingress” deployment,所有入站流量都在这里处理。

可以通过其配置的 route_prefix 通过 HTTP 调用应用。

DeploymentHandle#

DeploymentHandle 是用于向 Serve deployment 发出请求的 Python API。通过将一个绑定的 Serve deployment 传递给另一个 deployment 的构造函数来定义 handle。然后在运行时可以使用该引用发出请求。这用于组合多个 deployment 以进行模型组合。

Session#
  • Ray Train/Tune session:如果使用 Ray Train 进行数据并行分布式训练,Tune session 在实验执行层,Train session 在数据并行训练层。

    Session 允许访问元数据,例如正在运行哪个 trial、总 worker 数量的信息以及当前 worker 的 rank。Session 也是单个 Trainable 可以与整个 Tune experiment 交互的接口。这包括报告单个 trial 的指标、保存/加载 checkpoint 以及为每个 Train worker 检索相应的 dataset 分片等用途。

  • Ray 集群:在某些情况下,session 也意味着 Ray Cluster。例如,Ray 集群的日志存储在 session_xxx/logs/ 下。

Spillback#

任务调用者通过首先向该请求的首选 raylet 发送资源请求来调度任务。如果首选 raylet 选择不授予本地资源,它也可能“Spillback”并向调用者返回远程 raylet 的地址,调用者应在该处重试资源请求。

State#

强化学习智能体与之交互的环境状态。

Synchronous execution#

如果任务 A 必须在任务 B 开始之前完成,则任务 A 和 B 同步执行。例如,如果您在启动远程任务 task.remote() 后立即调用 ray.get,您将以同步执行方式运行,因为这将等待任务完成程序才会继续。

Synchronous sampling#

采样 worker 同步进行工作。所有 worker 都必须完成收集新批次样本后,训练才能进入下一轮迭代。

Task#

远程函数调用。这是一个单一的函数调用,它在调用者不同的进程上执行,并且可能在不同的机器上执行。任务可以是无状态的(一个 @ray.remote 函数)或有状态的(一个 @ray.remote 类的方法 - 参见下面的 Actor)。任务与调用者异步执行:.remote() 调用立即返回一个或多个 ObjectRefs(futures),这些 futures 可用于检索返回值。参见 Actor task

Trainable#

Trainable 是 Ray Tune 用于执行自定义训练逻辑的接口。用户定义的 Trainables 将配置作为输入,可以运行用户定义的训练代码以及自定义指标报告和 checkpointing。

Trainables 有很多类型。最常用的是 function trainable API,它是一个简单的 Python 函数,包含模型训练逻辑和指标报告。Tune 还公开了一个 class trainable API,允许您将训练、checkpointing 和恢复实现为不同的方法。

Ray Tune 将每个 trial 与其自己的 Trainable 相关联——Trainable 实际上是执行训练的那个。Trainable 是一个远程 Actor,可以放置在 Ray 集群中的任何节点上。

Trainer#

Trainer 是配置单个分布式训练作业的顶层 API。有针对不同框架的内置 Trainers,如 PyTorch、Tensorflow 和 XGBoost。每个 trainer 共享一个通用接口,并定义框架特定的配置和入口点。Trainer 的主要工作是协调 N 个分布式训练 worker 并设置必要的通信后端以供这些 worker 通信(例如,用于共享计算出的梯度)。

Trainer configuration#

Trainer 可以通过各种方式进行配置。一些配置在所有 trainer 中共享,例如 RunConfig(配置实验存储等)和 ScalingConfig(配置训练 worker 数量以及每个 worker 所需资源)。其他配置是 trainer 框架特有的。

Training iteration#

输入数据达到预定义 yield 点(例如,时间或已消耗数据)的部分训练过程,用于长期运行训练作业的 checkpointing。一个完整的训练 epoch 可以包含多个 training iteration。 .. TODO: RLlib

Training epoch#

输入数据集的完整训练过程。通常,模型训练通过大小为 B 的批次迭代完整数据集,其中在每个批次上计算梯度,然后将其作为更新应用于模型权重。通过多次训练同一数据集,训练作业可以包含多个 epoch。

Training step#

Algorithm 类中 RLlib 特有的方法,包含 RL 算法的核心逻辑。通常包括经验收集(通过采样或离线数据)、优化步骤、学习到的模型权重再分配。此方法的具体细节取决于算法和配置。

Transition#

一个 (observation, action, reward, next observation) 四元组。Transition 代表智能体在环境中的一步。

Trial#

Ray Tune 实验中的一次训练运行。如果您运行多个 trials,每个 trial 通常对应于不同的 config(一组超参数)。

Trial scheduler#

运行 Ray Tune job 时,scheduler 将决定如何为 trials 分配资源。在最常见的情况下,此资源是时间 - trial scheduler 决定何时运行哪些 trials。某些内置 scheduler(如 Asynchronous Hyperband (ASHA))会提前停止表现不佳的 trials,而其他 scheduler(如 Population Based Training (PBT))将使表现不佳的 trials 复制表现最佳 trial 的超参数配置和模型权重并继续训练。

Tuner#

Tuner 是 Ray Tune 的顶层 API,用于配置和运行包含许多 trials 的实验。

Worker process / worker#

运行用户定义任务和 Actor 的进程。