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

AnalyticsZooClusterServing自动扩展分布式推理

随着深度学习项目从实验到生产的发展,越来越多的应用需要对深度学习模型进行大规模和实时的分布式推理服务。虽然已经有一些工具可用于相关任务(如模型优化、服务、集群调度、工作流管理等等),但对于许多深度学习的工程师和科学家来说,开发和部署能够透明地扩展到大型集群的分布式推理工作流仍然是一个具有挑战性的过程。为了应对这一挑战,我们在AnalyticsZoo0.7.0版本中发布了ClusterServing

随着深度学习项目从实验到生产的发展,越来越多的应用需要对深度学习模型进行大规模和实时的分布式推理服务。虽然已经有一些 工具 可用于相关任务(如模型优化、服务、集群调度、工作流管理等等),但对于许多深度学习的工程师和科学家来说,开发和部署能够透明地扩展到大型集群的分布式推理工作流仍然是一个具有挑战性的过程。

Analytics Zoo Cluster Serving 自动扩展分布式推理

为了应对这一挑战,我们在 Analytics Zoo 0.7.0 版本中发布了 Cluster Serving 的支持。Analytics Zoo Cluster Serving 是一个轻量级、分布式、实时的模型服务解决方案,支持多种深度学习模型(例如 TensorFlow*、PyTorch*、Caffe*、BigDL 和 OpenVINO™的模型)。它提供了一个简单的 pub/sub API(发布 / 订阅),用户可以轻松地将他们的推理请求发送到输入队列(使用一个简单的 Python API)。然后,Cluster Serving 将使用分布式流框架(如 Apache Spark* Streaming、Apache Flink* 等等)在大型集群中进行实时模型推理和自动扩展规模。Analytics Zoo Cluster Serving 的总体架构如图 1 所示。

Analytics Zoo Cluster Serving 自动扩展分布式推理

图 1Analytics Zoo Cluster Serving 解决方案总体框架

Cluster Serving 的工作原理

你可以按照下面的三个简单步骤使用 Cluster Serving 解决方案(如图 2 所示)。

Analytics Zoo Cluster Serving 自动扩展分布式推理

图 2使用 Analytics Zoo Cluster Serving 解决方案的步骤
  1. 在本地节点安装和准备 Cluster Serving 环境

    • 将已经完成训练的模型复制到本地节点。当前支持的模型包括 TensorFlow、PyTorch、Caffe、BigDL 和 OpenVINO 的模型。
    • 在本地节点上安装 Analytics Zoo(例如使用单个 pip Install 命令即可完成)
    • 在本地节点上配置集群服务器,包括模型的文件路径和集群地址(如 Apache Hadoop*YARN 集群、Spark 集群、Kubernetes* 集群等)

    请注意这一点,Cluster Serving 解决方案只需要部署在本地节点上,集群(YARN 或者 Kubernetes)并不需要做任何改动。

  2. 启动 Cluster Serving 服务

    通过在本地节点上运行 startup script 脚本启动 Cluster Serving 服务,例如:

    start-cluster-serving.sh
    

    在后台,Cluster Serving 将自动部署训练好的模型,并以分布式的方式跨集群服务于模型推理请求。您可以使用 TensorBoard* 监测其运行时状态(例如推理吞吐量)。

  3. 分布式实时(流式)推理

    Cluster Serving 提供了一个简单的 pub/sub API(发布 / 订阅),你可以使用这个简单的 Python API 将推理请求轻松地发送到输入队列(当前使用的是 Redis* Streams),例如:

    input =InputQueue()
    input.enqueue_image(id,image)
    

    然后,Cluster Serving 将从 Redis* Streams 读取请求,使用 Spark Streaming 或 Flink 跨集群运行分布式实时推理,并通过 Redis 返回结果。最后,您可以再次使用这个简单的 Python API 获得推理结果,例如:

    output= OutputQueue()
    results= output.dequeue()
    

快速入门示例

你也可以通过运行 Analytics Zoo 0.7.0 版本中提供的快速入门示例来尝试使用 Cluster Serving。快速入门示例包含了使用 Cluster Serving 运行分布式推理流程所需的所有组件,首次使用它的用户能够在几分钟内启动并运行。快速入门示例包含:

  • 一个 Analytics Zoo Cluster Serving 的 Docker Image (已安装所有依赖)
  • 一个示例配置文件
  • 一个训练好的 TensorFlow 模型,以及推理样本数据
  • 一个示例 Python 客户端程序

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

  1. 启动 Analytics Zoo docker

    #dockerrun-itd --namecluster-serving --net=host intelanalytics/zoo-cluster-serving:0.7.0 bash
    
  2. 登录 container 并转到我们准备好的工作目录

    #dockerexec-it cluster-serving bash
    #cdcluster-serving
    
  3. 在 container 内启动 Cluster Serving

    #cluster-serving-start
    
  4. 运行 Python 客户端程序,开始推理

    #pythonquick_start.py
    

以下推理结果应该出现在你本地终端显示上:

image: fish1.jpeg,classification-result:class:1'sprob:0.9974158
image: cat1.jpeg,classification-result:class:287'sprob:0.52377725
image: dog1.jpeg,classification-result:class:207'sprob:0.9226527

如果你希望构建和部署定制的 Cluster Serving 流程,可以从修改快速入门示例中提供的示例配置文件和示例 Python 程序开始。下面是这些文件的大致结构,仅供参考。有关更多详细信息,请参阅 Cluster Serving 编程指南 。

配置文件(config.yaml)如下所示:

## Analytics Zoo Cluster Serving Config Example

model:
# model path must be set
path:/opt/work/model
data:
# default, localhost:6379
src:
# default, 3,224,224
image_shape:
params:
# default, 4
batch_size:
# default, 1
top_n:
spark:
# default, local[*], change this to spark://, yarn, k8s:// etc if you want to run on cluster
master:local[*]
# default, 4g
driver_memory:
# default, 1g
executor_memory:
# default, 1
num_executors:
# default, 4
executor_cores:
# default, 4
total_executor_cores:

Python 程序( quick_start.py )如下所示:

from zoo.serving.clientimportInputQueue, OutputQueue
importos
importcv2
importjson
importtime

if__name__=="__main__":
input_api= InputQueue()

base_path="../../test/zoo/resources/serving_quick_start"

ifnot base_path:
raise EOFError("You have to set your image path")
output_api= OutputQueue()
output_api.dequeue()
path= os.listdir(base_path)
for pinpath:
ifnot p.endswith("jpeg"):
continue
img= cv2.imread(os.path.join(base_path, p))
img= cv2.resize(img, (224,224))
input_api.enqueue_image(p, img)

time.sleep(5)

# get all results and dequeue
result= output_api.dequeue()
for kinresult.keys():
output="image: "+ k +", classification-result:"
tmp_dict= json.loads(result[k])
for class_idxintmp_dict.keys():
output +="class: "+ class_idx +"'s prob: "+ tmp_dict[class_idx]
print(output)

结论

我们很高兴与您分享 Analytics Zoo 0.7.0 版本中提供的这种新的群集模型服务支持,并希望此解决方案有助于简化您的分布式推理工作流并提高您的工作效率。我们很乐意在 GitHub 和邮件列表上听到您的问题和反馈。我们将持续对 Analytics Zoo 进行开发工作,构建统一数据分析和人工智能平台,敬请期待更多关于 Analytics Zoo 的信息。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 我们


推荐阅读
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • Sleuth+zipkin链路追踪SpringCloud微服务的解决方案
    在庞大的微服务群中,随着业务扩展,微服务个数增多,系统调用链路复杂化。Sleuth+zipkin是解决SpringCloud微服务定位和追踪的方案。通过TraceId将不同服务调用的日志串联起来,实现请求链路跟踪。通过Feign调用和Request传递TraceId,将整个调用链路的服务日志归组合并,提供定位和追踪的功能。 ... [详细]
  • ElasticSerach初探第一篇认识ES+环境搭建+简单MySQL数据同步+SpringBoot整合ES
    一、认识ElasticSearch是一个基于Lucene的开源搜索引擎,通过简单的RESTfulAPI来隐藏Lucene的复杂性。全文搜索,分析系统&# ... [详细]
  • ejava,刘聪dejava
    本文目录一览:1、什么是Java?2、java ... [详细]
  • {moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ... [详细]
  • 本人学习笔记,知识点均摘自于网络,用于学习和交流(如未注明出处,请提醒,将及时更正,谢谢)OS:我学习是为了上 ... [详细]
  • BN原理、作用:函数参数讲解:BatchNorm2d(256,eps1e-05,momentum0.1,affineTrue,track_running ... [详细]
  • 「爆干7天7夜」入门AI人工智能学习路线一条龙,真的不能再透彻了
    前言应广大粉丝要求,今天迪迦来和大家讲解一下如何去入门人工智能,也算是迪迦对自己学习人工智能这么多年的一个总结吧,本条学习路线并不会那么 ... [详细]
  • 重入锁(ReentrantLock)学习及实现原理
    本文介绍了重入锁(ReentrantLock)的学习及实现原理。在学习synchronized的基础上,重入锁提供了更多的灵活性和功能。文章详细介绍了重入锁的特性、使用方法和实现原理,并提供了类图和测试代码供读者参考。重入锁支持重入和公平与非公平两种实现方式,通过对比和分析,读者可以更好地理解和应用重入锁。 ... [详细]
  • 学习一门编程语言,除了语法,最重要的是学习解决问题。很多时候单凭自己的能力确实无法做到完美解决,所以无论是搜索引擎、社区、文档还是博客&# ... [详细]
author-avatar
元菱淑亚禎盈
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有