第三届 Apache Flink 极客挑战赛暨 AAIG CUP:Cluster Serving 概况

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
简介: Cluster Serving 概况以及 Flink 社区的一些集成,帮你更好地应对极客挑战赛。

第三届 Apache Flink 极客挑战赛正在火热进行中,Cluster Serving 是 Analytics Zoo/BigDL 的分布式推理解决方案,可以部署在 Apache Flink 集群上进行分布式运算。本文整理自英特尔机器学习工程师宋佳明在 Flink Forward Asia 2020 分享的议题《Cluster Serving:Distributed and Automated Model Inference on Big Data Streaming Frameworks》。内容包括:

  1. Cluster Serving 概况
  2. AI 产品化面临的挑战
  3. 可扩展的在线推理服务
  4. 使用案例
  5. Flink 社区的一些集成

GitHub 地址
https://github.com/apache/flink
欢迎大家给 Flink 点赞送 star~

点击观看第三届极客挑战赛视频解读

一、Cluster Serving 概况

Cluster Serving 是一个集成的深度学习分布式大数据框架的在线推理器,它的全称是 Analytics Zoo Cluster Serving,是 Intel 开发的一个开源项目,Cluster Serving 是其中的一个模块。

二、AI 产品化面临的挑战

下图中展示了关于机器学习和深度学习的性能表现和数据量,可以看到随着神经网络规模的扩大,它的模型表现性能越来越好。但是模型性能的上限和数据量是紧密相关的,也就是说需要很大的数据去支撑深度学习。

img

下图引用了 Google 一篇论文里的内容,在一个完整的深度学习的应用里,除了深度学习相关的代码,还包括一些其他相关部分,主要包含配置信息、数据的清理、数据预处理,还有监控等相关协调的部分。这些组件全部加起来才可以构成一个完整的深度学习的应用。也就是说,在完成深度学习的代码的同时,去完成一个完整的深度学习应用仍然面临比较大的挑战。

img

给出的解决方案是 Integrated Big Data Analytics and AI,通过一个集成的框架把深度学习应用的相关内容都组合起来。框架能够满足这四个特性:

  • 易于开发 AI 原型:端到端的 pipelines 部署 AI 原型;
  • 部署零代码修改:开发通常会是在开发机或者笔记本进行,当把代码部署到分布式环境下,不需要有任何代码的改动;
  • 无缝部署:可以直接无缝部署到集群上面的生产环境;
  • 自动化过程:这些部件都能够自动化。

img

简单介绍一下 Analytic Zoo 架构:

  • 底层是一些环境,不管是安装在集群还是笔记本都可以。环境里面预置安装了一些底层的库:包括深度学习框架,像 TensorFlow、pytorch/OpenVINO 等;还包括分布式的分析平台,像 Spark/Flink/Ray 等框架。这里主要介绍 Flink 大数据的框架。还有一些底层 Python library;
  • 再往上会有 API 层面的一些工具,比如 Distributed TensorFlow、PyTorch on Spark,这些工具通过 API 集成了一个深度学习框架和大数据框架,通过简单的封装,能够把深度学习的代码在大数据上面运行起来;
  • 再之上,会有 ML workflow 级别的应用,比如 AutoML 和 Cluster Serving;
  • 最上层是一些开箱即用的应用级别的模型和算法,比如像推荐或者时间序列模型,CV 或者 NLP 应用。

img

三、可扩展的在线推理服务

这里通过一张 TensorFlow 的图来说明在线推理的大致流程。tf-serving 是 TensorFlow 在线推理的 Serving,大致流程就是数据输入,经过数据预处理,然后到已经训练好的模型,去做一个推理,之后再把结果返回回来。这是一条完整的 workflow,这里称之为 Serving。

img

下图是一个简单的 web 推理服务的案例图,右下角是模型文件。系统会把模型文件储存起来,把相关信息保存到元数据里面,通过一个模型的管理组件管理元数据,然后用模型 service Loader 来加载模型。左边是一个 API,API 可以通过 http 或者 grpc 远程调用。它可以访问到 Model service Manager,得到正确的模型的对应版本,然后去完成 service 的过程。

img

上图和 tf-serving 都是一个单机版的推理服务。在大数据的情况下,能否把数据并行处理,把它部署到多节点的集群上,是目前 intel 实现的一个可扩展性分布式推荐服务架构图。

img

下图左边使用的是 Redis,把它作为一个输入和输出的数据管道数据库,右边为主要部分,是基于 Flink 实现的一个分布式的推理。Flink 的 source 会通过 Redis 拿到输入数据,然后通过 Analytics Zoo 里面的一个底层组件去进行推理。当推理结束后,会通过 data sink 写回到 Redis。

img

架构的优势:

  • 简单的部署:Cluster Serving 已经有官方的 docker 镜像,可以通过镜像一键部署;
  • 广泛的模型支持:支持 TensorFlow、PyTorch、openvino 和 Caffe 等深度学习框架,可以直接导入模型并且在架构上面运行;
  • 低延迟:这是 Flink 的特性,是一个流处理的处理框架;
  • 高吞吐和可扩展性:也是利用 Flink 分布式的特性去进行一个横向扩展。

下图展示了从用户的角度来看整个系统是怎么样运行的:

img

  • 同步 API:上面是一个 http 的用户,他把数据封装成一个请求发给 http 的 server,负责去和 Cluster Serving 部署好的机器进行数据通信,server 会把需要的结果返回给用户。也就是说,当发送了请求之后,用户实际上是在等待返回。
  • 异步 API:下面的两条队列实际上是异步的 API,通过一个 python 脚本的方式去调用 Cluster Serving。可以在任何时候把数据放入队列,然后在整个服务运行结束之后把数据存储到数据库里。这样就可以在任何时候再调用另一个 API,去取得结果。

Cluster Serving 启动的方法:

  1. 环境安装好之后,一般 docker 是最简单的方式,安装好之后就可以直接启动,启动之后就相当于服务端已经准备好。
  2. 调用之前所提到的 http 或者 python 的 API,往服务发送一个数据请求,完成一个客户端的操作。

按照下面的步骤运行快速入门示例。有关详细说明,请参阅 Analytics Zoo Cluster Serving 编程指南。

  1. 启动 Analytics Zoo docker。

    docker run -itd --name cluster -serving --net=host intelanalytics/zoo-cluster-serving:0.7.0bash

  2. 登录 container 并转到准备好的工作目录。

    docker exec -it cluster-serving bash

    cd cluster-serving

  3. 在 container 内启动 Cluster Serving。

    cluster-serving-start

两种类型的 API:

1.http 的 API 是一个请求,数据格式以 json 的 string 的形式包装在请求里面,这是一个同步的 API。

2.pop-sub python 是一个异步的 API。数据一般是以 ndarry 或者编码后的字符串。

下图是一个 API 样例,这是一个 http 的 API,包含各种各样的数据类型,目前可以支持普通常数、tensor、sparse tensor、image encoding 等类型。应该是包含了目前在实际使用中遇到的所有数据类型。这些数据类型都包括在一个 json 的 string 里面。可以通过发送一个 curl 命令,去直接拿到结果。

img

下图是 python 的 pub-sub 的 API。可以看到大体上支持的数据类型和使用方法,与 http 的 API 是差不多的,只是数据的表示有一些区别,也有两个 API。通过随便生成的 2 个 ndarry,然后调用了一个 API,就可以把数据放进 Cluster Serving,并调用一个 API 去把数据取回来。

img

四、使用案例

医学影像的推理是一个比较常见的能体现 Cluster Serving 价值的使用案例。含有数量巨大的 x 光胸片,且医学影像中图片的像素点也很多,对实时推理要求很高。在普通的单机情况下,需要做预处理、推理等所有的操作,耗时一般都是要小时级的,但是为了达到对实时性的要求,会通过分布式的框架把耗时缩短到分钟级。

img

接下来介绍跟天池平台合作的一个垃圾分类的比赛,左边是训练过程,通常使用的是 TensorFlow 和 Keras,或者是经过 Analytics Zoo 封装后的 TensorFlow,把一个预训练的模型,进行一个微调 (finetune)。微调之后,拿到测试数据,使用 Flink 在分布式的集群上去调用推理接口,集群的每个节点都部署好了 Analytics Zoo 的模型。实时图片的推理是用分布式的 Cluster Serving 来实现的,通过横向扩展的方式来提高效率。

img

下图是跟天池合作的另一个比赛,这是一个基于流行病学的向量搜索。在比赛里面的模型是一个 autoencode。原始数据经过数据预处理成为了一个词嵌入,然后经过训练得到 vector,在推理阶段使用 Cluster Serving 进行推理。autoencode 模型相比之前的图片模型 resnet50 或者 inception,算是小很多的模型。也就是说,吞吐量本来就已经很高了,在本案例里面,横向扩展的意义并不是明显,但是这次比赛是 Cluster Serving 在第一次在发布后,能够完整的作为一个服务在天池比赛中被应用起来。

img

五、Flink 社区的一些集成

下图中的案例提供了一个把 Cluster Serving 的主要功能,即分布式推理和多模型的支持,包装成为了一个在 Flink 的 Table 上面的 UDF。这是一个简单的例子,可以看到创建了一个 Envirement,然后数据在 csv 里面,通过一个简单 SQL 语法的语句,去做了一个端到端的训练,然后把结果直接打印出来。SQL 运行之后,实际上就是可以直接去把那个 csv 里面的原数据去进行一个分布式的推理,最后输出出来。

img

最后,Flink 2.0 有一个新的特性是 StateFun 函数。这张架构图和之前 Cluster Serving 的主要架构图没有很大的区别。唯一的区别在于数据源 (data source),现在只用了一个单节点的数据源。而之前版本是一个模型只能去启动一个 Flink job,一一对应。现在有了 StateFun 函数的新特性,可以通过一个数据源在拿到数据的时候,进行一个路由 (routing),在路由之后,就可以用一个 Flink job 管理多个模型的分布式推理。

img


热点推荐

Flink Forward Asia 2021 正式启动!议题火热征集中!

30 万奖金等你来!第三届 Apache Flink 极客挑战赛暨 AAIG CUP 报名开始


更多 Flink 相关技术问题,可扫码加入社区钉钉交流群
第一时间获取最新技术文章和社区动态,请关注公众号~

image.png

活动推荐

阿里云基于 Apache Flink 构建的企业级产品-实时计算Flink版现开启活动:
99 元试用 实时计算Flink版(包年包月、10CU)即有机会获得 Flink 独家定制T恤;另包 3 个月及以上还有 85 折优惠!
了解活动详情:https://www.aliyun.com/product/bigdata/sc

image.png

相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
Linux入门到精通
本套课程是从入门开始的Linux学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
相关文章
|
1月前
|
SQL Java API
Apache Flink 2.0-preview released
Apache Flink 社区正积极筹备 Flink 2.0 的发布,这是自 Flink 1.0 发布以来的首个重大更新。Flink 2.0 将引入多项激动人心的功能和改进,包括存算分离状态管理、物化表、批作业自适应执行等,同时也包含了一些不兼容的变更。目前提供的预览版旨在让用户提前尝试新功能并收集反馈,但不建议在生产环境中使用。
593 13
Apache Flink 2.0-preview released
|
1月前
|
存储 缓存 算法
分布式锁服务深度解析:以Apache Flink的Checkpointing机制为例
【10月更文挑战第7天】在分布式系统中,多个进程或节点可能需要同时访问和操作共享资源。为了确保数据的一致性和系统的稳定性,我们需要一种机制来协调这些进程或节点的访问,避免并发冲突和竞态条件。分布式锁服务正是为此而生的一种解决方案。它通过在网络环境中实现锁机制,确保同一时间只有一个进程或节点能够访问和操作共享资源。
68 3
|
1月前
|
分布式计算 监控 大数据
大数据-148 Apache Kudu 从 Flink 下沉数据到 Kudu
大数据-148 Apache Kudu 从 Flink 下沉数据到 Kudu
57 1
|
1月前
|
数据挖掘 物联网 数据处理
深入探讨Apache Flink:实时数据流处理的强大框架
在数据驱动时代,企业需高效处理实时数据流。Apache Flink作为开源流处理框架,以其高性能和灵活性成为首选平台。本文详细介绍Flink的核心特性和应用场景,包括实时流处理、强大的状态管理、灵活的窗口机制及批处理兼容性。无论在实时数据分析、金融服务、物联网还是广告技术领域,Flink均展现出巨大潜力,是企业实时数据处理的理想选择。随着大数据需求增长,Flink将继续在数据处理领域发挥重要作用。
|
3月前
|
存储 消息中间件 Java
Apache Flink 实践问题之原生TM UI日志问题如何解决
Apache Flink 实践问题之原生TM UI日志问题如何解决
46 1
|
2月前
|
SQL 消息中间件 关系型数据库
Apache Doris Flink Connector 24.0.0 版本正式发布
该版本新增了对 Flink 1.20 的支持,并支持通过 Arrow Flight SQL 高速读取 Doris 中数据。
|
3月前
|
消息中间件 监控 数据挖掘
基于RabbitMQ与Apache Flink构建实时分析系统
【8月更文第28天】本文将介绍如何利用RabbitMQ作为数据源,结合Apache Flink进行实时数据分析。我们将构建一个简单的实时分析系统,该系统能够接收来自不同来源的数据,对数据进行实时处理,并将结果输出到另一个队列或存储系统中。
225 2
|
3月前
|
消息中间件 分布式计算 Hadoop
Apache Flink 实践问题之Flume与Hadoop之间的物理墙问题如何解决
Apache Flink 实践问题之Flume与Hadoop之间的物理墙问题如何解决
54 3
|
3月前
|
消息中间件 运维 Kafka
Apache Flink 实践问题之达到网卡的最大速度如何解决
Apache Flink 实践问题之达到网卡的最大速度如何解决
46 2
|
3月前
|
消息中间件 前端开发 Kafka
【Azure 事件中心】使用Apache Flink 连接 Event Hubs 出错 Kafka error: No resolvable bootstrap urls
【Azure 事件中心】使用Apache Flink 连接 Event Hubs 出错 Kafka error: No resolvable bootstrap urls

相关产品

  • 实时计算 Flink版
  • 推荐镜像

    更多