热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

第三届ApacheFlink极客挑战赛暨AAIGCUP:ClusterServing概况

▼关注「Flink中文社区」,获取更多技术干货▼摘要:第三届ApacheFlink极客挑战赛正在火热进行中,ClusterServing是

▼ 关注「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 社区的一些集成

Tips:点击「阅读原文」即可回顾第三届极客挑战赛解读视频~ 

420c2a19fb43840f436c0549dca5c136.png GitHub 地址 8d72e69ee231214f87238afd600b75a4.png

欢迎大家给 Flink 点赞送 star~

ccf533ef4d5b25d3dcf83d5e4f0c3276.png

一、Cluster Serving 概况

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

二、AI 产品化面临的挑战

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

1a1fd413284e922c6f12de8b62116ac2.png

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

1533ba401d3470137914eb68049e5662.png

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

  • 易于开发 AI 原型:端到端的 pipelines 部署 AI 原型;

  • 部署零代码修改:开发通常会是在开发机或者笔记本进行,当把代码部署到分布式环境下,不需要有任何代码的改动;

  • 无缝部署:可以直接无缝部署到集群上面的生产环境;

  • 自动化过程:这些部件都能够自动化。

023e1b0f370c50b84b933fd2e9cc5499.png

简单介绍一下 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 应用。

1b0fe57e5dee4d14d40bb8a7e9cfc2a5.png

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

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

99f642dda516b6c1adef904b13041566.png

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

acf28fdf0c1367291b133cdce2657b3e.png

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

83fbc5f60df1df9d6d98494af86de3e5.png

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

490f79ab25aec84b5263a4ec4bee279f.png

架构的优势:

  • 简单的部署:Cluster Serving 已经有官方的 docker 镜像,可以通过镜像一键部署;

  • 广泛的模型支持:支持 TensorFlow、PyTorch、openvino 和 Caffe 等深度学习框架,可以直接导入模型并且在架构上面运行;

  • 低延迟:这是 Flink 的特性,是一个流处理的处理框架;

  • 高吞吐和可扩展性:也是利用 Flink 分布式的特性去进行一个横向扩展。

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

b9aa73dac3a77445d76c2605fa64de53.png

  • 同步 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:

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

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

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

e91a117d6a73d743edc644c0e6912613.png

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

4895b1a131dd751fba995cb2090a99e4.png

四、使用案例

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

e0ae554b34e5914da2e3424eeb26e7d4.png

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

e85d10f65108f63a4185b135453875c6.png

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

6bd40cb751b9a01ed31d9cc5c1f2197a.png

五、Flink 社区的一些集成

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

6dfb0afde0b8533a604a22958a723baf.png

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

c3c4d920aaf00a4b306d3e710c1b487a.png


热点推荐

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

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

  • Flink 1.14 新特性预览


更多 Flink 相关技术问题,可扫码加入社区钉钉交流群~

65798c62e8c96d08853125f195dfc79e.png

 185c206786fec90eac90e391e0d26d39.gif  戳我,回顾极客挑战赛解读视频!



推荐阅读
  • 【论文】ICLR 2020 九篇满分论文!!!
    点击上方,选择星标或置顶,每天给你送干货!阅读大概需要11分钟跟随小博主,每天进步一丢丢来自:深度学习技术前沿 ... [详细]
  • 本文总结了初学者在使用dubbo设计架构过程中遇到的问题,并提供了相应的解决方法。问题包括传输字节流限制、分布式事务、序列化、多点部署、zk端口冲突、服务失败请求3次机制以及启动时检查。通过解决这些问题,初学者能够更好地理解和应用dubbo设计架构。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 开源Keras Faster RCNN模型介绍及代码结构解析
    本文介绍了开源Keras Faster RCNN模型的环境需求和代码结构,包括FasterRCNN源码解析、RPN与classifier定义、data_generators.py文件的功能以及损失计算。同时提供了该模型的开源地址和安装所需的库。 ... [详细]
  • Java如何导入和导出Excel文件的方法和步骤详解
    本文详细介绍了在SpringBoot中使用Java导入和导出Excel文件的方法和步骤,包括添加操作Excel的依赖、自定义注解等。文章还提供了示例代码,并将代码上传至GitHub供访问。 ... [详细]
  • Python已成为全球最受欢迎的编程语言之一,然而Python程序的安全运行存在一定的风险。本文介绍了Python程序安全运行需要满足的三个条件,即系统路径上的每个条目都处于安全的位置、"主脚本"所在的目录始终位于系统路径中、若python命令使用-c和-m选项,调用程序的目录也必须是安全的。同时,文章还提出了一些预防措施,如避免将下载文件夹作为当前工作目录、使用pip所在路径而不是直接使用python命令等。对于初学Python的读者来说,这些内容将有所帮助。 ... [详细]
  • 本文整理了Java中org.apache.solr.common.SolrDocument.setField()方法的一些代码示例,展示了SolrDocum ... [详细]
  • 语义分割系列3SegNet(pytorch实现)
    SegNet手稿最早是在2015年12月投出,和FCN属于同时期作品。稍晚于FCN,既然属于后来者,又是与FCN同属于语义分割网络 ... [详细]
  • 上一章讲了如何制作数据集,接下来我们使用mmcls来实现多标签分类。 ... [详细]
  • 关于VS Code下运行PyTorch的一些小bug及其解决
    一、无法正确识别引用库默认情况下回出现importmatplotlibcouldnotberesolved的提示,可能是没有安装对应的扩展包。首先在anaconda的 ... [详细]
  • YOLOV4 Pytorch版本训练自建数据集和预测
    1.程序下载本文程序核心部分完全参考开源代码:https:github.comWongKinYiuPyTorch_YOLOv4。只是从一种学习的角度去写了我的代码仓库,在基础上增加 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
author-avatar
CH_Double_C
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有