暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

bigdata + AI的一种实现

IT技术小输出 2021-03-31
676
都说现在是人工智能的时代,人工智能的基石就是大量的数据来支撑算法模型的训练。那么大数据和AI的集成就显得尤为重要。目前bigdata + AI大部分都是spark + AI,这种模式难以做到实时智能,下一代bigdata + AI将会朝着实时智能的方向挖掘。
为了适应越来越多的数据已经应用程序与环境不断地交互,新一代分布式机器学习框架Ray,可以基于Ray实现实时智能。

Ray的系统架构:


其中两个比较关键的部分:

1)全局状态存储 GSC(Global Control Store)。系统所有的控制状态存储在 GSC 中,这样系统其他组件可以是无状态的。不仅简化了对容错的支持(出现错误时,组件可以从 GSC 中读取最近状态并重新启动),也使得其他组件可以横向扩展(该组件的复制或碎片可以通过 GSC 状态共享)。

2)自底向上的分布式调度器。任务由 driver 和 worker 自底向上地提交给局部调度器(local scheduler)。局部调度器可以选择局部调度任务,或将任务传递给全局调度器。通过允许本地决策,降低了任务延迟,并且通过减少全局调度器的负担,增加了系统的吞吐量。

可以将Ray作为资源调度组件,可集成Xgboost、tensorflow、sklean等机器学习框架,使得机器学习算法模型可以在Ray上进行分布式的训练推理。那么现在需要解决的是数据来源问题。

Ray Streaming + Ray:

Ray Streaming是Ray本身开发的一种实时计算组件,不管是功能还是架构甚至是现有的API都与flink不能说是一模一样只能说毫无区别^_^。但是Ray Streaming 相比于flink实现了不需要重启整个任务就可以从使故障的taskmanager从检查点恢复;其他flink具有的顶层API如图计算SQL&Table甚至是底层process都没有实现,类似于一个轻量级的flink。并且目前只有蚂蚁金融在使用,开源社区几乎没有发展(高度怀疑蚂蚁其实进行了大量的功能开发,只是没有开源,否则Ray Streaming难以在实际生产中使用)。

Flink + Ray:


使用flink为Ray上继承的Xgboost、tensorflowsklean提供实时数据,可对模型进行实时更新,增量训练。那么首要解决的其实就是数据打通问题。

从上面的架构图是可以看出来的,Ray的数据是存放在Object Store里的,那么将flink处理过的数据存放入object store中就可以解决这个问题,需要将数据类型转换成机器学习使用的数据类型才可以完全解决数据打通问题,下面以Flink_Xgboost_Ray为例:


原生版Xgboost:



可以看到,使用的数据集需要先经过一次加载落地,再被numpy加载转换为DMatrix数据类型输出到模型训练,会有两次数据加载过程。


Flink_Xgboost_Ray



上图看起来和原生版的差不多,区别在于数据集比如说在kafka里,直接输入到flink中进行处理,flink处理之后的数据输出到Ray 的object store中转换为特定的数据类型。这里比原生版的少了一次数据加载落地的步骤,数据的加载落地是非要耗费资源的,省略这一步骤整个系统性能会得到很大的提升,特别是在实时场景下数据流很大的情况下。

Flink_Xgboost_Ray可以实现模型的增量训练和实时更新,实现了实时智能bigdata + AI。


并且FLIP-23是Apache flink没有完全开发完成的model server,可以基于此进一步开发model server,与ray集成。





文章转载自IT技术小输出,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论