为什么说 Flink + AI 值得期待?

  • 时间:
  • 浏览:0

不论是纯在线还是纯离线的链路,都并不适合所有的 AI 场景。和 Lambda 的思想类似于于,没这样人才能把两者结合(图5)。

在去年的 FFA 2019 上,阿里巴巴提前大选开源了基于 Flink 的机器学习算法库 Alink [10],并计划将其逐步贡献回 Apache Flink,作为 Flink ML Lib 随 Apache Flink 发布。除了离线学习的算法外,Alink 的一大特色可是为用户提供了在线学习算法,助推 Flink 在 AI 实时化上发挥更大的作用。

除此之外,为了进一步降低系统的冗杂度,Flink 也在模型训练环节进行了一系列努力(图7)。

Lambda 架构在出理 数据时效性的一齐也发生这俩 间题,其中最受诟病的可是其系统冗杂度和可维护性。用户还要为 Batch Layer 和 Speed Layer 各维护一套引擎和代码,还还要保证二者之间的计算逻辑全部一致(图1)。



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

图3

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

为了出理 这俩 间题,各个计算引擎不约而同的随后刚结速了流批统一的尝试,试图使用同一套引擎来执行流和批的任务(图2)。经过若干年的大浪淘沙,Spark [7] 和 Flink 成为了目前发生第一梯队的两款主流计算引擎。Flink 是从流计算逐渐进入到批计算,六个 多多非常典型的成功案例可是使用同一套标准的 SQL 一段话对流和批进行查询,并保证最终结果一致性[8]。而 Spark 则是采用微批 (Micro Batch) 的方法从批计算进入到流计算提出了 Spark Streaming,否则在传输速率的表现上始终逊色这俩 。

图2

在这俩 链路中,线上的数据在用于推理预测之外时会实时生成样本并用于在线模型训练。在这俩 过程中,模型是动态更新的,否则才能更好的契合样本发生的变化。

其中这俩 是 Flink 作为流行的大数据引擎的自有功能,比如丰沛 Connector 生态来对接各种内部内部结构数据源。另这俩 则要依靠 Flink 之外的生态项目来完成,其中比较重要的是 AI Flow。它嘴笨 起源于支持 AI 实时化架构,否则在引擎层并不绑定 Flink,而聚焦于顶层的流批统一工作流抽象,旨在为不同平台,不同引擎和不同系统一齐服务于 AI 实时化的架构提供环境支持。因为篇幅关系在此很多赘述,将另文向没这样人介绍。

创新:人无我有

Flink AI,未来可期。

推理预测环节的环境和计算类型比较丰沛 ,既有批出理 (离线预测)又有流出理 。流式预测又大致才能分为在线 (Online) 预测和近线 (Nearline) 预测。在线预测通常发生用户访问的关键链路(Critical Path 中),否则对 latency 的要求极高,比如毫秒级。而近线预测要求略低这俩 ,通常在亚秒级到秒级。目前大多数纯流式分布式计算(Native Stream Processing)引擎才能满足近线数据预出理 和预测的需求,而在线数据预出理 和预测则通常还要将预测代码写进进程内部内部结构来满足极致的低延迟要求。否则在线预测的场景也比较少就看大数据引擎的身影。在这方面 Flink 的 Stateful Function [9] 是六个 多多独特的创新,Stateful Function 的设计初衷是在 Flink 上通过若干有状态的函数来构建六个 多多在线应用,通过它才能做到超低延迟的在线预测服务,从前用户才能在离线,近线和在线三种场景下使用同一套代码同六个 多多引擎来进行数据预出理 和预测。





Apache Flink 从六个 多多简单的流计算想法随后刚结速,直到今天成长为六个 多多业界流行的实时计算开源项目,使每人个受益,这俩 过程中离不开 Flink 社区中数以百计的代码贡献者和数以万计的用户。没这样人相信 Flink 在 AI 上也才能有所作为,也欢迎更多的人才能加入到 Flink 社区,同没这样人一齐共创并共享 AI 实时化的价值。

参考资料:

正如随后提到的,这俩 架构发生六个 多多间题:

不妨让没这样人简单回顾一下大数据的发展过程。从 Google 奠基性的“三架马车” 3[5] 论文发表后的很长一段时间内,大数据的发展主线上都不才能批计算的身影。随后随着没这样人认识到数据时效性的重要作用,Twitter 开源的流计算引擎 Storm [6] 红极一时,各种流计算引擎也纷纷登场,其中也包括了 Flink。因为成本、计算准确性和容错性等方面的考虑,各家企业纷纷使用起了被称为 Lambda 架构的出理 方案,在同六个 多多架构下融合批计算和流计算,以便在成本,容错和数据时效性之间达到六个 多多平衡。

图6

Flink 在 AI 中的价值嘴笨 和大数据中 Lambda 架构[2]和流批统一这六个 多多概念有关系,Flink 为大数据实时化带来的价值也将同样使 AI 受益。

提高:人有我强

为了出理 第六个 多多间题,没这样人还要引入六个 多多实时训练的链路(图4)。

作者:秦江杰

同样的,为了出理 系统冗杂度和可运维性的间题(也可是后边提到的第六个间题),没这样人希望在数据预出理 的累积用六个 多多流批统一的引擎来出理 维护两套代码(图6)。不仅这样,没这样人还还要数据预出理 和推理预测才能支持离线,近线和在线的各种 Latency 要求,这俩 这俩 使用 Flink 是六个 多多非常大约的选择。尤其是对于数据预出理 环节而言,Flink 在流和批上全面全部的 SQL 支持才能大大提高的开发传输速率。

AI 训练中迭代收敛是六个 多多最核心的计算过程。Flink 从一随后刚结速就使用了原生迭代的方法来保证迭代计算的传输速率。为了帮助用户更好的开发算法,冗杂代码,进一步提高运行传输速率。Flink 社区也正在统一流和批上迭代的语义,一齐对迭代性能进行更进一步的优化,新的优化将尽因为出理 迭代轮次之间的同步开销,允许不同批次的数据、不同轮次的迭代一齐进行。

Flink 社区也正在为此做出努力。大致上来说,哪些 AI 相关的工作才能分成补足,提高和创新三类。下面罗列了其中一累积进行中的工作,这俩 工作你说歌词 与 AI 不直接相关,否则却会对 Flink 更好的服务于 AI 实时化产生影响。

数据预出理 阶段是模型训练和推理预测的前置环节,这俩 这俩 随后它更多的是六个 多多大数据间题。根据数据预出理 后的下游不同,数据预出理 因为是批计算也因为是流计算,计算类型和下游一致。在六个 多多典型的离线训练(批计算)和在线预测(流计算)场景下,训练和预测还要求产生输入数据的预出理 逻辑是一致的(比如相同的样本拼接逻辑),这里的需求和 Lambda 架构中的需求一样,否则六个 多多流批统一的引擎会格外有优势。从前才能出理 批作业和流作业使用六个 多多不同的引擎,省去了维护逻辑一致的两套代码的麻烦。



图5

图7

否则六个 多多理想的 AI 计算架构中,应该把要怎样及时更新模型纳入考虑。在这方面流计算还要着这俩 独特的优势。事实上,阿里巴巴在搜索推荐系统中因为在使用在线机器学习,否则在双十一从前的场景下取得了良好的效果。

帮助用户把目前流行的传输速率学习框架(TensorFlow、PyTorch)整合到 Flink 中。使除了传输速率学习算法开发者之外的用户才能基于 Flink 实现整套 AI 架构。

[1]https://ververica.cn/developers/the-number-of-github-stars-doubled-in-only-one-year/[MOU1]

[2] https://en.wikipedia.org/wiki/Lambda_architecture

[3]https://static.googleusercontent.com/media/research.google.com/en//archive/gfs-sosp4003.pdf

[4]https://static.googleusercontent.com/media/research.google.com/en//archive/mapreduce-osdi04.pdf

[5]https://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf

[6] https://storm.apache.org/

[7] https://spark.apache.org/

[8]https://ci.apache.org/projects/flink/flink-docs-release-1.10//dev/table/sql/index.html

[9] https://statefun.io/

[10] https://github.com/alibaba/alink

[11] https://github.com/alibaba/flink-ai-extended

[12]https://cwiki.apache.org/confluence/display/FLINK/FLIP-39+Flink+ML+pipeline+and+ML+libs

[13]https://ci.apache.org/projects/flink/flink-docs-release-1.10/tutorials/python_table_api.html

[14] https://mp.weixin.qq.com/s/a6Zau9c1ZWTSotl_dMg0Xg

[15]https://ci.apache.org/projects/flink/flink-docs-stable/ops/deployment/kubernetes.html

[16]https://cwiki.apache.org/confluence/display/FLINK/FLIP-27%3A+Refactor+Source+Interface

图4

图8



目前的 AI 大致才能分为数据预出理 (也称数据准备/价值形式工程等),模型训练和推理预测六个 多多主要阶段。下面没这样人逐一来看一看在每个阶段中 AI 实时化需求哪些,又哪些样的间题待出理 。为了便于与大数据的架构做打比方,没这样人姑且认为流计算和批计算作为三种计算类型的划分维度因为将所有基于数据的计算一分为二,这样遗漏了。AI 的各个阶段根据场景不同,也才能归为二者之一。



另外,在这俩 场景下,预测阶段的样本分布因为无法在训练阶段就知晓。举例来说,在阿里双十一,微博热搜,高频交易等类似于于样本分布因为发生无法预测的分布改变的场景下,要怎样越来飞快更新模型来得到更好的预测结果是十分有价值的。



去年 11 月的 Flink Forward Asia 2019(以下简称 FFA) 上 Flink 社区提出了未来发展的好多个主要方向,其中之一可是拥抱 AI [1]。实际上,近年来 AI 持续火热,各种计算框架、模型和算法层出不穷,从三种传输速率上来说,这俩 赛道因为这俩 拥挤了。在这俩 状态下, Flink 将要怎样拥抱 AI,又会为用户带来哪些新的价值?Flink AI 的优劣势分别在哪里?本文将通过对哪些间题的讨论来分析 Flink AI 的发展方向。

综上所述,才能就看在机器学习的每个主要阶段中对 AI 实时化还要重要的需求,那哪些样的系统架构才能有效满足从前的需求呢?

图1

首先样本数据因为随着时间推移会发生分布变化,这俩 状态下,在线预测的样本分布和训练样本的分布会产生偏移,从而使模型预测的效果变差。否则静态模型通常还要重新训练,这才能是六个 多多定期过程因为通过对样本和模型的预测效果进行监控来实现(注意这里的监控三种嘴笨 是六个 多多典型的流计算需求)。

才能就看,在大数据的发展过程中,Lambda 架构和流批一体肩头的原始驱动力是数据实时化。同样是向数据要价值,AI 对数据时效性的要求同大数据是一致的。否则AI实时化也因为是六个 多多重要的发展方向。在观察目前主流的 AI 场景和技术架构时,没这样人也会发现它们与大数据平台有这俩 这俩 联系和类似于于之处。



目前而言 AI 训练阶段基本上是批计算(离线训练)产生静态模型(Static Model)的过程。这因为目前绝大多数的模型是基于独立同分布(IID)的统计规律实现的,也可是从小量的训练样本中找到价值形式和标签之间的统计相关性(Correlation),哪些统计相关性通常不需要总爱变化,否则在一批样本上训练出的数据在另一批具有相同的价值形式分布的样本上依然适用。然而从前的离线模型训练产生的静态模型依然因为发生这俩 间题。