Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

Jiaming Song, Dongjie Shi, Qiyuan Gong, Lei Xia, Wei Du, Jason Dai作者

AnalyticsZoo Cluster Serving自动扩展分布式推理

我们很高兴与您分享 Analytics Zoo 0.7.0 版本中提供的这种新的群集模型服务支持,并希望此解决方案有助于简化您的分布式推理工作流并提高您的工作效率。

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

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自动扩展分布式推理

图 1 Analytics 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 

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

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

#docker exec -it cluster-serving bash
#cd cluster-serving

3. 在 container 内启动 Cluster Serving 

#cluster-serving-start

4. 运行 Python 客户端程序,开始推理 

#python quick_start.py

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

image: fish1.jpeg, classification-result: class: 1's prob: 0.9974158
image: cat1.jpeg, classification-result: class: 287's prob: 0.52377725
image: dog1.jpeg, classification-result: class: 207's prob: 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.client import InputQueue, OutputQueue
import os
import cv2
import json
import time

if __name__ == "__main__":
    input_api = InputQueue()

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

    if not base_path:
          raise EOFError("You have to set your image path")
    output_api = OutputQueue()
    output_api.dequeue()
    path = os.listdir(base_path)
    for p in path:
          if not 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 k in result.keys():
         output = "image: " + k + ", classification-result:"
         tmp_dict = json.loads(result[k])
         for class_idx in tmp_dict.keys():
              output += "class: " + class_idx + "'s prob: " + tmp_dict[class_idx]
         print(output)

结论

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

Analytics Zoo
Analytics Zoo

Analytics Zoo是一个统一的大数据分析+AI平台,它无缝地将Spark、TensorFlow、Keras和BigDL程序集成到一个整合的流水线中,可以透明地扩展到大型Apache Hadoop/Spark集群,用于分布式训练或预测,方便用户构建深度学习端到端的应用。通过该专栏希望和大家一起探讨AI在实际生活中各个领域的创新。

工程工程Analytics Zoo深度学习架构Python
1
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

数据分析技术

数据分析是一类统计方法,其主要特点是多维性和描述性。有些几何方法有助于揭示不同的数据之间存在的关系,并绘制出统计信息图,以更简洁的解释这些数据中包含的主要信息。其他一些用于收集数据,以便弄清哪些是同质的,从而更好地了解数据。 数据分析可以处理大量数据,并确定这些数据最有用的部分。

调度技术

调度在计算机中是分配工作所需资源的方法。资源可以指虚拟的计算资源,如线程、进程或数据流;也可以指硬件资源,如处理器、网络连接或扩展卡。 进行调度工作的程序叫做调度器。调度器通常的实现使得所有计算资源都处于忙碌状态,允许多位用户有效地同时共享系统资源,或达到指定的服务质量。 see planning for more details

人工智能技术

在学术研究领域,人工智能通常指能够感知周围环境并采取行动以实现最优的可能结果的智能体(intelligent agent)

TensorBoard技术

一个信息中心,用于显示在执行一个或多个 TensorFlow 程序期间保存的摘要信息。

Apache Spark技术

Apache Spark是一款快速、灵活且对开发者友好的工具,也是大型SQL、批处理、流处理和机器学习的领先平台。它是一个围绕速度、易用性和复杂分析构建的大数据处理框架,提供了一个全面、统一的框架用于管理各种不同性质(文本数据、图表数据等)数据集和数据源(批量数据或实时的流数据)的大数据处理的需求。

TensorFlow技术

TensorFlow是一个开源软件库,用于各种感知和语言理解任务的机器学习。目前被50个团队用于研究和生产许多Google商业产品,如语音识别、Gmail、Google 相册和搜索,其中许多产品曾使用过其前任软件DistBelief。

Apache Hadoop技术

Apache Hadoop是一套用于在大型集群上(由通用硬件构建)运行应用程序的框架。它实现了Map/Reduce编程范型,计算任务会被分割成小块(多次)运行在不同的节点上。除此之外,它还提供了一款分布式文件系统(HDFS),数据被存储在计算节点上以提供极高的跨数据中心聚合带宽。

模型优化技术

像卷积神经网络(CNN)这样的深度学习模型具有大量的参数;实际上,我们可以调用这些超参数,因为它们原本在模型中并没有被优化。你可以网格搜索这些超参数的最优值,但需要大量硬件计算和时间。改进模型的最佳方法之一是基于在你的领域进行过深入研究的专家的设计和体系结构,他们通常拥有强大的硬件可供使用。常见的简单模型优化技巧包括迁移学习、dropout、学习率调整等

推荐文章
暂无评论
暂无评论~