使用RayDP构建大规模数据分析和AI管道

2021年5月27日03:50 PM (PT)

下载幻灯片

大规模的端到端数据分析和AI管道通常涉及数据处理框架,如用于大规模数据预处理的Apache Spark,以及用于预处理数据分布式训练的ML/DL框架。传统的方法是使用两个单独的集群并将多个作业连接起来。其他解决方案包括在Apache Spark集群中运行深度学习框架,或使用Kubeflow等工作流编排器来拼接分布式程序。所有这些选择都有其局限性。我们引入Ray作为分布式数据处理和机器学习的单一基板。我们还介绍了RayDP,它允许你在你的python程序中在Ray上启动一个Apache Spark作业,并利用Ray的内存对象存储来有效地在Apache Spark和其他库之间交换数据。我们将演示这如何使构建端到端数据分析和人工智能管道更简单、更高效。

在本节中请注意:
Carson Wang,英特尔公司软件工程经理
刘咸阳,英特尔公司经理

成绩单

Carson Wang:大家好,欢迎来到今天的会议。我是英特尔公司的Carson Wang。今天咸阳和我来聊聊,如何用RayDP构建大规模的数据分析和AI管道。
这就是今天的议程。我将首先谈谈背景,人们是如何将大数据与人工智能相结合的,以及我们面临的挑战是什么。接下来,我将介绍Ray和RayDP项目,以及我们如何更轻松有效地使用这些项目构建端到端管道。接下来,咸阳将介绍RayDP API和建筑设计。最后,他还会给你们看一些例子。
让我们开始吧。首先,我们知道,大数据和人工智能是两个不同的群体。一方面,ApachiSpark是领先的大数据框架之一,在过去13年里一直在快速发展。另一方面,出现了许多机器学习和深度学习框架,并变得非常流行。
这两个群体之间的交集也越来越多。其中一个原因是,海量数据实际上对更好的人工智能非常关键。模式很重要。然而,要获得更好的AI,我们实际上需要大量高质量的数据。随着训练中使用的数据越来越多,模型也变得越来越复杂。单个节点实际上无法满足计算需求。实际上,分布式培训也将成为常态。
我们已经看到很多尝试将大数据和人工智能结合起来的项目。有像HorovodOnSpark, TensorflowOnSpark这样的项目,它们试图在[听不清]上运行一个不同的框架,也有一些项目试图把这个存储出来,作为[听不清]文件格式,可以重新定义,依赖的框架。
接下来,让我们来看看[听不清],它试图将火花与动作学习和深度学习框架结合起来。因此,第一种方法是使用分开的Spark和AI集群。这是一个传统的。所以在你的端到端管道中[听不清]和模型训练。你首先需要编写一个Spark应用程序,[听不清]创建[听不清]Spark集群,然后存储[听不清]HTPS。
在下一步,对于[听不清]不同的[听不清]框架建立了[听不清]数据库,或者我需要将数据[听不清]复制到学习集群,然后到模型训练。
这里有一些挑战。首先,在集群中有BETA时刻,其次是[听不清]管理这两个集群。如果我们看看端到端管道,这实际上将是[听不清]应用。所以你需要很多好的代码来把多个程序拼接在一起,或者你需要[听不清]来做这件事。
第二种方法[听不清]Spark。Spark支持一些项目,如果你有一个现有的Spark集群,你想在集群中[听不清]资源来做模型训练,这是很有用的。然而,这里也有一些挑战,因为这实际上是一个非常具体的[听不清]spark,它需要spark上支持的[听不清]框架。因此,如果你有一个端到端管道,但有一个框架不支持Spark,或者你的管道中没有Spark,那么它就不适合你。
在这种解决方案中,它通常是一个分布式文件系统数据库,也用于交换BETA[听不清]Spark和不同的[听不清]框架,所以这也是我有延迟的地方。今天也有越来越多的组织转向Kubernetes管理。通过使用像Kubeflow这样的工作流编排框架,我们还可以在[听不清]管道上实现端到端数据分析,单个Kibernetes集群。
然而,这里也有一些变化。首先,管道必须写在多个程序和[听不清]文件中。所以你可能需要用图像写入[听不清]文件,还有[听不清]Spark程序,还有[听不清]程序。然后构建端到端的管道。
这并不像编写一个Python程序那么简单。其次,它通常还需要一个分布式文件系统来进行数据交换,在这个框架中,这也会增加延迟。
所以问题是,我们能否有一个通用的框架,可以用作数据处理和模型训练的单一基底,以及[听不清]和[听不清]。我们希望确保能够轻松高效地开发端到端渠道。例如,在一个Python程序中执行该操作。另外,除了使用分布式文件系统来进行数据交换,我们是否可以使用内存数据交换,一种更有效的方式来进行数据交换?
使用Ray和RayDP的答案。雷是什么?Ray是一个通用框架,它为构建分布式应用程序提供了一个简单的通用API。在Ray[听不清]中,它为HIs提供了一些东西,比如任务和actor,在我们的单节点编程中,它们在类中发挥作用。
这些api很简单,但足够强大,我们可以构建分布式应用程序和分布式[听不清]。今天我们拆解了一些原生的[听不清]方法,包括用于模型调优的[听不清],用于强化学习的Rilib,用于分布式[听不清]的raysgd,以及用于模型服务的Ray Serve。Ray也支持越来越多的[听不清]库,包括他们的[听不清]。Ray还支持和部署多个云服务提供商,也可以由许多研究经理部署,比如[听不清]。
所以Ray上有一些选项可以更好地为他们(听不清)提供Ray上的Slack API。也有很多[听不清]案例使用Spark,主要的[听不清]框架[听不清]学习管道。所以我们创建了一个RayDP项目,为Ray上的[听不清]提供一个简单的api,并返回分布式运动学习和深度学习框架。
当我们[听不清]回到Ray,我们把Ray作为资源管理,我们想[听不清]在Ray Java actor中。这是Ray的下一个Spark[听不清]为了将Spark与分发、运动学习和深度[听不清]框架集成在一起,我们提供了两种方法,最简单的是使用[听不清]。所以你可以简单地[听不清]通过传递没有功能的优化器模型,以及其他一些[听不清]。然后你可以粗略地将[听不清]与Spark[听不清]相匹配,我们将照顾其他一切,并在Ray集群上扩展你的培训。
但是,如果你更喜欢使用Raysgd或者[听不清]来进行模型训练,我们可以。我们还提供了另一种转换Spark数据帧的方法。所以雷[听不清]。所以在Ray[听不清]这是一个分配的[听不清]在Ray,存储[听不清]存储。它可以用来连接很多图书馆,比如很多SG[听不清]。这就是我们如何使用它来连接这个运动[听不清]框架。
因此,将Ray作为一个基板,通过使用RayDP(听不清)回到Ray上,再加上其他一些框架和Ray上的[听不清],我们实际上可以在一个Python程序中轻松实现端到端管道。所以我们也可以利用Ray的[听不清]选项存储在它的库之间进行有效的数据交换。
因此,在一个典型的端到端管道中,现在我们可以使用[听不清]来读取数据,并使用数据[听不清]API来处理数据[听不清],我们还可以使用Spark MRL来进行未来的工程。在那之后,我们可以把[听不清]数据放入[听不清]格式的电子存储器中。
接下来,我们可以使用任何深度学习或机器学习框架,如PyTorch、TensorFlow、[听不清]以及[听不清]来进行模型训练。我们也可以把它和[听不清]整合在一起,用于超启动调谐。一旦我们有了[听不清]模型,我们也可以用Ray Serve来建模。所以一切都是[听不清]Ray的单一路径,我们可以在一个Python配置文件中完成,这更容易和有效。
有了Ray程序,我们也可以轻松地从你的笔记本电脑无缝扩展到云端或[听不清]。我们可以从一个小的[听不清]开始,我们开发Ray程序,你有一台本地笔记本电脑。一旦它准备好了,我们就可以把它扩展到一个Ray集群。Ray提供了一个集群[听不清],所以我们可以用它在云中启动一个Ray集群或[听不清]集群。Ray也支持自动扩展,所以我们实际上可以从更多的[听不清]实例开始,当你的应用需要更多的资源时,它可以扩展更多的节点。因此,这意味着我们可以无缝扩展从笔记本电脑到云或Kubernetes的端到端管道,而没有任何[听不清]变化。
在这里总结一下使用Ray和RayDP的好处。首先,你的工作效率会提高。它简化了如何构建和管理端到端管道。你可以在一个Python概要文件中使用多个库和框架,包括Spark,而不是TensorFlow, PyTorch,[听不清]等等,所以你不需要分离程序并将它们拼接在一起,或者使用工作流编排框架。
其次,它也会提供更好的性能。除了使用分布式文件系统来进行这种交换,我们还可以使用内存[听不清]来做这件事,如果数据可以手动放入,这将更有效。我们还计划为此集成一些Spark优化,我们也可以在shuffle中使用Ray[听不清]。
最后,您还将获得更高的资源利用率。Ray支持[听不清]的自动扩展,因此它可以在集群级别上进行自动扩展,Spark也可以支持动态资源分配,因此通过结合这两者,我们实际上可以在集群级别和应用程序级别上进行扩展。因此,您将获得更好的资源利用率,并节省您的集群。
下面有请刘咸阳为大家介绍RayDP API和[听不清]。

刘咸阳:大家好,我是咸阳,我也来自[听不清]我的同事Carson已经介绍了一些关于Ray和RayDP的背景知识。现在我将给你们更多关于RayDP模拟的[听不清]以及一些如何使用RayDP的例子,以及一些其他罕见的组件来编写基于Ray的[听不清]解决方案。
首先,让我说说[听不清]如何聚集在Ray的顶部。首先你需要用Ray[听不清]连接到Ray集群,然后你可以用RayDP[听不清]Spark连接到Ray集群。有一些永久性的[听不清]第一个是缓存名称,你还需要为每个[听不清]指定请求的数字,每个代码[听不清]和每个代码内存。你也可以传递[听不清]构型给[听不清]例如,Spark本地[听不清]配置。然后你可以[听不清]实例。
在那之后,你可以用Spark会话做数据处理。(听不清)。之后,你可以用RayDP[听不清]Spark停止Spark集群。
这一页[听不清]是关于Spark如何在Ray之上发展的。如你所知,雷有一个新的过程,是[听不清]过程,一个[听不清]反应堆。[听不清]反应堆我们也可以有[听不清]其他参与者。所以在RayDP中,我们[听不清]其他资源管理器,Ray[听不清]master和Spark[听不清]actor。所以第一个[听不清]我们需要[听不清]应用程序掌握的是Java角色。应用程序主程序启动后,我[听不清]每个[听不清]应用程序主程序。当appLication master收到请求时,它是[听不清]actor,[听不清]结果是[听不清]例子,它是文化,内存,和[听不清]。
然后,当我们在Java actor中运行Spark[听不清]所以Spark是[听不清]在Java actor中运行。这意味着Spark(听不清)在存储对象时也具有(听不清)能力。[听不清]对象存储,这是[听不清]内存服务,[听不清]数据交换[听不清]过程。
我们也有[听不清]在Java STT之上,它是[听不清]直接在[听不清]线上,Spark和数字[听不清]之间的数据交换,我们将在下一页介绍。这里有一个例子,我们如何创造,如何使用[听不清]。不幸的是,只有[听不清]工人的数量[听不清]在[听不清]对深度学习模型训练的[听不清]校正之后,你需要[听不清]模型,优化器,你失去了功能,[听不清]是模型[听不清]的[听不清]列[听不清]Spark[听不清]。
[听不清]列是智能数据帧名称中的[听不清]列。还有一些必要的参数[听不清]来通过[听不清]。在那之后你来到[听不清]事件实例,然后你可以直接[听不清]。
Ray ML数据集是[听不清]的分布连接。在RayDP,我们提供一个Ray MLSataset来纠正[听不清],当你纠正ML数据集时,你可以用[听不清]函数做一些转换,你也可以[听不清]数据帧到[听不清],我们正在创建一个[听不清]数据集。当你被召唤去触摸时,分配连接是[听不清]。我们开始[听不清]分发连接软件[听不清]张量。
[TouchTensor]可以用来修正[听不清]对触摸模型的使用。这里我们可以[听不清]Torch ML数据集和当前的[听不清]。在潜在的[听不清]转换中,它是[听不清]在[听不清]中编码。在[听不清]数据中,它在Spark和MLDataset[听不清]框架之间以二进制[听不清]的形式变化。
首先,我们需要把数据帧存储到[听不清]。我们需要将[听不清]帧速率降低到[听不清]它是[听不清]数据帧到[听不清]的连接。然后是我们开始数据的ML数据集,然后在我们[听不清]ML数据[听不清]转换[听不清]张量之后。这样我们就可以[听不清]这些数据与火炬框架。
当然,所有的数据都存储在[听不清],所以[听不清]非常有效。我们可以[听不清]零拷贝。
现在,让我们看一些如何使用RayDP和其他Ray组件的例子。这个例子是如何在Ray的基础上集成Spark和XGBoost。左边是数据处理部分,右边是模型训练部分。[听不清]连接到[听不清]Spark的过程,也是一个RayDP[听不清]需要Spark。[听不清]Spark数据处理。这里我们[听不清]数据来自[听不清]然后方法[听不清]分为两部分。第一部分是[听不清]模型训练。[听不清]用于模型测试。
在那之后,我们试图从[听不清]数据帧,和[听不清]数据集。在右边,我们[听不清]来自[听不清]数据集的度量。[听不清]我们可以用[听不清]模型创建[听不清]指标,所有的数据开始[听不清]。数据也是高效的。
这是一个演示如何在Ray上集成Spark和Horovod的例子。Horovod是一种流行的分布式模型训练框架。Ray也支持[听不清]。左边的[听不清]几乎在[听不清]之前。用[听不清]数据处理,然后试着把[听不清]数据集从[听不清]数据帧中提取出来,再把[听不清]变成[听不清]数据集。[听不清]它迫使[听不清]定义[听不清]序列函数。函数中[听不清]数据来自[听不清]数据集。然后我们试图[听不清]。然后我们可以[听不清]在Ray的基础上用Horovod进行模型训练。
这个例子展示了如何在Ray之上集成Spark[听不清]。RayTune是一个非常流行和强大的超搜索框架。[听不清]几乎是[听不清]数据集,然后是[听不清]模型,还有[听不清]函数。然后我们使用分配[听不清]创造者来得到[听不清]函数。这是由RayTune提供的。然后我们可以用[听不清]和[听不清]进行[听不清]搜索。
如果你想在RayTune上进行多任务处理,你可以等待[听不清]。
接下来,我们将对Ray和RayDP进行总结。Ray是一个通用框架,可以用作端到端数据分析和AI管道的单一基板。
RayDP提供了简单的api,用于在Ray之上运行Spark,并将Spark与分布式机器学习和深度学习框架集成。
想要了解更多信息,你可以访问我们的[听不清]但是,关于如何使用RayDP和Ray之上的其他[听不清]的例子。
好了,就这些,谢谢。

卡森王

卡森王

Carson Wang是英特尔数据分析软件组的软件工程经理,在那里他专注于优化流行的大数据和机器学习框架,推动构建c…
阅读更多

咸阳刘

咸阳是英特尔公司的一名软件工程师。他在大数据和分布式系统方面有超过4年的经验。他也是Apache Spark、Ray和其他分布式框架的积极贡献者。
阅读更多