可伸缩的加速度XGBoost培训Apache火花GPU集群

下载幻灯片

XGBoost是最受欢迎的机器学习库之一,及其引发的集成支持分布式训练一个服务器集群。在2019年引发+人工智能峰会,我们分享GPU加速的火花XGBoost分类和回归模型训练火花2。x集群。这个演讲将介绍最近进展XGBoost及其GPU加速通过Jupyter笔记本在砖上。火花XGBoost一直加强培训与gpu的大型数据集。在块训练数据可以被加载,XGBoost DMatrix将逐步建立外按压。压缩DMatrix数据可以存储在GPU内存或外部内存/磁盘。这些变化使我们火车模型与数据集之外的GPU大小限制。基于梯度的抽样算法还引入了与外部内存达到相应的精度和改进培训gpu性能。XGBoost最近增加了一个新的内核学习排名(LTR)任务。它提供了几种算法:成对排列,λ排名NDC或地图。 These GOU kernels enables 5x speedup on LTR model training with the largest public LTR dataset (MSLR-Web). We have integrated Spark XGBoost with RAPIDS cudf library to achieve end-to-end GPU acceleration on Spark 2.x and Spark 3.0. We achieved a significant end-to-end speedup when training on GPUs compared to CPUs. Accelerated XGBoost turns hours of training into minutes with a relatively lower cost. We will share our latest benchmark results with large datasets including the publicly available 1TB Criteo click logs.

看更多的火花+人工智能会话
orgydF4y2Ba
免费试着砖

视频记录

嘿,大家好。我的名字叫荣,我和我的同事在这里鲍比,我们都从NVIDIA。今天,我们将和你谈谈跑步XGBoost训练与GPU加速的火花。

可伸缩的加速度XGBoost培训火花GPU集群

这个演讲我们主要有两个部分。在第一部分中,我要告诉你一点关于XGBoost本身,做一种深潜的话题。一个是基于对梯度采样,另一种是在学习。然后我会交给鲍比,我们将讨论XGBoost培训运行不同版本的火花2。3.0 x和火花。

第一点,一点XGBoost。

你知道,如果我们面对面坐在这一点我可能会问你如果你XGBoost之前使用。但是希望如果你看这个演讲,你至少听说过XGBoost。这是一个开源库,bob下载地址您可以使用它们来构建梯度提高了决策树。这是一个非常受欢迎的图书馆,它的使用在许多科学技术竞赛和数据的挑战。有不少的公司为他们的产品在生产中使用它。它支持不同种类的机器学习程序,从回归到学习分类等级。我们将花费更多的细节,你甚至可以定义自己的自定义目标,所以你可以定义你自己的问题,解决它。

分布式XGBoost

由于这是一个火花AI峰会,很多你可能感兴趣的斯奇林大型集群机器学习问题。

XGBoost本身有很好的支持分布式训练。你可以用它在不同的云环境或Hadoop集群纱。

当然,最好的环境中运行分布式训练使用火花,但它也支持Flink等其他数据流系统的运行。

XGBoost GPU的支持

所以扫描一个集群是训练的一种方式在大的数据集,但有时它可以非常缓慢。GPU加速的集群的大小相同,但如果你加入GPU,你可能会做培训快很多。XGBoost GPU的支持,其实有一段时间了。很容易在CPU使用如果你训练,通常使用嘘算法,构建直方图建立树木。GPU等效叫做gpu_hist。所以基本上,你只需要交换树的方法,从嘘gpu_hist就走,你可以看到它在gpu加速在训练。好的,现在,我要潜水深入一点的两个主题。基于第一个是梯度采样。

核外增加

当你训练XGBoost模型,甚至对于动画的学习程序,通常情况下,你想要适合你的整个训练数据集到内存中。但是如果你这样做在GPU, GPU内存通常小于主系统内存云环境,在典型的部署。我认为目前的GPU 16 gb的RAM,但如果你加快虚拟实例,即使只有一个GPU,你通常可以得到60 - 80 gb的系统内存。所以你处于劣势,如果你想整个dat设置适合GPU内存。

所以即使你加快集群大小的火花,如果你想把所有东西都塞进GPU,它可能还是不可能的。

天真,你能做的是什么,说我把我所有的数据在系统内存或磁盘,在训练中我将流数据。但问题是你要复制你的数据作为PCIe总线,一般得多——它现在非常快,与当前一代,但它仍然比内存访问慢得多,对吧。尤其是GPU内存相比,具有更高的带宽和更低的延迟,而作为PCIe总线。

所以,为了解决此问题,人们尝试了许多不同的事情。一种方法是样本数据,当你构建一个树。这棵树开始建设,然后你可以样本训练数据,我们将样本数据在内存中。这样,你可以减少数据的大小,你必须保持在内存中。

当你构建树,你应该注意你可以使用示例数据,而不是全部数据集。问题是,如果你只是这样做最直接的方法,随机抽样或统一抽样,通常需要至少一半的数据样本中你必须保持合理的准确性。所以你不是真的越来越多,也许你可以双训练数据的大小,但是如果你有10 20 tb的训练数据仍需要大量的gpu集群和一个非常大的。

Gradient-based抽样

为了改进,我们可以尝试的一件事是使用梯度…,采样的测量。当你构建XGBoost这一系列的树,一旦你完成前面的树,你可以通过当前运行您的训练数据模型来获得你的目标函数的输出,你可以计算梯度,这只是第一个外和第二外衍生品。

然后基于梯度,你可以说,我要样本数据的概率成正比和测量梯度。人们已经尝试了不同的方法,基于一个叫做梯度单面抽样(高斯)。它是用于另一个库称为“绿带运动”。

最近,有一个名为最小方差的新算法采样(MVS),这是CatBoost中实现。

对于这个工作,我们实际上MVS XGBoost内部在gpu上实现。这些类型的方法,可以减少样本的大小,仍然得到合理的准确性。你可以下来,可能低至10%的数据,而且还得到一个合理的模型。

最大的数据大小

所以一旦我们实现了该算法,我们测试了这个合成数据集生成的,它有500列。数据是随机生成的。我们尝试在NVIDIA V100 GPU, 16 gb的内存。如果你把所有的记忆,对于这个特定的数据集可以容纳大约900万行一个GPU。当我们启用这个核外模式,即使你保持在记忆的一切,因为我们构建转换数据增量我们仍然可以稍微的行数。但它不是太多。一旦你开始抽样,例如如果你只是样本10%的数据,你可以在一个GPU 8500万行。这是或多或少的大小,大。

培训时间

的培训时间,CPU相比,当你在做CPU训练,无论你是保持所有核心内的或做这种反应堆外的方法,这需要很长一段时间,而GPU的方法。GPU,有趣的是即使我们做的只是他们核外的方法,而没有抽样,它实际上略快,因为我们只做增量数据转换,在训练的开始,然后我们将一切都保存在内存中。所以其实略高于整个数据集上做变换。一旦我们开始做抽样,因为有一些成本与抽样每棵树的开头,所以培训时间是慢,但在精度方面实际上几乎相当于对一些组合hyperprime图片我们逐渐看到一些改善准确性。

模型的准确性

在这里,我们显示反应堆外的训练曲线算法使用不同的采样率。你可以看到,它们很等价的。你看到一些轻微的下降样本太多它可以下降到10%。

好,开关装置。我要谈论下一个话题,就是学习。

学习等级(LTR)简而言之

所以,学习排名是什么?我认为思考是搜索一个很好的例子,你去谷歌在火花和类型。

昨晚我试着这个,当你键入火花有5亿条结果。所以问题是,你如何确定哪些结果展示给用户,一旦你输入这个查询。

谷歌曾有这个网页排名算法。

其实没有一种机器学习算法,它就像另一个图的算法。所以基于传入链接,他们试图找出哪些页面是更重要的。所以你也可以做类似的排名与机器学习方法,利用XGBoost。一旦你有相关页面查询,你可以组织他们基于域的相关性,子域等等。在每一组中,我们可以使用机器学习来决定排名。

当你在XGBoost

XGBoost,基本上你想要的是一个监督训练数据集,所以你知道任何两个url之间的相对排名。

一旦你,然后你可以反复样品这些对排名每一对之间的误差最小化。

LTR算法

所以有三种不同的算法在GPU的支持。第一个是默认,只是两两比较。然后还有两个的意思是平均精度(mAP)和归一化累积获得折扣。他们变化成对的方法,两个实例进一步加重。

启用和测量模型的性能

培训这种学习GPU等级模型,我想,首先你必须使GPU直方图的方法。目标函数的两个是排名的目标,当你评估一个模型,它还需要一个支持排名的客观指标。有一个你可以用很多不同的目标,来优化。

性能——环境和配置

对于绩效评估,我们使用微软的基准数据集。我不会去太多的细节在这里,你可以阅读所有信息的幻灯片。

性能——数字

所以最终结果,一旦我们在GPU上启用的一切,你可以看到三种不同算法的结果,GPU是快很多,10到20,甚至接近30倍比等效的CPU的方法。

现在,我要交给鲍比,谁来谈谈XGBoost运行在不同的火花版本。——感谢荣的引入XGBoost内部的事情。从我们的库存,我们可以看到一个相当大的加速学习利用gpu进行排名。其实20 x加速。这是相当惊人的。但是我想说的是,我们不仅可以得到良好的加速学习,但我们也可以从分类和回归,得到良好的性能由XGBoost提供,通过利用gpu。

如何使用XGBoost火车已经存在的数据?我认为我们需要做的第一件事,是将现有的数据转换为数值数据,是唯一被XGBoost接受的数据格式。

在现实中,我们现有的数据可能不是数字,这意味着我们需要一些ETL工具。问题是,哪些工具?

我猜你已经猜到了,它是火花。我假设你有知识的火花,火花是多么强大的受欢迎程度,这样做对我不湾大谈为什么火花。

XGBoost4j——火花

幸运的是,XGBoost社区支持XGBoost火花,XGBoost4j星火项目。XGBoost4j引发项目旨在整合XGBoost和火花,通过拟合XGBoost火花的机器学习库框架。所以与集成,它不仅利用XGBoost的高性能,还利用强大的数据处理引擎的火花。所以,你可以受益很多从XGBoost4j火花项目。

XGBoost +火花2。x +激流

看着整个机器学习工作流程,如果你正在做机器学习,你可能知道训练模型和预测是一个非常小的做你的工作的一部分。你的大部分时间将会花在数据准备,就像图片所示。在左边,有传统的CPU驱动的工作流。数据工程师早上开始,通过编写一些代码来告诉数据引擎来做功能关键的应用程序。

他们开始它运行在大数据集,然后他们去买一些咖啡。一段时间后,他们意识到“哦,我忘了添加一个功能,所以我需要改变我的代码并重新启动它。等”。

而另一个,有意想不到的空值和一些丢失的数据。所以我需要更改代码并重新启动一次。所以它不仅仅是一个“发射后不管”的过程,它实际上是一个完整的过程。这一切在一起非常缓慢,因为你不是利用gpu。那么我们如何解决这个问题?我们如何通过gpu加速ETL,所以我们可以更快和机器学习工作流程。是的,急流cuDF是解决方案。实际上,急流cuDF有两个组件:libCudf和语言绑定。LibCudf是一个c++库,它提供了低级api来加速操作,如排序、过滤、加入、聚合等等。

和最重要的是,不同的语言绑定Java、Python。

与急流cuDF,我们想出了一个解决方案来加速XGBoost端到端火花2. x。首先,我们将数据加载到GPU内存。第二,GPU内存资源是非常宝贵的,所以我们需要确保加载更多数据,尽可能多。块加载可以实现这一目标。第三是转换cuDf列稀疏,Dmatrix。最后,我们喂Dmatrix XGBoost和火车模型。

培训在gpu上引发2. x

和这张幻灯片演示了如何训练XGBoost CPU和GPU。左边的代码是CPU。首先,我们需要知道数据帧的数据,然后,我们需要的功能进行向量化。最后我们适应数据帧XGBoost类品种。

右边的列,我们定制的数据读者,了解数据到GPU数据集,我们跳过vectorise特性,因为我们已经将数据加载到GPU内存,用列格式。

相反,我们指定的特性构建Dmatrix时列的长度。最后,我们适合GPU数据集XGBoost分类或回归量。

XGBoost #火花2。x #急流

我们做了一些抵押贷款数据的基准测试。总计190 gb。从图表可以看出,很明显,较短的更好。我们有34个x加速训练时间和6 x节省费用。这是相当相当数量。

在谈论XGBoost和火花3.0之前,如果你还记得,我们有一个定制的GPU数据阅读器和GPU数据集,让cuDf并加速XGBoost火花2.0。我们不能直接使用数据框架的火花,这是因为糟糕的GPU支持2.0火花。但是,正如火花3.0与GPU来调度支持GPU和累积处理,所以有可能引发3.0由GPU加速。

事实上,我们做了这个Rapids-plugin项目。Rapids-plugin实际上是一个项目引发插件,利用gpu加速处理,而急流库,例如cuDF RMM。

3.0无缝集成与火花

所以,急流的插件在火花3.0低端代码更改。这是发生在幕后。在最初的版本中,急流的插件可以用来加速数据帧火花,火花SQL和机器学习/深度学习培训框架。

急流插件

我们一直努力来实现这一点。实际上,我们提供两个独立的插件。第一个是计算ETL插件,使用SQL和DataFrame api,另一个是洗牌插件。但我不想谈论太多关于急流插件,因为我们有一个狭窄的会话覆盖它。所以我强烈建议你看该会话。

XGBoost #火花3.0 #急流

所以急流的插件,我们可以加快XGBoost和理,通过GPU调度,GPU加速数据块加载和读者,运营商也可以通过GPU加速。例如过滤,排序,加入等等。

3.0培训在gpu上火花

从代码中可以看到,我们使用建筑dataframe火花,将数据加载到GPU。我们还vectorise跳过功能,因为火花渲染,将数据加载到GPU内存,列格式。

我们还指定特性列长度XGBoost分类器或XGBoost回归量。最后,我们解决dataframe XGBoost分类器。

XGBoost +火花3 +激流

我们也做了一个基准Criteo 1 tb的数据。

我们有5.5倍加速训练时间和节省费用6.4倍。

新的电子书:加速引发3

我们提供一个新的电子书:加速引发3。在这本书中,您将了解数据处理的进化,从Hadoop gpu和NVIDIA急流图书馆。火花是什么,它是什么和为什么它很重要。的GPU加速、dataframes和火花SQL,端到端的机器学习与XGBoost工作流GPU-accelerated的例子。

这里是一些链接XGBoost。所以我认为这是我们的最后一件事。

看更多的火花+人工智能会话
orgydF4y2Ba
免费试着砖
«回来
关于荣欧

英伟达

荣Ou是Nvidia的首席工程师,工作在机器学习和深度学习基础设施。他介绍了Kubernetes mpi-job支持为分布式Kubeflow培训。英伟达之前,荣是一个谷歌主管工程师。

鲍比王
关于鲍比王

英伟达

鲍比王是一个软件工程师致力于为火花应用GPU加速。他拥有一个女士在通信工程电子科技大学的中国。火花相关工作之前,他曾在Android应用程序/年在高通和英伟达的框架。