Ray 术语表#
在本页中,您可以找到在整个 Ray 文档中使用的重要术语列表,按字母顺序排列。
- 动作空间#
RL 环境的属性。在 RL 环境中,动作被允许具有的形状和数据类型。例如:在一个 RL 环境中,代理可以向上、向下、向左或向右移动,其动作空间可能是 ``Discrete(4)``(整数值 0、1、2 或 3)。在一个 RL 环境中,代理可以对关节施加 -1.0 到 1.0 之间的扭矩,其动作空间可能是 ``Box(-1.0, 1.0, (1,), float32)``(-1.0 到 1.0 之间的单个浮点值)。
- 演员#
Ray 演员是一个类的远程实例,本质上是一个有状态的服务。了解更多关于 Ray 演员。
- 演员任务#
Ray 角色方法的调用。有时我们简称它为任务。
- Ray 代理#
每个 Ray 节点上运行的守护进程进程。它具有多种功能,如收集本地节点的指标和安装运行时环境。
- 代理#
RL 环境中的一个行动实体。一个 RL 环境可能包含一个(单智能体 RL)或多个(多智能体 RL)行动智能体。同一环境中的不同智能体可能具有不同的观察和行动空间、不同的奖励函数,并在不同的时间步行动。
- 算法#
一个类,用于保存训练一个或多个强化学习代理的谁/何时/何地/如何信息。用户直接与算法实例交互以训练他们的代理(它是 RLlib 中最高级的用户界面 API)。
- 异步执行#
一种执行模型,其中后续任务可以开始并行执行,而无需等待先前任务完成。Ray 任务和参与者任务都是异步执行的。
- 异步采样#
采样是在RL环境中展开(播放)片段并因此收集训练数据(观察、动作和奖励)的过程。在异步采样设置中,Ray角色在后台进行采样,并将收集到的样本发送回主驱动脚本。驱动程序频繁检查此类“就绪”数据,然后触发中心模型学习更新。因此,采样和学习同时进行。需要注意的是,由于这一点,用于创建样本(动作计算)的策略/可能略微落后于中心学习的策略模型,即使在同策略算法中也是如此。
- 自动伸缩器#
一个Ray组件,根据运行在集群上的应用程序请求的资源,通过添加和移除Ray节点来扩展和缩减Ray集群。
- 自动扩展#
自动扩展和缩减 Ray 集群的过程。
- 后端#
一个包含特定深度学习框架(例如 Torch、TensorFlow)的初始化和拆卸逻辑的类,用于为 Ray Train 的内置训练器 设置分布式数据并行训练。
- 批处理格式#
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
要了解更多关于批处理格式的信息,请阅读 配置批处理格式。
- 批量大小#
在模型训练的上下文中,批量大小是指用于计算并应用一次梯度更新到模型权重的数据点数量。
- 块#
数据的处理单元。一个
Dataset
由一系列块组成。在底层,Ray Data 将行分割成一组分布式数据块。这使得它能够并行执行操作。
与面向用户的批处理对象不同,块是一个内部抽象。
- 放置组捆绑包#
必须在单个 Ray 节点上预留的资源集合。了解更多。
- 检查点#
Ray Train 检查点是一个用于在不同 Ray 组件和库之间访问数据和模型的通用接口。检查点的数据可以表示为本地(磁盘上)存储的目录、外部存储(例如,云存储)上的目录,以及内存中的字典。
了解更多
,- Ray 客户端#
Ray Client 是一个连接 Python 脚本到远程 Ray 集群的 API。实际上,它允许你像在本地机器上运行 Ray 一样利用远程 Ray 集群。了解更多。
- Ray 集群#
Ray 集群是一组连接到共同 Ray 头节点的 worker 节点。Ray 集群可以是固定大小的,也可以根据集群上运行的应用程序请求的资源自动扩展或缩减。
- 连接器#
连接器对从数据集或RL环境中输出的数据执行转换,这些数据即将传递给模型。连接器是灵活的组件,可以被替换,以便模型易于重用,并且不必为不同的数据转换重新训练。
- 调优配置#
这是一组对应于 Tune 试验的超参数。从超参数搜索空间中采样将生成一个配置。
- Ray 仪表盘#
Ray 的内置仪表板是一个 Web 界面,提供指标、图表和其他功能,帮助 Ray 用户理解和调试 Ray 应用程序。
- 数据集 (对象)#
一个生成一系列分布式数据块的类。
Dataset
提供了大规模读取、转换和消费数据的方法。要了解更多关于数据集及其支持的操作,请阅读 数据集API参考。
- 部署#
部署是 Ray Serve 中可以处理流量的参与者组。部署被定义为一个带有多个选项的类,包括部署的“副本”数量,每个副本在运行时将映射到一个 Ray 参与者。对部署的请求在其副本之间进行负载均衡。
- Ingress 部署#
在 Ray Serve 中,“入口”部署是接收并响应入站用户流量的部署。它处理 HTTP 解析和响应格式化。在模型组合的情况下,它还会将请求分发到其他部署以执行诸如预处理和 ML 模型的前向传递等操作。
- 驱动程序#
“Driver” 是运行主脚本的进程的名称,该脚本启动所有其他进程。对于Python,这通常是你使用
python ...
启动的脚本。- 调优驱动#
Tune 驱动程序是节点上发生的主要事件循环,该节点启动了 Tune 实验。此事件循环根据集群资源调度试验,在远程可训练的参与者上执行训练,并处理这些参与者返回的结果和检查点。
- 分布式数据并行#
分布式数据并行(DDP)训练任务将机器学习训练扩展到多个节点上进行,每个节点处理完整数据集的一个分片。每个工作节点都持有一份模型权重的副本,更新权重的常见策略是“镜像策略”,在这种策略中,每个工作节点在任何时候都持有完全相同的权重,计算出的梯度会被平均后应用于所有工作节点。
在有 N 个工作节点和大小为 D 的数据集的情况下,每个工作节点仅负责
D / N
个数据点。如果每个工作节点在一个大小为B
的批次上计算梯度,那么 DDP 训练的有效批次大小为N * B
。- 环境#
世界或模拟环境,在其中一个或多个强化学习代理必须学习如何在与给定奖励函数相关的方面表现最佳。环境由一个观察空间、一个奖励函数、一个动作空间、一个状态转移函数和一个初始状态分布(重置后)组成。
由一个或多个时间步组成的片段通过环境进行播放,以便生成和收集用于学习的样本。这些样本每个时间步包含一个
[观察, 动作, 奖励, 下一个观察]
的四元组。- 集数#
一系列后续的 RL 环境时间步,每个时间步是一个 4 元组:
[观察,动作,奖励,下一个观察]
。剧集可以在 terminated 或 truncated 标志为 True 时结束。一个剧集通常跨越一个或多个代理的多个时间步。剧集是 RL 中的一个重要概念,因为“最优代理行为”被定义为选择在剧集过程中最大化个体奖励总和的动作。- 试验执行器#
一个内部 Ray Tune 组件 ,负责管理资源分配和每个试验对应远程训练角色的执行。试验执行器的职责包括启动训练、检查点和恢复远程任务。
- 实验#
Ray Tune 或 Ray Train 实验是一个或多个训练作业的集合,这些作业可能对应不同的超参数配置。这些实验通过 Tuner API 和 Trainer API 启动。
- 容错#
Ray Train 和 Tune 中的容错机制包括实验级别和试验级别的恢复。实验级别的恢复指的是在实验因集群级故障中断训练时,恢复所有试验。试验级别的恢复指的是在试验遇到运行时错误(如OOM)时,恢复单个试验。
- 框架#
用于 RLlib 算法中模型、损失函数和优化器的深度学习框架。RLlib 目前支持 PyTorch 和 TensorFlow。
- GCS / 全局控制服务#
Ray 集群的集中式元数据服务器。它在 Ray 头节点上运行,具有管理节点成员资格和参与者目录等功能。它也被称为全局控制存储。
- 头节点#
一个运行额外集群级进程(如GCS和API服务器)的节点,除了那些在worker节点上运行的进程外。一个Ray集群只有一个头节点。
- HPO#
超参数优化 (HPO) 是为学习算法选择一组最优超参数的过程。超参数可以是用于控制学习过程(例如,学习率)、定义模型架构(例如,隐藏层数量)或影响数据预处理的参数。在 Ray Train 的情况下,超参数还可以包括计算处理扩展参数,例如分布式训练工作者的数量。
- 工作#
一个 ray 作业是一个可以在 (远程) Ray 集群上执行的打包 ray 应用程序。了解更多。
- 血统#
对于 Ray 对象,这是最初执行以生成该对象的一组任务。如果由于节点故障导致对象的值丢失,Ray 可能会尝试通过重新执行对象的谱系来恢复该值。
- 模型#
一个带有可训练参数(例如神经网络)的函数逼近器,可以通过算法在可用数据或从强化学习环境中收集的数据上进行训练。参数通常是随机初始化的(未学习状态)。在训练过程中,可以创建模型的检查点,以便在训练过程被关闭或崩溃后,可以从最新的权重继续训练,而不是从头开始重新学习。训练过程完成后,可以使用 Ray Serve 将模型部署到生产环境中进行推理。
- 多智能体#
表示一个RL环境设置,其中多个(不止一个)代理在同一环境中行动并学习相同或不同的最优行为。多代理设置中不同代理之间的关系可能是对抗性的(相互对抗)、合作的(试图达成共同目标)或中立的(代理不关心其他代理的行动)。可用于多代理训练的NN模型架构范围从“独立”(每个代理训练其自己的单独模型),到“部分共享”(例如,某些代理可能共享其价值函数,因为它们有共同目标),再到“相同”(所有代理在同一模型上训练)。
- 命名空间#
命名空间是作业和命名参与者的逻辑分组。当一个参与者被命名时,其名称在命名空间内必须是唯一的。当未指定命名空间时,Ray 会将您的作业放置在匿名命名空间中。
- 节点#
Ray 节点是一个 Ray 集群中的一部分物理或虚拟机器。另见 头节点。
- 对象#
应用程序值。这些值是由任务返回或通过
ray.put
创建的。- 对象所有权#
所有权是用于决定某个
ObjectRef``(及其创建值的任务)的元数据应存储在哪里的概念。如果一个工作进程调用 ``foo.remote()
或ray.put()
,它将拥有返回的ObjectRef
的元数据,例如引用计数和位置信息。如果对象的所有者死亡,而另一个工作进程尝试获取该值,它将收到一个OwnerDiedError
异常。- 对象引用#
指向应用程序值的指针,可以存储在集群的任何位置。可以通过调用
foo.remote()
或ray.put()
创建。如果使用foo.remote()
,则返回的ObjectRef
也是一个未来对象。- 对象存储#
一个用于存储 Ray 对象的分布式内存数据存储。
- 对象溢出#
对象存储中的对象在对象存储容量用完后会被溢出到外部存储。这使得内存密集型分布式应用程序能够进行核外数据处理。由于数据需要写入磁盘,因此会带来性能损失。
- 观察#
RL 环境的完整或部分状态,代理在每个时间步看到(有权访问)的状态。一个完全可观察的环境产生的观察结果包含足够的信息,以充分推断环境的当前底层状态。这样的状态也被称为“马尔可夫”。具有马尔可夫观察结果的环境示例是国际象棋或2D游戏,玩家可以在每个帧中看到游戏状态的全部内容。部分可观察(或非马尔可夫)环境产生的观察结果不包含足够的信息来推断确切的底层状态。一个例子是头部装有摄像头面向前方的机器人。机器人在迷宫中行走,但从单个摄像头帧可能不知道当前背后是什么。
- 离线数据#
在RL环境中预先收集的数据,并以某种数据格式(例如JSON)存储。离线数据可用于训练RL代理。这些数据可能由非RL/ML系统生成,例如简单的决策脚本。此外,当从离线数据训练时,RL算法将无法在新情况下探索新动作,因为与环境的全部交互已经在过去发生(在训练前记录)。
- 离线强化学习#
强化学习 (RL) 的一个子领域,其中专门的离线 RL 算法学习如何在没有能力与该环境实时交互的情况下,为环境中的代理计算最佳动作。相反,用于训练的数据已经预先收集(甚至可能由非 RL/ML 系统收集)。这与监督学习设置非常相似。离线 RL 算法的例子包括 MARWIL、CQL 和 CRR。
- 离策略#
一种强化学习算法。在离策略算法中,用于在强化学习环境中计算动作(生成训练数据)的策略可能与正在优化的策略不同。离策略算法的例子包括DQN、SAC和DDPG。
- On-Policy#
一种强化学习算法。在on-policy算法中,用于在RL环境中计算动作(生成训练数据)的策略必须与正在优化的策略完全相同(在所有时间匹配NN权重)。on-policy算法的例子包括PPO、APPO和IMPALA。
- OOM (内存不足)#
如果应用程序在单个节点上使用过多内存,Ray 可能会耗尽内存。在这种情况下,Ray OOM 杀手 将会启动并终止工作进程以释放内存。
- 放置组#
放置组允许用户在多个节点上原子性地保留一组资源(即,集体调度)。然后,它们可以用于调度 Ray 任务和演员,尽可能紧密地打包以实现局部性(PACK),或分散开来(SPREAD)。放置组通常用于集体调度演员,但也支持任务。了解更多。
- 政策#
一种(神经网络)模型,它将某个代理在强化学习环境中的观察映射到该代理在强化学习环境中的下一个动作。
- 预测器#
:class:`用于对输入数据进行推理<ray.train.predictor.Predictor>`(预测)的接口,使用训练好的模型。
- 预处理器#
用于预处理数据集以进行训练和推理(预测)的接口。预处理器可以是有状态的,因为它们可以在用于转换训练和评估数据集之前,在训练数据集上进行拟合。
- Ray 应用程序#
一组源自同一脚本的 Ray 任务、角色和对象。
- Raylet#
在每个 Ray 节点上运行的系统进程。它负责调度和对象管理。
- 副本#
副本是一个处理给定 Serve 部署请求的单一角色。一个部署可能包含多个副本,这些副本可以通过
num_replicas
静态配置,或者使用自动扩展动态配置。- 资源(逻辑和物理)#
Ray 资源是任务和参与者使用的逻辑资源(例如 CPU、GPU)。它不一定与 Ray 集群运行的机器的物理资源一一对应。了解更多。
- 奖励#
每个代理在RL环境中每次采取行动后接收到的单个浮点数值。当一个代理在一个情节中接收到的所有奖励的总和最大化时,该代理被定义为在RL环境中最佳行动。
请注意,奖励可能会有延迟(不会立即告诉代理某个动作是好是坏)或稀疏(通常值为零),这使得代理更难学习。
- 发布#
在RL环境中(有一个或多个RL代理)通过采取连续动作来推进一个情节的过程。在回放过程中,算法应收集环境产生的4元组[观察结果、动作、奖励、下一个观察结果],以便(稍后或同时)从这些数据中学习如何更优化地行为。
- 部署工作者#
RLlib 算法中的组件,负责在 RL 环境中推进和收集观察结果和奖励。环境中不同代理的动作由算法的策略模型计算。分布式算法可能会有多个 Rollout Worker 副本作为 Ray 角色运行,以扩展数据收集过程,从而加快 RL 训练。
RolloutWorkers 被用作
@ray.remote
角色来并行地从环境中或离线文件中收集和返回样本。一个 RLlibAlgorithm
通常有num_workers
个EnvRunner
实例,再加上一个单一的“本地”remote`
)在其EnvRunnerGroup
下的self.workers
中。根据其评估配置设置,在
Algorithm
中的self.evaluation_workers
下可能存在一个带有EnvRunner
实例的额外EnvRunnerGroup
用于评估。- 运行时环境#
运行时环境定义了Python脚本运行所需的依赖项,如文件、包、环境变量等。它是在集群运行时动态安装的,可以为Ray作业指定,也可以为特定的执行者和任务指定。了解更多。
- 远程函数#
参见 任务。
- 远程类#
参见 演员。
- (Ray)调度器#
一个将执行单元(任务/角色)分配给 Ray 节点的 Ray 组件。
- 搜索空间#
超参数可能值的定义。可以由常量、离散值、函数分布组成。这也被称为“参数空间”(在
Tuner
中为param_space
)。- 搜索算法#
搜索算法建议 Tune 评估新的超参数配置。默认的搜索算法是随机搜索,其中每个新的配置都与之前的配置无关。更复杂的搜索算法,如使用贝叶斯优化的算法,会拟合一个模型来预测将产生最佳模型的超参数配置,同时也会探索可能的超参数空间。许多流行的搜索算法都内置在 Tune 中,其中大多数是与其他库的集成。
- 提供应用程序#
应用程序是 Serve 集群中升级的单位。
一个应用程序由一个或多个部署组成。这些部署中的一个是被视为“入口”部署,所有入站流量都在这里处理。
应用程序可以通过其配置的
route_prefix
通过 HTTP 调用。- 部署句柄#
DeploymentHandle 是用于向 Serve 部署发出请求的 Python API。一个句柄是通过将一个绑定的 Serve 部署传递给另一个的构造函数来定义的。然后在运行时可以使用该引用发出请求。这用于组合多个部署以进行模型组合。
- 会话#
Ray Train/Tune 会话:在实验执行层的 Tune 会话和在数据并行训练层的 Train 会话,如果使用 Ray Train 运行数据并行分布式训练。
该会话允许访问元数据,例如正在运行的试验、工作者的总数以及当前工作者的排名。会话也是单个可训练对象与整个 Tune 实验交互的接口。这包括报告单个试验的指标、保存/加载检查点以及检索每个训练工作者的相应数据分片等用途。
一个 Ray 集群:在某些情况下,会话也意味着一个 Ray 集群。例如,Ray 集群的日志存储在
session_xxx/logs/
下。
- 溢出#
任务调用者通过首先向该请求的首选raylet发送资源请求来调度任务。如果首选raylet选择不在本地授予资源,它也可能“回流”并向调用者响应远程raylet的地址,调用者应在其中重试资源请求。
- 状态#
RL 代理与之交互的环境状态。
- 同步执行#
如果任务 A 必须在任务 B 开始之前完成,则任务 A 和 B 是同步执行的。例如,如果你在调用
task.remote()
启动一个远程任务后立即调用ray.get
,你将进行同步执行,因为这会等待任务完成后再继续程序。- 同步采样#
采样工作者的操作是同步的。在训练进入下一个迭代之前,所有工作者必须完成收集新一批样本。
- 任务#
远程函数调用。这是一个在调用者进程之外执行的单个函数调用,可能在不同的机器上执行。任务可以是状态无关的(一个
@ray.remote
函数)或状态相关的(一个@ray.remote
类的实例方法 - 见下文 Actor)。任务与调用者异步执行:.remote()
调用会立即返回一个或多个 ``ObjectRefs``(未来对象),可用于检索返回值。参见 Actor 任务。- 可训练#
一个 可训练的 是 Ray Tune 用于执行自定义训练逻辑的接口。用户定义的可训练对象接受配置作为输入,并且可以运行用户定义的训练代码以及自定义的指标报告和检查点保存。
有许多类型的可训练对象。最常用的是函数可训练 API,它只是一个包含模型训练逻辑和指标报告的 Python 函数。Tune 还提供了一个类可训练 API,允许您将训练、检查点和恢复实现为不同的方法。
Ray Tune 将每个试验与其自己的 Trainable 关联 – Trainable 是实际进行训练的那个。Trainable 是一个可以放置在 Ray 集群中任何节点上的远程执行者。
- 训练师#
Trainer 是配置单个分布式训练任务的顶级 API。针对不同框架有内置的 Trainer,如 PyTorch、Tensorflow 和 XGBoost。每个 Trainer 共享一个通用接口,并定义了框架特定的配置和入口点。Trainer 的主要任务是协调 N 个分布式训练工作者,并设置这些工作者之间通信所需的通信后端(例如,用于共享计算的梯度)。
- 训练器配置#
训练器可以通过多种方式进行配置。一些配置在所有训练器中是共享的,例如 RunConfig,它配置了实验存储等事项,以及 ScalingConfig,它配置了训练工作者的数量以及每个工作者所需的资源。其他配置则特定于训练器框架。
- 训练迭代#
对输入数据进行部分训练,直到预定义的yield点(例如,时间或消耗的数据),以便对长时间运行的训练任务进行检查点保存。一个完整的训练周期可以由多个训练迭代组成。.. TODO: RLlib
- 训练周期#
输入数据集的完整训练过程。通常,模型训练会以大小为 B 的批次迭代整个数据集,其中每个批次计算梯度,然后将其应用于更新模型权重。训练任务可以通过多次训练相同的数据集来包含多个时期。
- 训练步骤#
Algorithm 类的一个特定于 RLlib 的方法,包含了 RL 算法的核心逻辑。通常包括经验的收集(通过采样或从离线数据)、优化步骤、学习到的模型权重的重新分配。此方法的具体细节特定于算法和配置。
- 过渡#
一个元组 (观察, 动作, 奖励, 下一个观察)。一个过渡表示代理在环境中的一步。
- 试验#
Ray Tune 实验中的一个训练运行。如果你运行多个试验,每个试验通常对应一个不同的配置(一组超参数)。
- 试用调度器#
在运行 Ray Tune 作业时,调度器将决定如何为试验分配资源。在最常见的情况下,这种资源是时间——试验调度器决定在何时运行哪些试验。某些内置调度器,如异步超带(ASHA),会提前停止表现不佳的试验,而其他调度器,如基于种群的训练(PBT),会让表现不佳的试验复制表现最佳试验的超参数配置和模型权重,并继续训练。
- 调谐器#
Tuner 是 Ray Tune 的顶级 API,用于配置和运行包含多个试验的实验。
- 工作进程 / 工作者#
运行用户定义任务和角色的进程。