专栏首页机器学习与系统Ray,面向新兴AI应用的分布式框架

Ray,面向新兴AI应用的分布式框架

下一代AI应用需要不断和环境进行交互,并且在交互中学习。这些应用暴露了新的系统需求:性能和弹性。本文提出了Ray解决上述问题。

Ray实现了动态执行引擎,可以表达任务并行和actor模型计算任务。它通过分布式调度器以及分布式容错存储来实现高性能与容错。

问题与方案

AI中的监督学习部分,已经出现了优秀的深度学习框架,使用定制的硬件加速计算。但是对于新兴的AI应用不仅要收集探索数据,还要采取动作不断和环境交互学习,这一类可以概括为强化学习。

强化学习提出了新的系统需求:

1.支持细粒度计算2.支持动态执行,RL需要模拟3.支持多样的资源:时间、CPU、内存等

因此,新兴RL应用需要动态计算框架,每秒处理百万级任务且延迟在毫秒级

当前的一些框架无法完全满足上面的要求:

1.像MapReduce、Spark、Dryad一类BSP模型框架不支持细粒度模拟或策略服务2.CIEL和Dask的任务并行框架对分布式训练和模型服务支持很少3.分布式深度学习框架TensorFlow、MXNet不天然支持模拟和服务

因此,如果要开发端到端解决方案,需要使用不同的计算组件,分布式训练、模拟、模型服务等都需要一个组件。这种方法会带来大量的开发负担,而且系统紧耦合,不实用。

所以,Ray的目标是成为一款通用的计算计算框架,同时支持RL中的模拟、训练和服务这些需求。计算负载包括模拟这样的轻量、无状态的计算,也包括向训练这样长时、有状态的计算任务。对于无状态任务,Ray提供了Task抽象,对于有状态任务,Ray提供了actor抽象。这些抽象是建立在底层动态执行引擎上的。

Ray的贡献如下:

1.设计和实现了第一个统一训练、模拟和服务的分布式框架2.基于动态执行引擎实现了task和actor并行抽象3.将控制状态存储在共享的元数据存储中,其它系统组件都是无状态的4.自底向上的分布式调度策略

编程与计算模型

Ray实现了动态任务图计算模型,将应用建模成调度图中独立的计算任务。

编程模型

1.Task表示可以在无状态worker节点上执行远程函数(remote function)。远程函数是无状态且幂等的,相同的输入输出相同,这样易于容错。2.Actors,表示有状态的计算,每个actor会暴露一些方法,可以被远程调用或顺序执行。actor的方法只会在有状态的worker上执行。

下面的表格是Task和Actor的比较:

Task(stateless)

Actors(stateful)

Fine-grained load balancing

Coarse-grained load balancing

Support for object locality

Poor locality support

High overhead for small updates

Low overhead for small updates

Efficient failure handling

Overhead from checkpointing

计算模型

Ray采用了动态任务图计算模型,这种模型中,当输入准备好后,task和actor的方法会自动被系统调用执行。

上面的图就是一个动态任务图,这个图包含三种类型的边:

1.数据边,表示数据依赖关系2.控制边3.有状态边

图中有两种类型的节点:

1.对象节点,包含有状态信息2.任务/远程函数调用,无状态函数/方法

在任务图中,Ray会维护数据间的依赖世系,当某个task或actor的方法崩溃时,可以快速恢复丢失的数据。

系统架构

下图是Ray早期论文[1]中的整体架构,包含的组件更全面,对架构可以有一个整体的认识。

Ray的架构分为两层,上层为应用层,为用户提供简炼、易用的API;下层为系统层,提供高可用、容错的执行引擎。

应用层

由三种类型的进程构成:

1.Driver:用于执行用户程序2.Worker:自动运行的无状态进程,由系统层分配任务。会串行执行driver或其它worker触发的任务。3.Actor:有状态进程,只能由dirver或worker实例化。

系统层

包含三个主要的组件:全局控制存储、分布式调度器和分布式对象存储。

Global Control Store(GCS)

全局控制存储(GCS)维护系统所有控制状态,它的核心是带有发布-订阅功能的键值存储。通过分片实现扩展,每个分片通过链式备份[2]实现容错。

GCS的目的是为每秒百万级任务调度提供容错和低延时。同时简化了整体架构,使得Ray中的每个组件都是无状态的,组件的调度、扩展、调试、可视化都非常方便

自底向上的分布式调度

Ray的一个目标是实现每秒百万级任务调度,为此设计了两级调度器,包括全局调度器和每个节点上的本地调度器。为了降低全部调度器的负载,节点(worker,actor)上派生的任务首先提交给本地调度器,当本地调度器过载时,会把带调度的任务提交给全局调度器。

全局调度器会根据每个节点的负载和任务的需求进行调度。决策依据有:

1.每个节点上任务队列的大小2.节点上任务的排队时间3.任务需要的数据传输到该节点所需的时间

当全局调度器出现瓶颈时,Ray会实例化更多的全局调度器来分担工作,这得益于GCS,使得全局调度器可扩展。

内存分布式对象存储

基于内存实现是为了最小化任务的延迟,数据格式使用Apache Arrow。

当任务所需的数据不在本地节点时,数据会从其它节点复制过来。因为认读读写数据都在本地内存中,这极大增加了吞吐量。

内存对象存储是分布式的,但是存储的内容必须作为一个整体存储在一个节点上,不能分割成多个块,存储在多个节点上,Ray没有这样做,因为会增加系统的复杂度。

代码实现

截至2017年,Ray主要包含40K行代码,系统层由C++编写,占72%;应用层由Python编写,占28%。

两级调度器都是基于事件驱动(event-driven)的单线程模型。

总结

Ray的开发是一段长期旅程,早期它作为分布式训练和模拟的Spark库出现,因无法满足强化学习的要求而独立演进。

Ray提供了无状态(task)和有状态(actor)的通用分布式调度框架,支持训练、服务和模拟整个强化学习周期。通过良好的架构设计支撑了每秒百万级的任务调度,可以很好支撑未来新兴AI应用的需求。

截止到2020年,Ray已经不局限于强化学习任务,而是作为一个通用的分布式框架,上层封装了Tune[3]、RLlib[4]、SGD[5]、Serve[6]等生态库,为用户提供更多可能,并且专门创办公司Anyscale[7]来推动,这会成为下一个Spark和Databricks吗?我们拭目以待。

本文分享自微信公众号 - 机器学习与系统(aimlsystem),作者:陆道峰

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-08-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【技术分享】基于可扩展自动化机器学习的时序预测

    时间序列简单来讲是指一系列在时间轴上有序的数据,而时序预测是根据过去时间点的数值来预测将来时间点上的数值。现实中,时间序列预测除了在电信运营商中的网络质量分析、...

    腾讯云TI平台
  • 学界 | UC Berkeley提出新型分布式框架Ray:实时动态学习的开端

    机器之心
  • UC Berkeley提出新型分布式执行框架Ray:有望取代Spark

    译者|马卓奇 编辑|Natalie AI 前线导读:下一代人工智能应用程序需要不断地与环境交互,并从这些交互中学习。这对系统的性能和灵活性提出了新的要求,而现有...

    企鹅号小编
  • 使用Wordbatch对Python分布式AI后端进行基准测试

    在过去的几年里,Python已成为数据科学和人工智能的通用语言,所有使用Python作为主要界面语言的着名深度学习框架(Keras,Pytorch,MXNet)...

    代码医生工作室
  • Ray:AI的分布式系统

    随着机器学习的算法和技术的进步,越来越多的机器学习应用程序需要多台机器,并且必须利用并行性。但是,在集群上进行机器学习的基础设施仍然是特设的。尽管针对特定用例(...

    用户1045622
  • 一行代码,Pandas秒变分布式,快速处理TB级数据

    刚刚在Pandas上为十几KB的数据做好了测试写好了处理脚本,上百TB的同类大型数据集摆到了面前。这时候,你可能面临着一个两难的选择: 继续用Pandas?可能...

    量子位
  • 秒杀Deepfake!微软北大提出AI换脸工具FaceShifter和假脸检测工具Face X-Ray

    最先进的AI和机器学习算法不仅可以生成栩栩如生的位置和物体的图像,还擅长将人脸头像从一个人换成另一个人的。另一方面,研究人员也在不断开发能够检测deepfake...

    新智元
  • Ray:AI的分布式系统

    随着机器学习算法和技术的进步,越来越多的机器学习应用程序需要多台机器,而且必须利用并行性。但是,在集群上进行机器学习的基础设施仍然是专门设置的。尽管针对特定用例...

    QiqiHe
  • 开源 | 伯克利AI分布式框架Ray,兼容TensorFlow、PyTorch与MXNet

    机器之心
  • 专访Michael Jordan:AI的分布式决策与不确定性

    今年四月,Michael Jordan 在 Medium 上发表了一篇名为《人工智能:革命尚未到来》的文章。文章指出,如今「AI」这个概念被各界人士当做包治百病...

    机器之心
  • 微软北大联合提出换脸 AI 和脸部伪造检测器,演绎现实版「矛与盾」?

    一个致力于造假,一个专注于打假;光是听起来,就不禁让人联想到「矛」与「盾」的故事。那到底哪个更胜一筹呢?VB 发布了的相关内容介绍了这两个成果,我们将其整理及编...

    AI研习社
  • 古有照妖镜,今有换脸识别机,微软 CVPR 2020力作,让伪造人脸无处遁形

    前些日子,Deepfake技术现身印度选举,被候选人用在了竞选拉票的宣传材料上。虽然此候选人以惨败而收场,但这意味着Deepfake点燃的AI换脸之火有逐渐升温...

    AI科技评论
  • 高性能分布式执行框架——Ray

    Ray是UC Berkeley RISELab新推出的高性能分布式执行框架,它使用了和传统分布式计算系统不一样的架构和对分布式计算的抽象方式,具有比Spark更...

    Florian
  • 深度强化学习框架Ray|RLLib|Tune学习笔记

    通过拿到远程函数的ID,可以在集群的任何地方,通过get(ID)获取该函数返回值

    SL_World
  • 教主黄仁勋烤出540亿晶体管GPU,全球最大7nm安培架构坐稳算力霸主

    在NVIDIA GTC2020大会上,NVIDIA正式发布了7nm安培GPU,号称是8代GPU史上最大的性能飞跃!黄仁勋从厨房里面烤出了史上最大GPU。

    新智元
  • 本周AI热点回顾:给Deepfake 假脸做 X-Ray、飞桨助力打造肺炎筛查和预评估AI系统

    换脸,是滥用深度学习的结果之一。自从 Deepfakes、FaceSwap 等应用开源以后,开发者能自己生成各种换脸视频,网络上也开始流传层出不穷的「假视频」。...

    用户1386409
  • 破局“眼见为假”: 谁在磨砺刺破Deepfakes之剑?

    自从摄影术发明的那一刻起,人们便开始孜孜不倦地进行着技术改造。在今天,没有一家手机厂商不在追求更多的摄像头、更高的像素、更先进的成像算法,似乎只为追求一张更逼真...

    脑极体
  • 本周AI热点回顾:机器人写稿同样拥有著作权、大脑中竟存在“分布强化学习”

    一秒出快讯,一分钟内出分析文章,只要有需求,一年写出几十万篇文字作品都不在话下,这就是 AI 写作机器人,目前被广泛应用在一些媒体、金融、分析机构,甚至在文学创...

    用户1386409
  • 简单的方式创建分布式应用程序

    面对计算密集型的任务,除了多进程,就是分布式计算,如何用 Python 实现分布式计算呢?今天分享一个很简单的方法,那就是借助于 Ray。

    somenzz

扫码关注云+社区

领取腾讯云代金券