TensorFlow 与 ApacheFlink 的结合(一)| 学习笔记

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
简介: 快速学习 TensorFlow 与 ApacheFlink 的结合。

开发者学堂课程【Apache Flink 入门到实战 - Flink 开源社区出品 TensorFlow 与 ApacheFlink 的结合(一)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/632/detail/10040


TensorFlow 与 ApacheFlink 的结合(一)

 

内容介绍:

一、Background(背景)

二、Machine Leaming On Flink(机器学习如何在 Flink 集群上运行)

三、TensorFlow On Flink(TensorFlow 如何在 Flink 集群上运行)

 

一、Background(背景)

TensorFlow 是一个开源的机器学习的 framework,在深度学习特别流行。

Flink 是一个分布式的数据处理引擎,被广泛应用在数据处理和特征工程领域。

先介绍一下典型的机器学习工作流程。如图所示,整个流程包含特征工程、模型训练、离线或者是在线预测等环节

image.png

在此过程中,无论是特征工程、模型训练还是模型预测,中间都会产生日志。需要先用数据处理引擎比如 Flink 对这些日志进行分析,然后进入特征工程。

再使用深度学习的计算引擎 TensorFlow 进行模型训练和模型预测。当模型训练好了以后再用 TensorFlow serving 做在线的打分。上述流程虽然可以跑通,但也存在一定的问题,

比如:

1. 同一个机器学习项目在做特征工程、模型训练、模型预测时需要用到 Flink 和 TensorFlow 两个计算引擎,部署相对而言更复杂。

2. TensorFlow 在分布式的支持上还不够友好,运行过程中需要指定机器的 IP 地址和端口号;而实际生产过程经常是运行在一个调度系统上比如 Yarn,需要动态分配 IP 地址和端口号。

3. TensorFlow 的分布式运行缺乏自动的 failover 机制。

针对以上问题,我们通过结合 Flink 和 TensorFlow,将 TensorFlow 的程序跑在 Flink 集群上的这种方式来解决,

 image.png

整体流程如下:

特征工程用 Flink 去执行,模型训练和模型的准实时预测目标使 TensorFlow 计算引擎可以跑在 Flink 集群上。这样就可以用 Flink 一套计算引擎去支持模型训练和模型的预测,部署上更简单的同时也节约了资源。基于以上目标我们建立的一个项目flink-ai-extended

Github: https://github.com/alibaba/flink-ai-extended

 

二、Machine Leaming On Flink(机器学习如何在 Flink 集群上运行)

1.Flink 计算简介image.png

Flink 是一款开源大数据分布式计算引擎,在 Flink 里所有的计算都抽象成 operator,如上图所示,数据读取的节点叫 source operator,输出数据的节点叫 sink operator。source 和 sink 中间有多种多样的 Flink operator 去处理,上图的计算拓扑包含了三个 source 和两个 sink。

2.机器学习分布式拓扑

机器学习分布式运行拓扑如下图所示:

image.png 

在一个机器学习的集群当中,经常会对一组节点(node)进行分组,如上图所示,一组节点可以是 worker(运行算法),也可以是 ps(更新参数)。如何将 Flink 的 operator 结构与 Machine Learning 的 node、Application Manager 角色结合起来?下面将详细讲解 flink-ai-extended 的抽象。

3.Flink-ai-extended 抽象

首先,对机器学习的 cluster 进行一层抽象,命名为 ML framework,同时机器学习也包含了 ML operator。通过这两个模块,可以把 Flink 和 Machine Learning Cluster 结合起来,并且可以支持不同的计算引擎,包括 TensorFlow。

如下图所示:

image.png 

在 Flink 运行环境上,抽象了 ML Framework 和 ML Operator 模块,负责连接 Flink 和其他计算引擎。

4.ML Framework

image.png

ML Framework 分为 2 个角色。

(1)Application Manager(以下简称 am) 角色,负责管理所有 node 的节点的生命周期。

(2)node 角色,负责执行机器学习的算法程序。

在上述过程中,还可以对 Application Manager 和 node 进行进一步的抽象,Application Manager 里面我们单独把 state machine 的状态机做成可扩展的,这样就可以支持不同类型的作业。深度学习引擎,可以自己定义其状态机。

从 node 的节点抽象 runner 接口,这样用户就可以根据不同的深度学习引擎去自定义运行算法程序。

image.png

5.ML Operator

ML Operator 模块提供了两个接口:

(1) addAMRole,这个接口的作用是在 Flink 的作业里添加一个 Application Manager 的角色。Application Manager 角色如上图所示就是机器学习集群的管理节点。

(2) addRole,增加的是机器学习的一组节点。

利用 ML Operator 提供的接口,可以实现 Flink Operator 中包含一个Application Manager 及 3 组 node 的角色,这三组 node 分别叫 role a、 role b,、role c,三个不同角色组成机器学习的一个 cluster。如上图代码所示。

Flink 的 operator 与机器学习作业的 node 一一对应。机器学习的 node 节点运行在 Flink 的 operator 里,需要进行二手手机号买卖数据交换,

原理如下图所示:

image.png

Flink operator 是 java 进程,机器学习的 node 节点一般是 python 进程,java 和 python 进程通过共享内存交换数据。

相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
Linux入门到精通
本套课程是从入门开始的Linux学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
相关文章
|
4天前
|
机器学习/深度学习 自然语言处理 TensorFlow
TensorFlow 实战(六)(2)
TensorFlow 实战(六)
11 0
|
4天前
|
自然语言处理 算法框架/工具 索引
TensorFlow 实战(四)(1)
TensorFlow 实战(四)
19 0
|
4天前
|
自然语言处理 算法 TensorFlow
TensorFlow 实战(六)(3)
TensorFlow 实战(六)
12 0
|
4天前
|
机器学习/深度学习 自然语言处理 TensorFlow
TensorFlow 实战(五)(5)
TensorFlow 实战(五)
13 1
|
4天前
|
机器学习/深度学习 数据可视化 TensorFlow
TensorFlow 实战(六)(1)
TensorFlow 实战(六)
13 0
|
4天前
|
机器学习/深度学习 API TensorFlow
TensorFlow 实战(一)(5)
TensorFlow 实战(一)
12 0
|
4天前
|
机器学习/深度学习 数据挖掘 TensorFlow
TensorFlow 实战(二)(5)
TensorFlow 实战(二)
13 1
|
4天前
|
机器学习/深度学习 TensorFlow API
TensorFlow 实战(二)(1)
TensorFlow 实战(二)
5 0
|
4天前
|
机器学习/深度学习 API TensorFlow
TensorFlow 实战(一)(4)
TensorFlow 实战(一)
15 0
|
4天前
|
机器学习/深度学习 自然语言处理 监控
TensorFlow 实战(四)(5)
TensorFlow 实战(四)
11 0