6 智能时代的基础信息架构
DT基础设施:云端—数据—智能
上面从多个维度解构了大数据智能关键技术体系,下面来看智能时代的基础信息架构是怎么样的?笔者根据对主流开源技术平台的粗浅了解做一点展望。
我们知道物理学的核裂变发现后并没有很快就造出原子弹,但却开启了各国的军备竞赛;同样,大数据智能技术也不会马上就带领我们跨入智能时代,但其所开启的智能科学竞赛才刚刚开始。就像2008年Android刚开源时,也不是马上就进入了智能机时代,但却迫使更多的公司加入了Android阵营,而且直接导致了诺基亚的衰落。当前看来,Android带来的移动互联网和智能机革命还在继续,微信、微博、头条、滴滴等众多独角兽服务的名单还在增长。笔者下面提出的云端数据智能架构,Android等智能终端毫无疑问也将是关键载体之一。
如图2-16所示,大数据智能时代的基础信息架构分为两个维度,横向是从数据到智能,纵向是从云到端。大数据的存储管理基于如Hadoop和Spark等基础框架,要实现智能还需要基于如TensorFlow、PyTorch等深度学习系统框架,而基于如OpenStack的云计算框架是实现数据大规模存储、计算和服务的核心支撑平台。基于上述三个方面,构建智能时代的云端—数据—智能基础信息架构,下面分别对其核心技术生态系统进行简要介绍。
图2-16 大数据智能时代的基础信息架构
Hadoop大数据管理:“三个臭皮匠,赛过诸葛亮”
一说到大数据,当然绕不开Hadoop。早在2004年,Doug Cutting开发Nutch(Hadoop的前身)的初衷是为了实现一个大规模的搜索引擎系统,2006年Doug Cutting加入Yahoo之后才从Nutch中独立出Apache Hadoop项目,使得大名鼎鼎的HDFS和MapReduce得以快速发展。简单讲,Hadoop是一个能够对海量大数据进行分布式处理的基础软件平台,核心设计就是HDFS和MapReduce,一个解决分布式存储问题,一个解决大规模分布式并行计算问题。Hadoop的核心思想是分治,通过主仆式架构(Master-Slave)对一个大的问题进行分而治之,各个击破,从而高效处理,就好比俗话讲的“三个臭皮匠,赛过诸葛亮”。围绕HDFS和MapReduce两大核心组件的Hadoop生态系统十分庞大(见图2-17),各外围子系统还处于动态调整和扩张状态。
图2-17 Hadoop生态系统
Hadoop生态系统包括几十项组件,覆盖范围从数据采集(Flume)、交换(Sqoop)、存储(HDFS、Hbase)到挖掘(Mahout)、分析(Drill)、计算(Mapreduce)、管理(Ambari)、云资源调度(YARN)等多个层面。要全部讲清楚一本书都很难,这也不是本书的重点,笔者认为读者要先了解其核心部件的运作原理,再去掌握整个Hadoop技术体系全貌就容易多了。下面我们就来看看Hadoop的两个核心技术组件HDFS和MapReduce(见图2-18)。
图2-18 HDFS与MapReduce的逻辑关系
● HDFS
HDFS是一个分布式文件存储系统,就像传统的文件管理系统一样,可以创建、删除、移动或重命名文件。其核心架构是基于分布式节点组成的,包括一个NameNode节点,负责HDFS系统的元数据服务并控制文件的相关操作,若干个DataNode节点,负责文件分块存储。一般一个文件分为3个备份块分别存储于不同的DataNode之中(图2-18中的A、B、C三个文件,在DataNode中都存储了3份),通过这种方式保障系统的高可靠性和容错性。通常一个Hadoop集群包括一个(或多个)Namenode管理节点和相应的Namenode管理备份节点(Secondary NameNode),以及大量的DataNode数据存储节点。NameNode和DataNode之间的连接为经典的Master-Slave主从式架构。
● MapReduce
HDFS的上层是MapReduce并行计算引擎,MapReduce是最早由Google的Jeffery Dean设计的一个抽象模型,通过将并行化、容错、数据分布、负载均衡等核心技术细节进行封装,从而简化大规模数据的并行计算,MapReduce由一个JobTrackers和若干个TaskTrackers组成。一般来讲,最简单的MapReduce应用包含3个部分:若干个Map函数、Reduce函数和一个Main函数,通过Main函数将作业控制和文件输入/输出操作拉通管理。MapReduce是最经典的大数据集并行计算框架,它由两个可能包含有许多实例(许多Map和Reduce)的操作组成。Map函数接受一组数据并将其转换为一个键/值对列表,使得输入中的每个元素对应一个键/值对,而Reduce函数接受Map函数生成的列表,然后根据它们的键来进行汇总计算(见图2-19)。
图2-19 单词计数器程序(WordCounter)的MapReduce过程
OpenStack云计算:一切皆服务
OpenStack是当前最主流的开源云计算管理平台,支持几乎所有类型的云环境,有计算、网络、对象存储、块存储、身份、镜像服务、门户、测量、部署编排等多个组件,而且组件安装和组网结构十分灵活,可以按需配置,能支持接入多种主流虚拟机软件,如KVM、LXC、Hyper-V、 VMware、XenServer等,其功能架构如图2-20所示。
图2-20 OpenStack功能架构图
同Hadoop核心分布式系统一样,OpenStack也是典型的主仆式架构,分为控制节点和计算节点两种不同功能的节点。OpenStack的主要核心部件包括7个部分:计算Nova,块存储Cinder,网络Neutron,身份管理Keystone,镜像管理Glance,前端管理Horizon和对象存储Swift。其中Nova提供了计算资源的管理,可以管理跨服务器网络的虚拟机实例;身份管理Keystone作为OpenStack的核心模块,为所有其他部件提供认证服务;Glance作为镜像服务,用来注册、登录和检索虚拟机镜像;块存储Cinder提供到虚拟机实例的永久性块存储卷管理;Ceilometer可以用来跟踪OpenStack集群的各种资源消耗,以实现计费和资源监控分析等功能。有兴趣的朋友可以查阅相关资料进行深入学习和理解,由于篇幅关系笔者在这里就不赘述了。
TensorFlow深度学习:流动的张量
2015年11月,Google开源了其内部的第二代人工智能系统TensorFlow,最早由Google Brain团队的研究人员和工程师研发。一经推出,就引起了人工智能领域的研究、应用人员的极大关注。
开源是集聚人气的试金石。大数据时代,技术更需要营销,开源就是对技术人才最佳的营销手段。那什么叫TensorFlow呢?我们可以拆开来理解,一个是Tensor,一个是Flow。
(1)Tensor叫张量,可以理解为N维数组,
比如向量数据可以是二维张量的形式,TensorFlow里面称之为shape,如2D shape(samples, features), samples为样本数,features为每个样本的特征数;时间序列数据可以视为三维张量,如3D shape(samples, timesteps, features), timesteps为一个序列样本包含的时间步数;图像数据可以视为四维张量,如4D shape(samples, width, height, channels),图像有长、宽和通道属性;而视频可以视为五维张量,如5D shape(samples, frames, width, height, channels),视频由多帧图像组成,所以shape多了frames维度。这个张量的维度理论上可以无限扩充,所以说深度学习的成功还得益于 TensorFlow把机器学习带入多维处理时代。
(2)Flow可以理解为基于数据流图的计算,如图2-21所示,数据流图中的节点(Nodes)表示数学操作,也可以表示数据输入节点或输出节点,线(Edges)表示节点之间的输入/输出关系,即表示数据在线上的流动,在节点间可以相互传输和组合多维数组,即张量(Tensor)。TensorFlow的本质就是张量数据从数据流图的一端流动到另一端的计算过程,通过这种方式可以将复杂的数据结构传输至深度神经网络中进行自动分析和处理。TensorFlow灵活的架构支持将深度网络部署到一个或多个CPU、GPU,而且这种数据流图的计算方式也适用于其他相关数据分析领域。
图2-21 TensorFlow数据流图
TensorFlow是一个深度学习基础框架和工具库,旨在让用户可以快速构建和运行特定的深度神经网络系统。TensorFlow的系统架构如图2-22所示,底层为设备和通信资源的管理;上面是核心网络运算操作层,包括基本的网络层数据结构和各种操作算子,还有数据流的执行和分布式计算调度等功能,这些核心操作以Tensor为处理对象,依赖网络和硬件资源分配,来实现各种Tensor的操作和运算;再上面就是API接口层和应用层,API基于C语言实现,可以将不同语言的用户级别代码与底层的核心在运行时(包括设备、网络和计算、调度等)相分离,API层支持Python和C++两种标准接口。
图2-22 TensorFlow系统架构
通过上述分层架构的分析,很明显,TensorFlow在运行时是一个跨平台的深度学习库,硬件设备管理可以实现设备异构特性,支持CPU、GPU、Mobile等不同设备,网络通信依赖gRPC通信协议实现不同设备间的数据传输和更新,部署方式支持单机和分布式,而上层应用支持多种高级语言的调用。
案例分析 TensorFlow数据流图的实现
TensorFlow的数据流图计算是怎么实现的呢?其实很简单,首先定义你的计算图,如图2-23左图实现一个二元函数的计算示例(当然可以基于简单计算图组合成复杂网络图),然后TensorFlow基于该图装载数据进行高效运行。那怎么支持大规模数据呢?分布式就很重要了,如图2-23右图,TensorFlow可以将复杂的图分解为多个块并在多个CPU或GPU上并行,通过这种方式,也可以在数百、数千台服务器上进行分布式并行计算,从而在合理的时间范围内进行大规模数据的深度学习。更多更复杂的实例代码可以参考:https://github.com/aymericdamien/TensorFlow-Examples。
图2-23 从简单计算到多GPU计算示例