跳转至

分布式计算 简要调研

现有框架

Rain

简介:

Rain Overview * 主要基于 Rust,上一次更新于 2018 年。 * Task: functions or ex programs that reads inputs and produces outputs. * Data objects: immutable obejects that are read and created by tasks. * blob: Binary data block. * dir: Directory structure.

用法:

需要手动建立进程(sessions),提交任务(submit),等待计算完成(wait_all); 除了内置任务外,也可以调用外部代码,或使用装饰器 @remote 直接运行 python 代码。

任务间数据调用可能需要手动设置延迟。

缺点 / 可能的改进方向:

  • 需要手动调控进程,不够自动化
  • 可调控的参数不多,目前仅有 CPU 数目 -> GPU、 TPU、 硬盘空间
  • 更好的调度程序 (目前的主要基于启发式以及预定规则)
  • 更强的鲁棒性,以避免崩溃,或者在崩溃后自动恢复
  • 流对象支持,改进当前需要等待全部输出才能进行下一个阶段的机制。

Ray

简介:

Ray v2 Architecture * Ray Core (帮助构建可分布计算的python文档) * Tasks: functions that can be executed asynchronous and remotely. (无状态的,仅与参数有关) * Task 的调用会被并行执行 * 注册任务(@ray.remote 装饰器) * 提交任务(fn.remote() 调用) * 获得一个结果的 ObejctRef 对象(非阻塞) * 按需阻塞获得结果(ray.get()获取) * Actors: classes, can be instantiated as workers. (有状态的) * Actors 的方法调用会被串行执行。 * 注册 Actor(@ray.remote 装饰器) * 实例化 Actor(class.remote 实例化为 Worker) * 提交方法调用(fn.remote() 调用) * 获得一个结果的 ObejctRef 对象(非阻塞) * 按需阻塞获得结果(ray.get() 获取) * Objects: remote objects(data) that can be stored anywhere in the cluster. Accessed by reference.

  • Ray AIR(基于Core的库,帮助构建AI相关工作)

架构 (v1):

主要分为:App Layer 与 System Layer

应用层

有三种进程:Driver(执行用户程序)、Worker(执行无状态任务/函数)、Actor(执行有状态任务)

系统层
  • Global Control Store
  • 维护全局状态:Object Table、Task Table、Function Table、Event Log
  • 记录对象、任务存在于哪一个节点、定义的远程函数以及任务日志
  • Distributed Scheduler
  • 主要有两层:全局调度器和本地节点的调度器
  • 若任务在本节点内被满足需求,则任务在节点就被调度,否则传递至全局调度(依据输入和等待时间选择节点)
  • Distributed Object Store
  • 每个节点上实现一个对象存储器,远程输入以及输出总会先写到节点存储器,减少了瓶颈

架构 (v2)

应用层

节点仅有两种进程:Driver(执行用户程序)、Worker(执行任务,包括无状态Task或者是Actor的方法调用)

系统层

每个 Worker 存储 ownership table(Objects 的应用) 及 in-progress store(存储小 Objects)

每个节点还拥有 Raylet,包含 scheduler(v1中的节点调度器), shared-memory object store(v1中的节点对象存储器)

节点中有一个特殊的 head node,它拥有: * Global Control Service,调度节点任务,存储各种信息。有 fault tolerance,使得GCS可以运行在任意节点上(避免单头节点失效引起分布式系统奔溃) * 隐式将API注入代码的合适位置,自动形成计算图 * Driver 进程,执行最高级别的应用程序,可提交任务 * 其他的节点功能

Ownership

利用 ObjectRef 创建对对象的引用。 * 优点:低延迟,高并发,简单可靠

Memory
  • Heap memory used by Ray workers during task or actor execution, small Ray objects, Ray metadata.

  • Shared memory used by large Ray objects (ObjectRef).

Dask

简介:

提交 Task -> 创建 Task Graph -> 调用 Scheduler 执行

The result from a computation isn’t computed until you ask for it. Instead, a Dask task graph for the computation is produced.

Scheduler 类型: * Local * Threads * Process * Synchrnous * Distributed

Dask 提供 optimizations 以优化 Task Graph

特性设计

  • 可扩展性:
  • 高可用性
  • 数据管理
  • 任务调度
  • 通信和协调
  • 任务的分配和调度:任务队列
  • 节点的状态监控:心跳机制
  • 任务的执行监控:记录日志和统计任务执行的时间
  • 节点间的通信和同步:消息传递
  • 可定制性
  • 性能优化

可能的应用?

分布式+ * 大模型推理 - LLaMA on Raspberry Pi 4 (10s / token) * Stable Diftusion Model * so-vits