Ray 分布式计算框架介绍
发布网友
发布时间:2024-10-07 12:50
我来回答
共1个回答
热心网友
时间:2024-11-19 22:06
Ray是由UC Berkeley RISELab推出的机器学习分布式框架,其产生背景源于AI和大数据的快速发展,对应用和硬件能力提出了更高的挑战。该框架由Ion Stoica教授创立,他同时也是Spark产品的公司Databricks的创始人,Apache Mesos、Alluxio、Clipper的项目主导人。
Ray的特点在于其高性能计算能力,主要应用于投资组合的实时归因分析等场景。Ray与Dask等类似框架相比,在Python用户群体中更具优势。Dask是Anaconda的产品,旨在弥补Python在数据科学中的性能不足,而Ray则专注于加速机器学习的调优和训练速度。Ray不仅提供基础的计算平台,还包括Tune(超参数调节)和RLlib(增强学习)等工具。
Apache Arrow是Ray底层内存数据结构的基础,它已经成为数据处理领域最通用的数据结构,具有丰富的生态和出色的性能。Ray团队基于Arrow开发了一个内存数据服务,称为Plasma,它在Linux共享内存中创建了Arrow封装的对象,并通过Plasma Client Library使其他进程能够访问这块共享内存中的Arrow存储。
Ray的架构可以参考arxiv.org/abs/1712.0588...,其中GCS作为集中的服务端,是Worker之间传递消息的纽带。每个Server都有一个共用的Object Store,即用Apache Arrow/Plasma构建的内存数据。Local Scheler负责Server内部的调度,同时通过GCS与其他Server上的Worker通信。
Raylet是Raylet本地调度的核心,它在中间的作用非常关键,包含了Node Manager、Object Manager和gcs_client等重要内容。Node Manager是基于boost::asio的异步通信模块,主要负责通信连接和消息处理管理;Object Manager负责管理Object Store;gcs_client负责连接GCS客户端。
Ray采用Boost::asio的异步通信模型,通过Proactor模型实现异步操作。Node Manager在初始化时,会根据num_initial_workers的数量初始化worker pool,然后按照asio的异步机制,将任务分配到这些worker pool中的进程。
消息传递和调度机制中,Worker提交task到raylet,raylet将task分配到其他worker。同时,raylet还需要将task和相关worker信息提交给GCS。task执行的参数和返回值需要通过Object Store来获取。
Task Lineage是Ray中一个重要的概念,它包含Lineage Cache、Lineage Entry和Lineage等概念。Lineage管理Task执行的DAG(有向无环图),Lineage Entry管理Task状态,Lineage Cache管理Task在本机执行的缓存。通过对Lineage的优化,可以提高Ray的调度性能。
集群架构方面,Ray集群包括Worker、Gcs和Raylet等模块。Worker是一个执行单元,通过gRPC远程提交任务。整个架构类似于istio的service mesh结构。Raylet是处理Worker和GCS的关键连接点,还有处理Local Worker之间的调度。Raylet包含Node Manager和Object Manager等组件。
提交任务时,Worker将task提交到raylet,raylet将task分配到其他worker。同时,raylet还需要将task和相关worker信息提交给GCS。task执行的参数和返回值需要通过Object Store来获取。