机器学习建模分布式计算框架调研

Dask

Ray

 Ray一个开源的通用分布式计算框架,支持传统的并行任务并支持AI模型的分布式训练,分布式任务包括有状态与无状态任务,Ray能够快速的构建分布式系统,支持按需申请CPU或GPU;Ray提供了统一的接口提供了基于任务的并行计算与基于行动器的计算,前者通常用于无状态的任务后者用于有状态的任务;Ray为一个具有高可扩展性、容错性的分布式计算集群框架;集群即可逻辑运行亦支持K8S生态与Docker环境运行;
  Ray架构分为应用层和系统层组成,应用层提供了Ray API,系统层保障Ray的高可扩展和容错性;
file

应用层对应了三种类型的进程:驱动进程、工作器进程、行动器进程组成;
  驱动器 (Driver ): 执行用户程序的进程,所有操作都需要由主进程来驱动。
  工作器 (Worker ): 执行由驱动器或其他工作器调用的任务(远程函数)的无状态的进程。工作器是在系统层分配任务时自动启动的。当声明一个远程函数时,该函数将被自动发送到所有的工作器中。在同一个工作器中,任务是串行地执行的,工作器并不维护其任务与任务之间的局部状态,即在工作器中,一个远程函数执行完后,其局部作用域的所有变量将不再能被其他任务所访问。
  行动器 (Actor ): 行动器被调用时只执行其所暴露的方法。行动器由工作器或驱动器显式地进行实例化。与工作器相同的是,行动器也会串行地执行任务,不同的是行动器上执行的每个方法都依赖于其前面所执行的方法所变更的状态。

  三种进程在代码中的体现:

def f(x):
    # 工作器进程
    return x * x

@ray.remote
class Counter(object):
    def __init__(self):
        # 行动器进程
        self.value = 0

    def increment(self):
        #行动器进程
        self.value += 1
        return self.value

if __name__ == "__main__":
    #驱动器进程
    object_ref = f.remote(2)
    assert ray.get(object_ref) == 4
    counter = Counter.remote()
    ref = counter.increment.remote()
    assert ray.get(ref) == 1

Ray集群启动

ray start --head

启动Work节点
ray start --address='127.0.0.1:6379'

节点退出
ray stop

集群监控地址:http://127.0.0.1:8265

Resource Status
Usage:
0.0/36.0 CPU
0B/17.76GiB memory
0B/8.04GiB object_store_memory
Demands:
(no resource demands)

Ray架构

Ray的统一计算框架由三个层次组成:

Ray AI Libraries – 一个开源的、Python编写的、领域特定的库集,为机器学习工程师、数据科学家和研究人员提供了一个可扩展且统一的工具包,用于机器学习应用程序。

Ray Core – 一个开源的、Python编写的、通用的分布式计算库,使机器学习工程师和Python开发人员能够扩展Python应用程序并加速机器学习工作负载。

Ray Clusters – 一组连接到共同的Ray头节点的工作节点。 Ray集群可以是固定大小的,也可以根据集群上运行的应用程序请求的资源自动扩展和收缩。

spark


相关文章:
Ray一个通用分布式计算框架基本使用

为者常成,行者常至