跳转至

Ray Core

Ray Core 是一款功能强大的分布式计算框架,提供了包括 TasksActorObjects 在内的核心原语(Primitives),帮助用户高效构建和扩展分布式应用程序。

Tasks

Task 是 Ray 对普通函数的分布式封装,允许将任意函数在独立的 worker 进程上异步执行

声明资源需求时,可以指定 CPU、GPU 或自定义资源,集群调度器依据这些需求将任务分配到合适的节点,从而实现跨节点的并行执行

Tip

Task 是无状态的,每次调用之间不共享任何状态。每个任务独立执行,输入通过参数传递,而不是依赖于全局状态或共享变量。

Actors

Actor 将 Ray 的抽象从函数扩展到,是 Ray 对有状态服务的原生支持。

Actor 本质上是一个长驻的有状态 worker。实例化 Actor 时,Ray 会为其专门创建一个 worker 进程,后续对该 Actor 方法的所有调用都会路由到同一个 worker,方法之间共享 worker 的内部状态。

Tip

Actor 是有状态的,能够在实例化后持续保持内部状态,直到销毁。它允许在任务之间共享状态,并支持 CPU、GPU 和自定义资源的声明。

维度 Task Actor
抽象 函数
状态 无状态 有状态
生命周期 单次调用 长驻进程

Objects

Ray 不直接传递计算结果的值,而是通过远程对象(remote objects)对象引用(object refs) 来处理 Task 和 Actor 的输出。

  • 远程对象:计算结果被存储在 Ray 集群的分布式共享内存对象存储(object store) 中,具体存放在哪个节点由 Ray 自动决定。
  • 对象引用:持有引用的进程通过 object ref 访问数据,无需关心对象的实际存储位置,Ray 会自动完成定位与传输。

Tip

Ray 通过解耦 "数据在哪""谁在用数据",实现了透明分布式计算,使得数据的位置对用户和程序透明,简化了分布式任务的处理。

Placement Groups

Placement Group(放置组)允许用户跨多个节点原子性地预留一批资源,确保所需资源要么全部分配成功,要么全部失败(避免死锁)。

调度策略 行为 适用场景
PACK 尽量将资源集中在少数节点 提高数据局部性,减少网络开销
SPREAD 将资源尽量分散到不同节点 提升容错性,避免单点故障

Tip

典型使用场景是对一组 Actor 或 Task 进行成组调度(gang scheduling),即要求所有成员同时启动。

Environment Dependencies

当 Ray 在远程机器上执行 Task 和 Actor 时,它们所依赖的运行环境(Python 包、本地文件、环境变量等)必须在远程机器上可用。Ray 提供两种解决方案:

方案 时机 适用场景
Ray Cluster Launcher 集群启动时预装 依赖固定、变化少
Runtime Environments Task/Actor 运行时动态安装 依赖灵活、需要隔离