资源深度学习模型选择在Apache火花

下载幻灯片

深层神经网络(深网)彻底改变了许多机器学习(ML)的应用程序。但有一个更广泛的采用的主要瓶颈:模型选择的痛苦。这个实证过程包括探索网络架构和hyper-parameters深处,常常需要数以百计的试验。唉,大多数毫升系统,包括火花,重点培训一个模型,降低吞吐量和增加成本;一些人还牺牲再现性。我们提出Cerebro,系统提高深层净模型选择吞吐量规模没有提高资源成本和不失重现性和准确性。Cerebro使用一种新颖的并行SGD执行策略从我们的研究我们称之为模型料斗并行。*也足够一般工作上的火花。这个演讲是关于Cerebro及其集成到火花。

首先,我们将审查技术发展水平在这个活跃的研究领域并介绍Cerebro。我们将核心直觉,设计和架构。然后我们将演示实验,考虑资源效率,包括内存/存储使用,运行时,和沟通成本,独立Cerebro可以超越现有系统,包括Horovod和任务并行处理。最后,我们将展示的集成Cerebro使用/延长火花api的火花。我们将描述的挑战和技术实现这一目标所需的努力。我们将展示一些实验展示,Cerebro火花可以引发更多的资源选择用户深度学习模型选择。* Cerebro:高效和可再生的模型选择深入学习系统。Supun Nakandala, Yuhao张,Arun Kumar。ACM SIGMOD 2019认为车间

看更多的火花+人工智能会话

免费试着砖

视频记录

你好,每个人。欢迎来到这次会话。我在这里的两个扬声器,我的名字叫Yuhao。其他演讲者Supun。他将覆盖今年下半年说话。我们将讨论我们的研究项目叫做Cerebro。这是一个资源有效的深度学习模型选择的数据系统。它可以支持多个模型选择算法以及各种后端。火花是我们支持的一个后端。软件是开源和公开的,所以如果你觉bob下载地址得很有意思,请自己试试。 A little bit of self introduction.

关于我们

我们博士生从加州大学圣地亚哥和建议由Arun Kumar教授。我们的研究任务是数据科学民主化,使其显著更容易,更快,更便宜的构建和部署毫升和人工智能的应用。你可以找到更多关于我们的网站。

现在,让我们开始吧。人工神经网络,或者更好的被称为深度学习,彻底改变了许多,许多领域,如机器翻译、自动驾驶,甚至关键域像健康和医学。

也许,你已经考虑使用深度学习在你的下一个项目。但是有一个问题。

问题:培训深网是痛苦的!

训练一个深层净不是微不足道的。深度学习模型是高度非线性的,在很大程度上仍然保持一个黑盒子给用户。结果,你的模型性能取决于几个因素如模型在一个非常复杂的体系结构和hyperparameters率。模型架构如CNN, RNN,你如何定义你的模型。Hyperparameters学习速率、批量大小,是旋钮,可以影响学习过程和最终结果在一个非常深刻的方式。在一起,这些模型配置您必须决定在实际训练之前,很难知道预先组合的这些参数是最好的。结果是,你经常需要运行模型选择和参数优化试验和错误的阶段。对于每个模型配置,您将需要培训一个模型。之后,你可以选择最好的模型。和数量的模型,你需要快速的火车爆炸,因为你有很多的选择。 That’s one pain of deep learning. You don’t just train one model, usually have to train dozens if not hundreds of models. In this example, we have model architectures, batch size, learning rates, as well as regularizations to train. Although we have only four choices, each of them will still end up with over 200 models to train. And the training could be very slow. It can take days to just train one model, let alone 200. We desperately need speed. We need to increase the throughput of model selection. And the solution to it, quite unfortunately and not surprisingly, is money. Distributed deep learning. You purchase more machines, you scale up your cluster so you can have more computational power. In the meantime, you will need to better utilize your machines. Otherwise, they sit idle and your money is wasted. This is where our system, in coming to help, we can help you best utilize your machines and ultimately save your money. Here is the agenda.

我将首先介绍一些背景和现有的解决这个问题,然后我将给你我们的系统和我们的核心技术,拖把,它代表模型料斗并行。然后Supun将接管和谈论拖把在火花的实现。在我们继续之前,你需要知道的第一件事就是我们如何训练模型只是一台机器。最受欢迎的选择训练算法mini-batch SGD。

介绍——mini-batch SGD

它的工作原理如下。这里有你的数据集,九行,三列。

什么算法,它是第一批一些行数据和更新您的模型的基础上,从这个mini-batch梯度计算。

然后再次更新,需要另一个mini-batch,一次又一次。

最后,你的模型有访问所有数据,这就是所谓的一个时代。整个培训过程通常需要多个时代之前,您的模型终于收敛了。这是核心的数据访问模式mini-batch SGD。这个过程中,你可以看到,本质上是连续的。的原因之一的并行和分布式的方式运行该是如此有趣。

现在你知道本地模型是如何训练的。让我们回到我们的问题,这是训练多个模型与mini-batch SGD在相同的数据集,在多个机器。

任务并行性——设置问题

第二,认为你会怎么做。最天真的我是你的数据复制到每台机器和机器复制数据集。

(尴尬)任务并行性

以后,我只发送一个模型一台机器,让机器的火车在隔离。最终我得到训练模型。这当然是令人尴尬的简单和高度平行。哦,很好,是吗?但是有一个问题。如果您的数据集很大,它不适合在一个节点的内存,甚至存储?记住,数据复制,这就是浪费,这是不好的。

好了,你可以使用一个共享文件系统来绕过这个问题。而是存储你在浪费网络这一次因为你的工人现在需要远程种族。这解决了一个问题,但引入了另一个,这仍然是不好的。好了,问题是,我们能做些什么来减轻这个问题吗?

这使我们到另一个分支的研究,数据并行性。在这个计划,你有模型,但这一次你有分区的数据。

数据并行性——设置问题

每个工人只有一个数据集的一部分,所以你不能完全训练模型在单个节点上了。这是数据并行性是如何工作的。

在这个计划中,你训练一个模型。你第一次发送一个模型给你工人和工人培训与本地数据模型。

和主节点收集、更新和通知相应的全局模型。这个过程重复。有几种口味的。如果你只收集更新每个时代,那么它被称为平均模型。不幸的是,模型平均会有严重的收敛性问题,因为它不再是相当于同步SGD。或者,你可以每mini-batch更新。相当于同步SGD。这就是所谓的同步参数服务器。你可以让它异步,使其分散。但这些方法都存在着高通信成本。 Because communications take place every mini-batch. And there could be tens of thousands of mini-batches per epoch, which is not good either. To recap, so far we have seen task parallelism, it has high throughput, but low data scalability and has wastage. On the other hand, we have data parallelism, which is very scalable, but has low throughput because of the high communication cost. A natural question is, can we combine the advantages of both, but somehow leave the disadvantages behind? The answer is yes. The result is model hopper parallelism and Cerebro, our software system that implements it. It has high throughput, high data scalability, low communication cost, low storage wastage, everything you want in one box. The secret to it is model hopper parallelism, or MOP in short. It’s a new type of parallelism that combines the benefits of task and data parallelism. The problem setting is identical to data parallelism, we have models and partitioned data.

模型设置料斗并行性问题

拖把工作如下。

模型料斗并行性

第一步,我们分配一个模型,一个工人,就像任务并行性。我们训练模型完整的本地分区,就像模型平均。

这就是我们所说的sub-epoch之一。接下来是一切的关键,这叫做漏斗模型的原因。我们跳的模型,恢复训练在接下来的工人。模型得到更新和我们又跳。

在一天结束的时候,你可以看到每个模型在顺序访问所有数据,以便他们能快速收敛。整个过程相当于一个时代。此外,我们每个sub-epoch只有沟通,而不是每mini-batch,这样我们可以保持沟通成本低。数据分区,没有浪费。基本上我们之前要求的一切。这是我们的系统,实现MOP Cerebro。

表示“大脑”与拖把数据系统

它有这个窄腰的架构,

支持各种模型搜索和PBT和HyperBand AutoML程序,以及多个深度学习系统和执行后端。深度学习,我们支持TensorFlow PyTorch。后端,我们有火花,Greenplum数据库,以及Cerebro的一个独立的版本。在这次演讲中,我们将关注TensorFlow火花。现在,有请我的联袂演示者,Supun。他将谈论的实现和细节Cerebro和拖把火花。谢谢你!——好吧,让我们来看看一些实现细节的Cerebro Apache的火花。我们实现了Cerebro调度器和Cerebro工人作为一个火花工作。

在火花司机Cerebro调度程序运行

拖把(Cerebro)火花

和Cerebro工人在引发工人。作为底层深度学习框架,我们使用TensorFlow。目前,数据存储层,我们吮吸两种不同的口味,HDFS和NFS。Cerebro接受输入数据的形式引发DataFrames分区铺覆羽他们文件和本地缓存到新的分区里面的工人。

实现细节

为了达到这个目标,下面,我们使用Petastorm库。

使用TensorFlow,我们火车模型只在本地可用数据的分区。

为了实现模型跳跃,我们使用一个共享文件系统,它是山东或NFS。

现在,让我们看看一些细节关于Cerebro api。

例如:选择# Hyperparameter网格搜索模型

作为一个运行的例子,我使用了流行的ImageNet数据集和执行模型选择网格搜索+ hyperparameter搜索工作簿。我探索了两种不同的模型架构,两个学习网格,和两个不同批量大小。

第一步是初始化的步骤。

从pyspark初始化。sql进口SparkSession

像往常一样,您导入常规的Python导入和输入Cerebro你也。然后你SparkSession初始化。

然后创建一个Cerebro-Spark端对象,提供上下文和火花Cerebro作为输入的工人数量。

然后您创建一个HDFS Cerebro HDFS存储对象存储为基础,提供一个前缀的地方到一个目录,这将用于存储所有的中间数据模型选择过程中生成的。

定义模型

初始化后,您就可以定义模型。你需要做的第一件事是定义参数搜索空间通过定义一个字典对象,所有配置参数和分区每个参数的值。我们还提供api定义更复杂的搜索空间,比如那些使用随机样本。

下一步,您需要定义这个工厂方法叫做估计通用函数,将在一个特定的实例搜索空间,并返回一个Cerebro-Spark估计。Cerebro-Spark估计量有一个引用keras模型,学习优化器,需要使用的损失函数,以及批处理大小mini-batch最好的训练。

运行网格搜索

定义模型之后,您可以运行网格搜索。首先,您需要初始化输入DataFrame,使用你喜欢的任何方法,选择执行任何ETL为了使数据的深度学习培训。然后你需要创建Cerebro网格搜索对象,提供火花后端,数据存储,估计生成器函数,作为输入参数,空间。您还需要提供一些其他参数,如多少时代你想训练每个模型,数据的一部分,您需要使用模型验证,功能列的名称和标签列。这个网格搜索对象非常类似于其他任何火花MLlib模型和可以涉及模型选择过程通过调用合适的方法,并提供输入数据帧。成功完成后,它将返回一个总结对象,您可以使用它来访问最好的模型和其他模型,你的模型选择过程中进行了探讨。在模型选择,您可以初始化训练集中的所有模型。使用TensorBoard或MLflow。

接下来,让我们看看一些实验研究。

实验设置中,我使用一个9-node集群,一个主节点和8个工人节点。每个节点有一个Intel Xeon处理器,192 gigbytes内存,一个Nvidia P100 GPU。

——设置——负载测试

作为实验的工作量,我使用了相同的ImageNet工作量我之前解释和亚当作为优化器。此外,我为L2正规化探索两个不同的值,为这个工作负载生成配置16个不同的模型。

测试结果——学习曲线

在这里,我的学习曲线显示我们尝试不同的系统。x轴显示了时代数,范围从1到10。和y轴显示的是前5验证错误,这是标准的指标评价模型ImageNet压力数据。

Cerebro Cerebro-Standalone是我们的版本,直接运行在可用数据文件的文件系统。

收敛,我们看到TensorFlow模型平均收敛非常差,如预期。Horovod收敛比TensorFlow模型平均,但是稍微比其他系统。这样做的原因是其高效mini-batch大小。所有其他的系统,TensorFlow参数服务器异步,芹菜,任务并行系统,Cerebro-Standalone,同样Cerebro-Spark收敛。

测试每个时代——结果——运行时

在运行时,每个时代

我们看到服务器异步TensorFlow参数需要19个小时完成这个工作负载的一个时代的培训。Horovod需要大约5.42小时。这些系统的高运行时的理由是他们的高通信开销。中的所有其他系统完成这个工作负载运行时相对较低,约1.7到1.9小时。

然而,应该注意的是,尽管芹菜低运行时,它有一个存储足迹已吹了八个比特的因素。尽管TensorFlow模型平均较低运行时,它收敛非常糟糕。

另一个要注意的是,深度学习模型训练的要求明显不同于一个典型的数据处理工作负载的要求火花。因此,当运行Cerebro火花,火花必须配置的方式,优化深度学习培训。如何配置的火花Cerebro可以找到的文件系统。

测试——Cerebro-Spark甘特图

这里显示了甘特图产生Cerebro-Spark第一期的培训。每种颜色唯一地标识一个不同的模型配置,你可以看到模型不同工人为了完成一个时代的训练。您还可以看到系统如何实现系统利用率高,很少有空闲时间模型之间跳来跳去。

其他可用Hyperparameter

除了网格搜索,我们也支持其他几个hyperparameter优化算法。诸如人口基础调优、HyperBand亚莎,Hyberopt。

更多的功能来

目前我们还从事其他几个Cerebro特性,比如支持小组学习,转移学习api,并且模型的并行性。

如果你有兴趣学习更多关于Cerebro-Spark,您可以检查我们的公共网站。代码也是开源部分许可协议,可以在Gbob下载地址itHub上访问。如果你更感兴趣关于技术细节Cerebro或拖把,你可以看看博客,或技术报告。

,我想得出这样的结论。

看更多的火花+人工智能会话

免费试着砖
«回来
关于Yuhao张

加州大学圣地亚哥分校

在计算机科学和工程学系博士生加州大学圣地亚哥。Arun Kumar教授的建议。研究兴趣集中在机器学习系统打算使数据科学更容易、更快捷。一直致力于为视频数据系统分析和深入学习模式选择。

关于Supun Nakandala

加州大学圣地亚哥分校

目前我是第三年计算机科学与工程学系的博士生加州大学圣地亚哥。我的研究兴趣广泛交叉的系统和机器学习,一个新兴的领域,越来越多的被称为系统毫升。在这个空间,我操作作为一个数据管理研究。从古典的灵感数据管理技术,我建立新的抽象,算法,提高效率和系统,机器学习工作负载的可伸缩性和可用性。我也感兴趣的大规模应用毫升,打开新系统的挑战。