[0017] 以下结合附图对本发明作进一步说说明。
[0018] 本发明是在云环境下应用深度神经网络,提出一种大数据分析系统的自适应配置方法,主要包括三个组件:实时监控大数据分析系统性能的代理程序,系统自适应配置的深度神经网络模型和深度神经网络模型压缩。
[0019] (1)实时监控大数据分析系统性能的代理程序
[0020] 应用服务器性能检测工具,利用Linux sysstat、perfctl及其它Linux内核操作函数来实时监控大数据分析系统的性能,本发明的监控代理程序主要用来监控吞吐量、任务等待时间、执行时间、任务分布、系统能耗等。
[0021] (2)系统自适应配置的深度神经网络模型
[0022] 本发明的深度神经网络模型的输入为CPU数量、内存容量、JVM配置等系统硬件资源和软件配置,输入还包括系统待处理数据;深度神经网络模型的输出为吞吐量、数据分析执行时间、系统时延、每瓦特性能(能效)等系统性能,模型的输入输出可以动态配置。
[0023] 图1为神经网络层次图。
[0024] 在本发明提出的深度神经网络模型中,根据大数据分析系统性能指标集合进行神经元分类标识并按照一定规则连接起来,神经元按照层来布局,包括输入层、输出层和隐藏层。输入层负责接收系统实时监控数据;输出层负责输出神经网络数据抽象和聚合;输入层和输出层之间为隐藏层,中间的隐藏层的层数和神经元节点根据服务器系统迭代能力和系统负载变化周期联合设置。隐藏层数量越多,节点数目越多,模型提取特征的能力就越强,但随之带来的是计算时间和系统能耗的增加。本发明根据实际要求进行设置隐藏层层数和神经元节点数量,并可动态修改配置。除输入层外,每个神经元都有计算能力,每个节点的输入为前一层所有节点输出与连接上的权值乘积之和,经过每个神经元激励函数非线性转换后作为输出。
[0025] 本发明的神经网络模型由4层神经元组成,其中包括一层输入层、两层隐藏层和一层输出层。为了不失一般性,图1中分别给出了4个输入神经元和4个输出神经元,神经网络的两层隐藏层分别由6个神经元(第一层隐藏层)和5个神经元(第二层隐藏层)组成。
[0026] 本发明的神经网络的输入参数用xi表示,所有的输入量形成一个输入向量 即:
[0027]
[0028] 其中x1,x2…分别表示CPU数量、内存容量等系统配置和待处理数据,总共有n个输入量。
[0029] 神经网络的输出数据用yj表示,所有的神经网络输出形成一个输出向量 即:
[0030]
[0031] 其中y1,y2,…分别表示吞吐量、执行时间等系统性能指标,总共有m个输出量。
[0032] 图1中,同一层的神经元之间没有连接,除输入层外,只有第n层的每个神经元与第n‑1层的所有神经元连接,如第5个神经元与输入层的4个神经元都相连,而且每个连接都有一个权值,分别记为w15、w25、w35、w45,这几个权值的初始值由系统启动时设定,记为超参数。通过系统多次实时计算和分析,即可得到该神经网络最合适的连接权值,确定神经网络中的各项参数。第n层的每个神经元的输入为第n‑1层所有神经元输出与连接权值乘积之和,如第5个神经元的输入为输入层中每个神经元也就是系统配置参数和待处理数据与连接权值的乘积,即
[0033] z5=x1·w15+x2·w25+x3·w35+x4·w45
[0034] 用向量表示为
[0035]
[0036] 本发明中,每个神经元经过激励函数非线性转换后作为输出,本发明使用的激励函数为sigmoid函数。由此可得每个神经元的输出为
[0037]
[0038] 输出层每个神经元的输出为
[0039]
[0040] 其中 为前一层上所有神经元与该神经元连接权值, 为前一层所有神经元输出。
[0041] 本发明使用深度神经网络输入系统初始配置参数和大数据处理系统的性能指标要求等参数,预测输出系统性能,通过迭代训练得到大数据处理系统配置参数和大数据系统性能之间的模型。用监督学习的方式来训练深度神经网络模型,实时监控代理程序中监测到的实际系统性能作为目标输出 即:
[0042]
[0043] 其中t1,t2,…分别表示监控代理程序实时监控到的系统吞吐量、执行时间等系统性能数据,共监控m个系统性能值,与神经网络模型的输出数量一致。
[0044] 在本发明中,比较目标输出和神经网络输出就可以得到目标与实际输出的差值,选择合适的代价函数,通过反向传播算法更新神经元节点连接的参数权值。首先通过不断改变系统配置参数,训练神经网络,不断更新参数,得到初始模型。接着不断改变待处理数据输入,继续训练模型并检验模型的准确性。
[0045] 图2为整个系统的架构图。
[0046] (3)深度神经网络模型压缩方法
[0047] 深度神经网络模型压缩是指利用数据集对已经训练好的深度神经网络模型进行精简操作,进而得到一个轻量且准确率相当的神经网络模型。压缩后的网络模型具有更小的结构和更少的参数,可以降低计算和存储开销。
[0048] 本发明在得到稳定的初始神经网络后,在不影响神经网络模型预测准确率的前提下,通过网络剪枝、权值共享、权值量化、权值参数编码等过程,对深度神经网络模型进行压缩。
[0049] 1)网络剪枝
[0050] 网络剪枝指删减神经网络模型中对输出结果影响不大的连接,即去除那些不重要的连接,进而加快模型的计算速度和减小模型的存储。图3是网络剪枝图。在本发明的神经网络剪枝中,删除那些权值较小的连接,再训练模型,即在得到稳定的深度神经网络模型之后,设定一个特定的权值阈值,删除连接权值比所设定阈值小的连接,得到新的神经网络模型,再训练该模型。重复上述步骤,直至达到神经网络系统迭代时间需求。
[0051] 2)权值共享
[0052] 权值共享让一些连接共享一个权值,以达到缩减参数个数的目的。假设相邻两层神经元是全连接,每层由1000个神经元,那么这两层之间就有1000×1000=100万个权值参数。可以将这100万个权值做聚类,用每一类的均值代替这一类中的每个权值大小,这样同属于一类的很多连接共享相同的权值,假设把100万个权值聚成1000个类,则可以把参数个数从100万减少到1000个。所以模型只要存储码本(聚类后的权值)和每个连接在码本中的索引,极大减少了存储空间。
[0053] 3)权值量化
[0054] 在未进行模型压缩之前,神经网络模型的参数一般都用32比特长度的浮点数表示,在本发明中,不需要这么高的精度来表示一个参数,所以可以通过量化,比如用8比特长度存储0~255来表示32比特所表示的精度,通过降低参数精度来提高计算速度和减少存储空间。
[0055] 4)权值编码
[0056] 本发明用霍夫曼编码对权值参数进行编码,首先对权值共享聚类后每个类中的连接进行计数,并按降序排序,对单个类中连接数最多的类的权值用最少位数来编码,并按此类推,以实现缩减存储空间。
[0057] 本发明方法的具体步骤是:
[0058] 步骤1:应用可实时监控大数据分析系统性能的代理程序,监控吞吐量、任务等待时间、执行时间、任务分布、系统能耗等系统参数。
[0059] 步骤2:建立系统自适应配置的深度神经网络模型,神经网络输入为系统配置参数和待处理数据系统性能需求值,输出为系统性能,包括吞吐量、执行时间等。
[0060] 步骤3:训练深度神经网络模型,首先固定待处理数据输入参数不变,改变系统的配置参数,得到初始模型;再不断为该神经网络模型输入数据,训练该模型,检验该模型的准确性。
[0061] 步骤4:通过神经网络模型得到系统配置参数和系统性能的函数关系,生成一张系统配置参数和在不同负载下与系统性能之间的映射表。
[0062] 步骤5:向系统输入所需分析数据与目标系统性能,根据系统配置参数与系统性能的映射表,获取系统配置参数,以实现系统自适应配置。
[0063] 步骤6:通过模型压缩,减小深度神经网络模型的规模,减少计算量,提高模型计算速度。
[0064] 步骤7:循环执行步骤1至步骤6,直到大数据分析系统终止。
[0065] 下面分别对上述实施步骤进行详细说明。
[0066] (1)步骤1
[0067] 基于Linux sysstat、perfctl及其它Linux内核操作函数构建实时监控大数据分析系统性能的代理程序,监控吞吐量、任务等待时间、执行时间、任务分布、系统能耗等系统性能,作为深度神经网络的目标输出,以训练深度神经网络。
[0068] (2)步骤2
[0069] 建立系统自适应配置的深度神经网络,神经网络输入为系统配置参数和待处理数据,输出为系统性能,包括吞吐量、执行时间等。将系统配置参数和待处理数据信息向量化,输入到深度神经网络的输入层;神经网络向量化输出系统性能。本发明中间的隐藏层设置为两层,可根据实际需求更改隐藏层层数和神经元节点数量。神经元与神经元之间连接的权值需初始设置,以便训练神经网络。
[0070] (3)步骤3
[0071] 为了得到神经网络的每个连接上合适的权值,训练神经网络,以确定网络模型参数。本发明通过监督学习来训练该神经网络,首先固定待处理数据输入参数不变,不断改变系统的配置参数,得到系统性能输出向量 与步骤1中得到的实际系统性能相比较,再通过反向传播算法不断更新模型参数,得到初始模型;再不断为该神经网络模型输入数据,同样用监督学习和反向传播算法来训练该模型,检验该模型的准确性。不断训练神经网络,直至达到目标要求。
[0072] 本发明使用的反向传播算法首先从神经网络的输出层开始,比较输出层神经元的输出yi与目标输出ti得到误差项di,di的计算公式根据不同的激励函数有所不同,本发明用的激励函数为sigmoid,
[0073]
[0074] 所以对于输出层神经元i,
[0075] di=yi·(1‑yi)·(ti‑yi)
[0076] 对于隐藏层神经元i,
[0077] di=ai·(1‑ai)·∑wik·dk
[0078] 其中ai是神经元i的输出值,wik是当前层神经元i到它下一层神经元k的连接的权值,dk是神经元k的误差项。
[0079] 最后,更新每个连接上的权值,
[0080] wji=wji+η·di·aj
[0081] 其中wji是神经元j到神经元i的权值,η是学习速率,根据实际大数据处理平台的性能反馈值进行设置,aj是第j个神经云的输出值。
[0082] 本发明使用的反向传播算法的详细描述如下:
[0083]
[0084]
[0085] (4)步骤4
[0086] 根据步骤3中训练所得到的深度神经网络模型,得到系统性能与系统配置和数据输入参数的相关关系,生成映射表,该映射表在实际数据更新并输入计算,依据神经网络不断更新的参数,而不断更新此映射表。
[0087] (5)步骤5
[0088] 针对目标大数据分析系统,向神经网络模型系统输入待处理数据与目标系统性能,根据系统性能与系统配置参数的映射表,获取系统配置参数,以实现系统自适应配置。
[0089] (6)步骤6
[0090] 在得到稳定的深度神经网络后,为了提升计算速度,减少存储空间,降低系统功耗,减小神经网络规模,对深度神经网络进行剪枝以进行模型压缩。
[0091] 首先对模型进行网络剪枝,删减对神经网络模型不重要的参数,具体步骤为首先设置一个权值参数阈值,将每条连接上的权值与阈值相比较,将权值小于阈值的连接进行剪枝,完成全部剪枝后重新训练该神经网络,对训练好的模型再剪枝,再重新训练该神经网络,直到满足所设定条件。
[0092] 以下为网络剪枝算法描述。
[0093]
[0094]
[0095] 网络剪枝得到稀疏连接的神经网络后,通过权值共享,生成一张权值码表,里面记录了权值聚类后每一类的平均权值,而每条连接不需要存储具体权值参数,只需存储码本上对应权值的索引。然后对码本上的权值进行量化操作,用8比特长度的存储来表示32比特的精度。最后对量化后的权值进行霍夫曼编码,进一步缩减存储空间。训练压缩后的神经网络模型,只要对码本上的码字进行更新即可,并不断更新步骤4中的映射表。
[0096] (7)步骤7
[0097] 循环执行步骤1至步骤6,直到大数据分析系统终止。