ray 分布式, 工作节点、reylet、 主节点、GCS
工作节点、reylay
每一个工作节点有一名reylet组件,负责管理工作进程,在工作节点上的任务共享reylet,负责任务调度和对象存储(如rey.put),
- 对象存储在节点内形成共享内存池,并确保worker进程可以访问其它节点的对象,对象存储由Plasma实现,
- 调度器负责资源管理工作,管理cpu、gpu、内存等信息,如果资源不足, 则任务会进入等待队列;另外调度器还关注任务依赖,调度器在对象存储中查找依赖项,如果所需的值在此节点的对象存储中不可用,调度器将与其它节点通信,拉去依赖项,一旦依赖项满足、资源足够,并找到worker执行任务,就安排任务进行执行。
- worker进程存储调用的所有任务和任务返回的对象引用元数据,叫所有权
import ray
# task拥有val和task_owned的所有权,
# 主程序(驱动程序)拥有val、res、task的所有权
@ray.remote
def task_owned():
return
@ray.remote
def task(arg):
res_owned = task_owned.remote()
return
val = ray.put("value")
res = task.remote(val)
主节点、GCS
如图,主节点上也可以由工作进程,同时主节点运行驱动程序; 主节点上有GCS(Global Control Services)全局控制服务,它存储全局信息,同时与每个Raylet保持心跳,同时还存储执行器所在的位置。
知识是我们已知的
也是我们未知的
基于已有的知识之上
我们去发现未知的
由此,知识得到扩充
我们获得的知识越多
未知的知识就会更多
因而,知识扩充永无止境