Xgboost_Ray在Uber大规模生成落地中的优化与实践

				关注并标星 **3分钟秒懂大数据**
				
				每天1次,打卡阅读
				
				更快更全面获取大数据技术博客

原文链接:Xgboost_Ray在Uber大规模生成落地中的优化与实践

本篇文章将为读者全方面介绍xgboost_ray的设计原理、代码设计、以及它在Uber生成落地中的使用,全文总共分为5部分内容,目录如下:

  1. 引入xgboost_ray的原因
  2. xgboost_ray的架构
  3. xgbosot_ray的功能点
  4. xgboost_ray代码走读
  5. xgboost_ray在uber中的应用

image.png

1.1、什么是xgboost?

XGBoost是陈天奇等人开发的一个开源机器学习项目,高效地实现了GBDT算法并进行了算法和工程上的许多改进,被广泛应用在Kaggle竞赛及其他许多机器学习竞赛中并取得了不错的成绩。

说到XGBoost,不得不提GBDT(Gradient Boosting Decision Tree)。因为XGBoost本质上还是一个GBDT,但是力争把速度和效率发挥到极致,所以叫X (Extreme) GBoosted,两者都是boosting方法。

1.2、为什么使用分布式的xgboost?

•单机进行xgboost训练和预测无法满足大数据量的需求

•单机不支持多GPU加速训练

1.3、当前分布式xgboost有哪些?

•基于spark、Dask、kubernetes

1.4、当前分布式xgboost的不足?

•动态计算图

•容错处理

•多GPU支持

•与超参数集成

1.5、xgboost_ray能做什么?

•每个Ray actors是有状态训练的workers

•容错机制好

•多GPU支持

•支持分布式数据加载

•与分布式超参数优化ray tune的集成

image.png

2.1、分布式Xgbosot_Ray架构图如下:

image.png

Xgboost的分布式逻辑是通过Rabit来完成的,并且用Rabit Tracker完成任务的协调。

Rabit是一个实现Allreduce(规约)和broadcast的容错接口的轻量级库,底层是用socket进行通信的

2.2、Xgbosot_ray 架构图执行逻辑如下:

(1)先在driver端启动一个RabitTracker,RabitTracker提供N个endpoint给worker连接。

(2)每一个xgboost训练节点通过rabit框架和rabitTracker通信完成注册,rabitTracker将这些rabit编号并形成环形网络结构。

(3)当所有的worker结点都建立起完备的网络拓扑关系以后,就可以启动计算任务监控整个执行过程。

2.3、RabitTracker具体执行任务:

RabitTracker是由工程下的tracker.py来创建。具体做的事如下:

  1. 启动daemon线程,提供worker结点注册联接所需的end point,所有的worker结点都可以通过与Tracker程序通信来完成自身状态信息的注册。
  2. co-ordinate worker结点的执行:为worker结点分配Rank编号。基于收到的worker注册信息完成环形网络结构的构建,并广播给worker结点,以确保worker结点之间建立起合规的网络拓扑。
  3. 当所有的worker结点都建立起完备的网络拓扑关系以后,就可以启动计算任务监控整个执行过程。

2.4、分布式Xgbosot_Ray运行原理图如下:

image.png

image.png

image.png

image.png

  1. 在Ray的每个worker节点中使用ray.remote远程调用进行分布式数据集加载;
  2. Driver端分配给每个worker进行xgboost训练,且每个worker都是通过rabit进行通信;
  3. 将每个worker的checkpoint结果和训练评估结果反馈给Driver端。

image.png

3.1、分布式数据集加载:

image.png

•此处分布式数据集加载引用了modin组件

原因:pandas是单核运行的,当大数据量加载入缓存时,会将庞大的dataframe同时拷贝入缓存中,引入modin(ray),充分利用多核cpu

•如何进行分区数据传输

查看分区dataframe数据当前位于哪些节点上,并将分区分配给当前workers结点以最小化跨节点数据传输,且每个分区大小是统一的。

3.2、分布式数据集加载—api使用

image.png

如上图所示:在通过api 编写代码时,先导入所需模块,然后将加载的数据集转为modin dataframe,然后再将训练集和标签集转为xgboost的数据格式。

3.3、xgboost_ray容错机制

在分布式训练中,部分节点一定会出现失败情况,xgboost_ray的容错机制中提供三种恢复方式:

(1)单点恢复

image.png

•默认:单节点从上一次checkpoint中恢复

当在训练的时候,如果某台worker挂掉,xgboost_ray将默认从上一次checkpoint中恢复训练的结果,然后重新进行训练。

(2)Non-elastic(非弹性) 训练

image.png

•warm 重启(从上一次失败的worker节点进行进行重启恢复)

(3)Elastic训练

image.png

•继续在更少的worker上进行训练,直到失败的actors起来

3.4、容错机制—api使用

下图为容错机制的具体配置方式:

image.png

3.5、容错机制–benchmark

image.png

  1. 在少量workers失败情况下,随着挂掉的workes增加,训练时长缓慢增加
  2. 在non elastic训练模式下,训练就表现的很差,基本是其他两种情况的一倍
  3. 在elastic训练模式下,训练表现的最好,在2节点挂掉时候达到最优的训练时长

3.6、基于ray tune超参数调优

image.png

•并行运行多个XGBoost-Ray 训练同时,每个运行具有不同的超参数配置。将训练代码移动到一个函数中,然后将该函数传递给tune.run. 在内部,train将检测是否由tune正在使用并自动报告结果以进行调整。

3.7、基于ray tune超参数调优—api使用

image.png

image.png

4.1、使用xgboost_ray对数据集进行分布式训练,画出代码执行流程图如下:

image.png

下图为训练的具体执行源码,若想看完整流程,可自行在源码中查看

image.png

image.png

4.2、使用xgboost_ray对模型进行推理,流程图如下:

image.png

具体的源码执行过程如下:

image.png

image.png

image.png

5.1、在uber中的应用

image.png

下图为xgboost_ray在Uber中使用的流程图:

image.png

通过使用Spark + xgboost_ray技术进行实现:

image.png

image.png

  1. Transformer:转换器,是一种可以将一个DataFrame转换为另一个DataFrame的算法。Transformer实现了一个方法transform(),它通过附加一个或多个列将一个DataFrame转换为另一个DataFrame。
  2. Estimator:评估器,它是学习算法或在训练数据上的训练方法的概念抽象。Estimator实现了一个方法fit(),它接受一个DataFrame并产生一个转换器。

运用Saprk+xgboost_ray的流程图如下:

image.png

  1. spark中进行数据预处理
  2. 创建ray context
  3. 创建ray Estimator
  4. 使用ray estimator进行训练和与预测集转换
  5. 保存和加载模型

spark+ xgboost_ray 代码使用如下:

image.png

Flink+xgboost_ray进行分布式训练流程图如下:

image.png

以上就是 Xgboost_Ray在Uber大规模生成落地中的优化与实践的讲解内容!觉得好的,点赞,分享,谢谢!!!

				找各类大数据技术文章和面经,就来
				
				    **<3分钟秒懂大数据>**
				
				 随时更新互联网大数据组件内容
				
				   专为学习者提供技术博文
				
				快和身边的小伙伴一起关注我们吧!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

3分钟秒懂大数据

你的打赏就是对我最大的鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值