导读:在如今的大数据在线和离线场景中,Flink + AI已经出现了越来越多的解决方案,作为大数据+AI场景下的顶层工作流抽象,AI Flow提供了端到端的机器学习全流程管理。本文会重点介绍Flink在AI流程中的应用:
首先为大家介绍下大数据处理领域经典的 Lambda 架构。Lambda 架构通过结合代表批模式的 Batch layer 和代表流模式的 Speed layer,使业务在计算成本和计算实时性等方面达到一个平衡。实现 Lambda 架构需要为批模式和流模式各自维护一套相同处理逻辑的代码,开发和维护成本都比较高,这也是 Flink 作为大数据处理框架能够脱颖而出的一个原因,通过 Flink 流批一体的机制,用户可以很方便的通过同一套代码逻辑来实现 Lambda 架构。
在 AI 领域,AI 任务的处理流程一般分为三个部分,即数据预处理阶段、训练阶段和推理预测阶段,应用场景中的各个阶段都有实时性方面的需求。
以上可知,AI 的三个典型阶段都对实时性有着一定的需求,我们思考一个在线训练 + 在线预测的机器学习场景,该场景下通常会将需要预处理的实时消息写入到消息队列中进行在线训练,期间会不断的动态产生模型,然后推送给在线推理模块进行在线推理,与离线训练 + 在线预测架构不同的是,样本的实时产生不仅用于在线预测,还用于在线训练。
为了兼顾在线和离线训练的 AI 场景,我们将两个场景的架构图合并在一起,我们希望在在线和离线的数据预处理上有一个批流一体的引擎来维护,那么 Flink 是一个非常好选择。此外,在线和离线训练中经常会使用深度模型框架,Flink 中可以运行 tensorflow、pytorch 进行模型训练,也就是说 Flink 提供统一的技术同时支持离线和在线数据预处理、模型训练和推理预测。
在 AI 领域中,包括数据处理、样本拼接、模型训练、模型评估和模型预测等阶段,AI Flow 就是通过 Pipeline 将这些流程串联起来,提供一个端到端的服务,给 AI Flow 下一个定义就是:
AI Flow 的基本流程图如上,包括训练 Pipeline, 推理 Pipeline 和监控模块。
先简单介绍下 AI Graph 的概念,AI Flow 的本质是针对不同 AI 场景构造一个 DAG ( 有向无环图 ),我们把这个 DAG 称作 AI Graph,由 AI Node 和 AI Edge 组成:
如上图所示,AI Flow 会将图中的 AI Graph 拆成两个 Job,通过控制节点来确定两个 Job 的调度关系。
上图是 AI Flow 架构原理图, AI Flow 分成两个模块,第一个模块是 AI Flow SDK,提供工作流的定义和编译功能,用户通过 SDK API 编写相应的代码,AI Flow 将用户的代码编译成可执行的工作流;第二个模块是 AI Flow Service,是 AI Flow 提供的多种服务,包括执行定义好的工作流,并支持提交工作流到 Local、K8s 和 Yarn 上。
AI Flow 管理元数据的服务,包括 Project ( 实验项目 ),Example ( 输入数据集 ),Workflow Job ( 运行时信息 ),Model&Relations ( 模型和其他关联关系 ) 和 Artifact ( 输出文件 ),通过这些信息可以方便的对实验、作业进行有效的监控和管理。
用来管理模型的服务,用来进行模型的可视化、多版本管理、参数管理、模型状态管理和模型生命周期的管理。
该服务主要为了支持 AI Flow 的调度,通常用于这样的场景,一个 Job 监听特定 key 上的更新,一旦有另一个 Job 更新了这个 key,那么这个监听 Job 就可以收到通知来进行相应的操作。举个例子,一个节点产生了新的 Model,通过 Notification Service 更新相应的信息,其他监控这个 Model 的 Job 就可以收到通知来进行模型评估或在线预测模型更新。
AI Flow 用来提供一套部署生产环境中机器学习工作流端到端 API,具体来说它具有以下的特点:
Flink AI Flow 是 AI Flow 以 Flink 作为执行引擎的实现,Flink 生态对 AI 强有力的支持使得用 Flink 实现 AI Flow 非常适合,目前 Flink 在 AI 领域生态包括:Flink ML Pipeline、Alink、Pyflink、TF/Pytorch on Flink。
上面是 Flink AI Flow 的架构图,与之前看到到 AI Flow 的架构图不同的是 Flink AI Flow 有着丰富的数据源的支持。
上图是 Flink ML Pipeline 的介绍,主要包括 Transformer 和 Estimator 两个接口的抽象,Transformer 接口抽象主要用在数据处理过程,Estimator 接口抽象主要用在模型训练过程。
如上图,Flink ML Pipeline 为 Flink AI Flow 提供了流水线的基础,Alink 重写了 Flink ML Pipeline 大多数的机器学习的库。
Flink AI Flow 和 ML Pipeline 如何相互工作的?如上图所示,每个虚框都可以代表一个 ML Pipeline,每个 Pipeline 都有一个或者多个 AI Node 构成,Pipeline 之间存在上下游的依赖关系,Flink Job Generator 会将这些 Pipeline 中的 AI Node 组合到一起,翻译成相应的 Flink Job,Flink AI Flow 就基于 Flink ML Pipeline 构成了一个 DAG 图。
考虑到 AI 场景大多是基于 Python 开发的,AI Flow 与 Python 的集成就显得尤为的重要,可以通过设置 AI Flow 的 Job Config 设置 Job 的运行的引擎为 Python,不过本质上是运行一个 Python 的 Job,这样会带来相应的不便,用户需要自己同 connector 打交道。解决这个问题可以通过设置 Job 的引擎为 Flink,这样用户就可以在 AI Flow 中编写 PyFlink,来使用 Flink 丰富的生态功能。
TF on Flink 支持 Tensorflow 代码作为 Flink 的一个操作和 Flink 一起运行,这样可以借助 Flink 实时计算的能力来支持在线训练场景。
广告搜索推荐在 Flink AI Flow 中的应用:
为了实时且准确的广告投放,当用户浏览网页点击鼠标后,用户行为数据作为样本实时投递到在线训练模块,样本数据经过数据处理以后,在训练模块实时到进行训练,每隔一个小时产生一个动态的模型版本,新产生的模型版本会被送入到 Model Center 中进行管理,此时,Notification Service 会向 Evaluate 和 Validate 两个模块进行通知,Evaluate 和 Validate 从 Model Center 中拿到模型进行验证和评估效果,同时也会通知在线预测模块获取最新训练好的模型进行在线预测。
本文转载自: [DataFunTalk](ID:datafuntalk)
原文链接:Flink在AI流程中的应用
领取 专属20元代金券
Get大咖技术交流圈