彭 琨,丁小波,蔡茂贞,钟地秀,黎蕴玉
(中移互联网有限公司云产品事业部,广州 510000)
基于深度学习的智能技术被广泛应用在计算机视觉、自然语言处理、人机交互、智能决策、推荐系统、安全诊断与防护等各个领域。本文主要围绕计算机视觉领域进行应用分析,结合目前应用现状,图像解析系统主要存在以下几个特点:
(1)图片请求的独立性。人工智能算法服务对图形处理器(Graphics Processing Unit,GPU)有较大的依赖。虽然一个GPU 可以批量识别图片,但在实际应用中无法适用。因为如果请求等待达到批量处理数目再处理,会导致部分请求等待时间过长。在实际应用中,常是一个GPU 承载一个请求。在生产环境中,不可能为满足偶发性的高并发请求部署大量GPU 服务器,这会导致闲时服务器资源的极大浪费。
(2)网络环境复杂、多变。大型业务服务系统往往是由多节点、多集群组成。不同分布式集群系统的拓扑、带宽和延迟等参数各不相同,这导致网络环境复杂。因此同一个网络性能指标在不同的集群、不同的节点,甚至不同的时间点测试时都可能存在不小的差异。网络环境的复杂性造成网络性能的波动。
(3)通信传输数据量大。作为图像识别类服务,必不可少需要依据用户提供的图像进行识别分析。在线图像识别类服务对请求处理有两种情况,一种是直接根据用户提供的图片请求进行应用程序编程接口(Application Program⁃ming Interface,API)请求调用;另一种是先进行图像存储,再进行API 调用。目前主流手机搭配的摄像均达到了千万像素级别,手机拍照的图像分辨率的提升带来了图片容量的增大。一张手机拍摄的图像容量达到MB 以上的存储空间。如果待处理请求量大,不管使用哪一种处理方法,用户请求图像均要在网络中做多节点搬运与同步。
(4)算法处理速度慢。为了保障实际商用中的算法准确率与召回率,数据集规模和网络层数的增加使得深度学习最后的模型也在不断增大,在实际应用调用过程中也需要耗费更多的存储与计算资源。在生产环境中,每台机器算力有限,服务器、GPU 计算资源扩容都需要一定时间进行补给。
综上所述,尽管在不少场景下通过在线的分布式图像解析系统可以实现用户体验的交互,但在更大规模应用上此系统仍存在种种问题与挑战。本文尝试从AI 算法服务系统的架构优化和功能解耦方面出发,旨在通过建立任务分配系统、引入容器化技术、消息队列异步处理来提高分布式系统的稳定性,减少服务器资源浪费,更好地满足图像应用的商用需求。
消息队列通过它异步通信的特点,实现了将系统进行解耦,通过高并发缓冲、流量削锋极大地提升了系统的性能。当前消息队列已经在企业中广泛应用于各种大型分布式系统中,目前主流的消息中间件包括ActiveMQ、Rock⁃etMQ、RabbitMQ及Kafka 等。
RabbitMQ 是一款由Erlang 语言开发的基于高级消息队列协议的开源消息框架,用于在分布式系统中存储和转发消息,其优势在于高可用性、高可靠性、可伸缩性和易用性方面。RabbitMQ 中主要包括消息生产者(Producer)、消息队列任务服务器(broker)、消息消费者(Consumer)几 个 角 色,其 运 行 原 理 如 图1所示。
图1 RabbitMQ运行原理图
整个消息队列服务过程通过消息队列任务服务器连接消息队列生产者和消息队列消费者。消息生产者负责将消息发布到任务服务器;消息消费者负责接收并处理消息,消费者和生产者之间系统解耦。任务服务器包括交换路由(Exchange)、消息队列(Queue)。交换路由用来接收发布的消息,并根据路由策略将这些消息分发到消息队列中。Binding 是基于路由键将交换器和消息队列连接起来的路由规则;Channel是一条双向数据流通道,通过它可以完成发布、接收消息及订阅队列操作。
从平台延展性、功能丰富度、服务优先级、突发情况处理四个维度进行需求分析,并以此进行分布式图像服务系统架构设计。
2.1.1 平台延展性
系统延展性主要考虑针对业务应用扩展的平台延展性和针对业务规模扩大后的服务资源扩展的平台延展性。业务应用方面延展性,即考虑在增加新业务应用情况下,既能兼容之前业务应用,又能保障新业务的稳定扩展。考虑到图像服务系统内主要承载的是图像业务服务,往往一项图像解析能力可以衍生为多项业务场景应用,例如回忆相册、以图搜图、图像去重、影集制作等业务应用。这些业务应用可以用于不同的产品需求下,但其底层所应用的人工智能算法是相近或是一致的。服务资源方面的平台延展性,指的是在服务资源,如GPU、服务器、虚拟机等形式的资源扩展。
2.1.2 功能丰富度
系统设计需支持多语言环境,如C/C++、.NET、JAVA、Go、Python、PHP 等。系统需支持多种业务需求方的客户端,如Web 网页端、Wap/H5 网页端、安卓客户端、iOS 客户端等。系统服务需具备丰富的跨终端、跨平台、跨语言的支撑能力。
2.1.3 服务优先级
服务具有不同的请求优先级,需要在保障基础服务的同时,可以为业务方请求服务设置不同的优先级,请求可以根据实际需求按照优先级从高到低进行处理。
2.1.4 突发情况处理
可对业务请求提供链路追踪服务,既包括历史处理完的请求任务,也包括处理过程中的请求任务。对处理的请求可以逐一溯源,可以查看请求任务流转过程中的全生命周期信息,包括请求来源、请求任务的触发时间、请求任务的子系统、平台之间的流转时间、人工智能算法模块流转时间、请求处理结果等信息,进而可以进行问题的快速定位与排查,保障平台各节点的稳定性。
在实际工程应用中,资源并不是可以无止境扩增;即使服务器能得到有效的补充,也需要考虑服务器资源的整体利用率。故在分布式图像识别系统设计中既需充分考虑算法模块资源高耗损性,也需考虑算法服务资源空闲情况;既需考虑任务管理系统的并发管理能力,也需考虑实时任务即时响应能力。考虑到实际业务应用中需要将系统用于不同的产品需求下,但其底层所应用的人工智能算法是相近或一致的。如图2所示为分布式图像解析系统架构图。
图2 分布式图像解析系统架构图
整个系统组织结构主要包括触点感知模块、任务配置系统、调度执行管理系统、图像处理系统和分布式云存储系统。触点感知模块,相当于网络应用中的用户层,用于获取智能终端等其他电子设备的用户操作行为,并对用户需求进行获取判断。触点感知模块需对来自PC端、移动端的任务进行标注,支持Web 端、微信端、App端、H5端等多种方式的管理。
任务配置系统由请求调度机制与节点调度机制组成,各个模块分布于不同区域。根据业务的请求类型、请求信息和请求中图像属性,判断任务归属的调度执行管理系统中的子模块。根据多端请求,进行任务的过滤与合并,减少多端同步过程中造成的计算资源浪费。根据业务请求中图像数据的存储节点和调度执行管理系统资源池使用情况判断任务分发的处理节点。
调度执行管理系统存在两种管理模块,分别为任务消息队列模块和实时任务分发模块。每种模块都由多个功能相同的分布式管理模块组成。这些管理模块不限于为服务器或部署在服务器的docker 镜像。任务消息队列模块和实时任务分发模块为任务处理方式完全不同的功能模块。任务消息队列模块可以是Kafka、rab⁃bitMQ、ActiveMQ、redis 等消息中间件。实时任务分发模块可以是Apache、Nginx、IIS 等Web服务器。任务配置系统确定任务类型、处理节点与处理优先级,将实时性要求不高的任务推送至指定消息队列中;将需要实时返回结果的任务推送至实时任务分发模块。
图像处理系统由多个图像处理模块组成。为待处理请求中的图像数据提供图像解析服务。图像解析服务包括但不限于图像识别、图像特征提取等深度学习图像算法。
分布式云存储系统作为云存储资源统一管理系统,对所有数据进行云存储与管理。
分布式图像识别系统中主要通过任务配置模块进行系统优化,将具体用户请求根据业务需求进行分配调整,具体任务处理流程如图3所示。
图3 任务处理流程图
获取客户端的用户请求后,需要对用户请求进行获取判断。根据用户图像相关业务需求,通过客户端应用程序将待处理的图像资源上传到云平台协助管理,并将与之相对应的请求交由图像资源任务配置系统。考虑到图像解析请求占用传输带宽是常规请求十几倍甚至上百倍,设计方案中将用户的操作请求进行业务划分,任务配置系统据此建立请求调度机制。依据业务的请求类型、请求信息结合请求中图像属性自动分配任务执行单元。例如图像搜索、图像对比等图像相关请求具有更高的实时权重;对用户资产上传、下载、图像资产查看这类请求的实时权重更低。
确定好处理模块后,系统以传输带宽和服务器间传输时延进行智能化节点调度判断,将请求分配到对应的延时低、带宽占用率少的云平台处理节点。任务分配到实时任务处理模块,会直接调用图像处理系统,为待处理请求提供图像解析服务,请求处理完成后直接返回给用户。任务分配到任务消息队列模块后,会根据请求用户优先级配置消息队列优先级。在任务消息队列中会针对用户在智能终端等其他电子设备上执行不断下拉刷新、查看等重复之前的请求操作,适度调整消息队列优先级,使得用户的请求可以在中度优先级消息队列与低度优先级消息队列中调整。图像处理系统中的图像处理模块在算力资源充沛的情况下,会从其指定的任务消息队列按照优先级获取对应的消息进行图像解析。请求处理完成后直接返回给用户。
本文利用Python 完成主要系统服务的开发,通过docker 镜像完成多功能系统的分布式部署。从实践结果来看,在不增加服务器的基础上,通过将部分请求导流到消息队列,能有效地提升算法服务能力和闲时资源利用率。
本文根据目前人工智能算法应用中处理响应速度问题,针对目前主流的应用程序编程接口请求方式进行分析,提出了结合异步的分布式消息队列图像解析系统,减少算法服务峰值压力,提升闲时资源利用率。这对人工智能算法在云服务中的应用具有一定的指导意义与参考价值。