Flink 在AI 中的价值其实和大数据Lambda架构中流批统一这两个概念有关系,Flink为大数据实时化带来的价值也将同样使AI受益

大数据的发展过程


从Google奠基性的“三架马车” 论文发表后的很长一段时间内,大数据的发展主线上都只有批计算的身影。后来随着大家认识到数据时效性的重要作用,Twitter 开源的流计算引擎 Storm 红极一时,各种流计算引擎也纷纷登场,其中也包括了Flink。由于成本、计算准确性和容错性等方面的考虑,各家企业纷纷使用起了被称为 Lambda架构 的解决方案,在同一个架构下融合批计算和流计算,以便在成本,容错和数据时效性之间达到一个平衡

Lambda架构在解决数据时效性的同时也存在一些问题,其中最受诟病的就是其系统复杂度可维护性。用户需要为Batch Layer 和 Speed Layer 各维护一套引擎和代码,还需要保证二者之间的计算逻辑完全一致(图1)

为了解决这个问题,各个计算引擎不约而同的开始了流批统一的尝试,试图使用同一套引擎来执行流和批的任务。经过若干年的大浪淘沙,Spark 和 Flink 成为了目前处于第一梯队的两款主流计算引擎。

  • Flink 是从流计算逐渐进入到批计算,一个非常典型的成功案例就是使用同一套标准的SQL语句对流和批进行查询,并保证最终结果一致性。
  • Spark 则是采用微批 (Micro Batch) 的方式从批计算进入到流计算 提出了Spark Streaming,但是在时延的表现上始终逊色一些。

可以看到,在大数据的发展过程中,Lambda 架构和流批一体背后的原始驱动力是数据实时化。同样是向数据要价值,AI对数据时效性的要求同大数据是一致的。因此AI实时化也将会是一个重要的发展方向。在观察目前主流的AI场景和技术架构时,我们也会发现它们与大数据平台有很多联系和相似之处。

AI 处理阶段


  • 数据预处理(数据准备/特征工程):数据预处理阶段是模型训练和推理预测的前置环节,很多时候它更多的是一个大数据问题。

    • 根据数据预处理后的下游不同,数据预处理可能是批计算也可能是流计算,计算类型和下游一致。
    • 在一个典型的离线训练(批计算)和在线预测(流计算)场景下,训练和预测时要求产生输入数据的预处理逻辑是一致的(比如相同的样本拼接逻辑),这里的需求和Lambda架构中的需求一样,因此一个流批统一的引擎会格外有优势。这样可以避免批作业和流作业使用两个不同的引擎,省去了维护逻辑一致的两套代码的麻烦。
  • 模型训练:目前而言AI训练阶段基本上是批计算(离线训练)产生静态模型(Static Model)的过程。这是因为目前绝大多数的模型是基于独立同分布(IID)的统计规律实现的,也就是从大量的训练样本中找到特征和标签之间的统计相关性(Correlation),这些统计相关性通常不会突然变化,因此在一批样本上训练出的数据在另一批具有相同的特征分布的样本上依然适用。然而这样的离线模型训练产生的静态模型依然可能存在一些问题。 
    • 首先样本数据可能随着时间推移会发生分布变化,这种情况下,在线预测的样本分布和训练样本的分布会产生偏移,从而使模型预测的效果变差。因此静态模型通常需要重新训练,这可以是一个定期过程或者通过对样本和模型的预测效果进行监控来实现
    • 另外,在有些场景下,预测阶段的样本分布可能无法在训练阶段就知晓。举例来说,在阿里双十一,微博热搜,高频交易等这类样本分布可能发生无法预测的分布改变的场景下,如何迅速更新模型来得到更好的预测结果是十分有价值的。
    • 因此一个理想的AI计算架构中,应该把如何及时更新模型纳入考虑。在这方面流计算也有着一些独特的优势。事实上,阿里巴巴在搜索推荐系统中已经在使用在线机器学习,并且在双十一这样的场景下取得了良好的效果。
  • 推理预测:推理预测环节的环境和计算类型比较丰富,既有批处理(离线预测)又有流处理。流式预测又大致可以分为在线 (Online) 预测近线 (Nearline) 预测
    • 在线预测:通常处于用户访问的关键链路(Critical Path中),因此对latency的要求极高,比如毫秒级
    • 近线预测:要求略低一些,通常在亚秒级到秒级
    • 目前大多数纯流式分布式计算(Native Stream Processing)引擎可以满足近线数据预处理和预测的需求,而在线数据预处理和预测则通常需要将预测代码写进应用程序内部来满足极致的低延迟要求。因此在线预测的场景也比较少看到大数据引擎的身影。在这方面Flink的Stateful Function 是一个独特的创新,Stateful Function 的设计初衷是在Flink上通过若干有状态的函数来构建一个在线应用,通过它可以做到超低延迟的在线预测服务,这样用户可以在离线,近线和在线三种场景下使用同一套代码同一个引擎来进行数据预处理和预测。

Flink和AI实时化的架构


目前最典型的AI架构示例是离线训练配合在线推理预测

这个架构存在两个问题:

  • 模型更新的周期通常比较长。
  • 离线和在线的预处理可能需要维护两套代码。

为了解决第一个问题,我们需要引入一个实时训练的链路

  • 在这个链路中,线上的数据在用于推理预测之外还会实时生成样本并用于在线模型训练。在这个过程中,模型是动态更新的,因此可以更好的契合样本发生的变化。

不论是纯在线还是纯离线的链路,都并非适合所有的AI场景。和 Lambda 的思想类似,我们可以把两者结合

同样的,为了解决系统复杂度和可运维性的问题(也就是上面提到的第二个问题),我们希望在数据预处理的部分用一个流批统一的引擎来避免维护两套代码,如下图。不仅如此,我们还需要数据预处理和推理预测能够支持离线,近线和在线的各种Latency要求,所以使用Flink是一个非常合适的选择。尤其是对于数据预处理环节而言,Flink 在流和批上全面完整的 SQL支持可以大大提高的开发效率。

流批一体算法库Alink


Alink 是阿里巴巴机器学习算法团队从 2017 年开始基于实时计算引擎 Flink 研发的新一代机器学习算法平台,提供丰富的算法组件库和便捷的操作框架,开发者可以一键搭建覆盖数据处理、特征工程、模型训练、模型预测的算法模型开发全流程。作为业界首个同时支持批式算法、流式算法的机器学习平台,Alink 提供了 Python 接口,开发者无需 Flink 技术背景也可以轻松构建算法模型。Alink 这个名字取自相关名称(Alibaba, Algorithm, AI, Flink,Blink)的公共部分。

AI训练中迭代收敛是一个最核心的计算过程。Flink从一开始就使用了原生迭代的方式来保证迭代计算的效率。为了帮助用户更好的开发算法,简化代码,进一步提高运行效率。Flink社区也正在统一流和批上迭代的语义,同时对迭代性能进行更进一步的优化,新的优化将尽可能避免迭代轮次之间的同步开销,允许不同批次的数据、不同轮次的迭代同时进行。

当然,在一个完整的AI架构中,除了以上提到的三个主要阶段,还有很多其他工作需要完成,包括对各种数据源的对接,已有AI生态的对接,在线的模型和样本监控和各类周边配套支持系统等。阿里巴巴实时计算负责人王峰(花名莫问)在2019年FFA的主题演讲中的下图很好的总结了其中许多工作。

ALink开源算法


参考资料


六:大数据架构 - Flink + AI的更多相关文章

  1. 后Hadoop时代的大数据架构(转)

    原文:http://zhuanlan.zhihu.com/donglaoshi/19962491 作者: 董飞       提到大数据分析平台,不得不说Hadoop系统,Hadoop到现在也超过10年 ...

  2. WOT干货大放送:大数据架构发展趋势及探索实践分享

      WOT大数据处理技术分会场,PingCAP CTO黄东旭.易观智库CTO郭炜.Mob开发者服务平台技术副总监林荣波.宜信技术研发中心高级架构师王东及商助科技(99Click)顾问总监郑泉五位讲师, ...

  3. 后Hadoop时代的大数据架构

    提到大数据分析平台,不得不说Hadoop系统,Hadoop到现在也超过10年的历史了,很多东西发生了变化,版本也从0.x进化到目前的2.6版本.我把2012年后定义成后Hadoop平台时代,这不是说不 ...

  4. 阿里巴巴飞天大数据架构体系与Hadoop生态系统

    很多人问阿里的飞天大数据平台.云梯2.MaxCompute.实时计算到底是什么,和自建Hadoop平台有什么区别. 先说Hadoop 什么是Hadoop? Hadoop是一个开源.高可靠.可扩展的分布 ...

  5. 大数据架构-使用HBase和Solr将存储与索引放在不同的机器上

    大数据架构-使用HBase和Solr将存储与索引放在不同的机器上 摘要:HBase可以通过协处理器Coprocessor的方式向Solr发出请求,Solr对于接收到的数据可以做相关的同步:增.删.改索 ...

  6. 大数据架构师基础:hadoop家族,Cloudera产品系列等各种技术

    大数据我们都知道hadoop,可是还会各种各样的技术进入我们的视野:Spark,Storm,impala,让我们都反映不过来.为了能够更好的架构大数据项目,这里整理一下,供技术人员,项目经理,架构师选 ...

  7. 学习《深度学习与计算机视觉算法原理框架应用》《大数据架构详解从数据获取到深度学习》PDF代码

    <深度学习与计算机视觉 算法原理.框架应用>全书共13章,分为2篇,第1篇基础知识,第2篇实例精讲.用通俗易懂的文字表达公式背后的原理,实例部分提供了一些工具,很实用. <大数据架构 ...

  8. 一篇了解大数据架构及Hadoop生态圈

    一篇了解大数据架构及Hadoop生态圈 阅读建议,有一定基础的阅读顺序为1,2,3,4节,没有基础的阅读顺序为2,3,4,1节. 第一节 集群规划 大数据集群规划(以CDH集群为例),参考链接: ht ...

  9. 大数据架构师必读的NoSQL建模技术

    大数据架构师必读的NoSQL建模技术 从数据建模的角度对NoSQL家族系统做了比较简单的比较,并简要介绍几种常见建模技术. 1.前言 为了适应大数据应用场景的要求,Hadoop以及NoSQL等与传统企 ...

  10. Hbase和Hive在大数据架构中处在不同位置

    先放结论:Hbase和Hive在大数据架构中处在不同位置,Hbase主要解决实时数据查询问题,Hive主要解决数据处理和计算问题,一般是配合使用.一.区别:Hbase: Hadoop database ...

随机推荐

  1. archlinux xfce 设置fcitx5中文输入法详细教程

    1.安装fcitx5 sudo pacman -S fcitx5-im fcitx5-chinese-addons fcitx5-pinyin-zhwiki fcitx5-im 包含fcitx5的一些 ...

  2. Java面试题【4】

    28)Java 栈和堆的区别 1 栈:为编译器自动分配和释放,如函数参数.局部变量.临时变量等等 2 堆:为成员分配和释放,由程序员自己申请.自己释放.否则发生内存泄露.典型为使用new申请的堆内容. ...

  3. HTTP报文结构

    HTTP报文结构 HTTP报文头 HTTP相应报文 请求方法 状态码

  4. ET介绍——强大的基于.dotnet7+Unity3d的双端C#开源游戏框架

    ET是一个开源的游戏客户端(基于unity3d)服务端双端框架,服务端是使用C# .net core开发的分布式游戏服务端,其特点是开发效率高,性能强,双端共享逻辑代码,客户端服务端热更机制完善,同时 ...

  5. 5 JavaScript变量提升

    5 变量提升 看以下代码, 或多或少会有些问题的. function fn(){ console.log(name); var name = '大马猴'; } fn() 发现问题了么. 这么写代码, ...

  6. 5 HTML表单标签

    5 表单标签 表单主要是用来收集客户端提供的相关信息,提供了用户数据录入的方式,有多选.单选.单行文本.下拉列表等输入框,便于网站管理员收集用户的数据,是Web浏览器和Web服务器之间实现信息交流和数 ...

  7. #cdq分治,树状数组#洛谷 4169 [Violet]天使玩偶/SJY摆棋子

    题目 分析 首先如果不会\(\text{K-DTree}\)的话,那就用CDQ分治吧 这题首先要去绝对值,分四种情况讨论, 只判断左下角的点 然后考虑怎样求最大值,这里采用树状数组,反正只是单点修改单 ...

  8. #线性筛,质数#LOJ 6165 一道水题

    题目 \((lcm_{i=1}^ni)\bmod 10^8+7,n\leq 10^8\) 分析 考虑对于某个质数\(p\),在\(n\)范围内做出的最大贡献为\(p^k(p^k\leq n)\), 线 ...

  9. vue3 快速入门系列 —— vue3 路由

    vue3 快速入门系列 - vue3 路由 在vue3 基础上加入路由. vue3 需要使用 vue-router V4,相对于 v3,大部分的 Vue Router API 都没有变化. Tip:不 ...

  10. 分析即服务(AaaS)是什么?终于有人讲清楚了

    随着世界数据领域的地位和规模的不断扩大,大数据.人工智能和云计算正在结合起来,以分析即服务的形式为企业提供急需的喘息机会 . 让我们简要回顾一下 2010 年以来发生的事情. 这十年来我们见证了许多技 ...