关键概念#
本节概述了 Ray 的关键概念。这些基本原语协同工作,使 Ray 能够灵活地支持广泛的分布式应用。
任务#
Ray 允许任意函数在独立的 Python worker 上异步执行。这些异步的 Ray 函数被称为任务。Ray 允许任务指定其 CPU、GPU 和自定义资源的资源需求。集群调度器使用这些资源请求将任务分发到集群中进行并行执行。
请参阅任务用户指南。
Actor#
Actor 将 Ray API 从函数(任务)扩展到类。Actor 本质上是一个有状态的 worker(或服务)。当你实例化一个新的 actor 时,Ray 会创建一个新的 worker 并将 actor 的方法调度到该特定的 worker 上。这些方法可以访问和修改该 worker 的状态。与任务一样,actor 支持 CPU、GPU 和自定义资源需求。
请参阅Actor 用户指南。
对象#
任务和 actor 创建对象并在对象上进行计算。你可以将这些对象称为远程对象,因为 Ray 将它们存储在 Ray 集群的任何地方,而你使用对象引用来指向它们。Ray 在其分布式共享内存对象存储中缓存远程对象,并在集群中的每个节点上创建一个对象存储。在集群环境中,远程对象可以存在于一个或多个节点上,这与谁持有对象引用无关。
请参阅对象用户指南。
Placement Groups#
Placement groups 允许用户在多个节点上原子地预留资源组。你可以使用它们来调度尽可能紧密打包以提高 locality(PACK)或分散开(SPREAD)的 Ray 任务和 actor。常见的用例是协同调度 (gang-scheduling) actor 或任务。
环境依赖#
当 Ray 在远程机器上执行任务和 actor 时,它们的环境依赖项(例如 Python 包、本地文件和环境变量)必须在远程机器上可用。要解决这个问题,你可以 1. 使用 Ray 集群启动器提前在集群上准备好依赖项 2. 使用 Ray 的运行时环境即时安装它们。
请参阅环境依赖用户指南。