一种基于长短期记忆网络的云数据中心负载预测方法与流程

文档序号:14714133发布日期:2018-06-16 01:00阅读:315来源:国知局
一种基于长短期记忆网络的云数据中心负载预测方法与流程

本发明云计算技术领域,尤其涉及一种基于长短期记忆网络的云数据中心负载预测方法。



背景技术:

云计算是基于互联网的相关服务的增加、使用和交付模式,通常涉及通过互联网来提供动态易扩展且经常是虚拟化的资源,可以通过网络向海量的,不同优先等级的用户提供按需的计算资源和计算结果。云数据中心中的资源通常采用一种按需付费使用的模式动态地向用户提供服务。

按照美国国家标准技术研究院(National Institute of Standards and Technology,NIST)的定义,这种模式提供可用的、便捷的、按需的网络访问,进入可配置的计算资源共享池(资源包括网络,服务器,存储,应用软件,服务),并且这些资源能够被快速提供。但这些资源往往再多也是不够的,因为信息社会对大规模数据计算的需求巨大,且仍有不断增长之势,经常会出现大规模任务请求“蜂拥而至”的情形。在这种情形下,云数据中心往往因未能将计算资源做最优分配导致计算速度减慢,工作效率低下,大批请求长期处于等待状态,能源空耗等异常情况。这不仅会导致计算服务盈利减少,投入产出比下降,还会损坏信誉和口碑。为保证云数据中心始终正常工作,高效且保质保量地全部计算任务,任务调度必不可少。有效调度的前提是能够提前估计出未来一段时间内各优先级的任务负载和单位任务平均资源申请量,对这两项指标的准确预测是正确调配计算资源,从而达到全局优化的有力保障。

长短期记忆型网络(Long Short-Term Memory,LSTM),是时间递归神经网络(RNN)的一种特殊形式。不同于前馈网络,它不断将自身的输出作为输入,随着递归次数的增加,网络在第t-1个时间步的判断会影响第t个时间步的判断,这种反馈循环与现实生活中“由已知推可知,再推未知”的推导行为在本质上是一致的,该方法是有记忆的。

针对传统RNN存在的“远程学习能力差”(由于存在梯度消失,当学习信息和预测位的间隔拉大,RNN推断能力下降明显)问题,LSTM对每个神经单元进行了改进,设计了细胞状态C和增加,去除信息到细胞状态能力的“门”结构,其内部结构如图2所示。一个门结构由一个sigmoid层h和一个pointwise 乘法操作组成,其目的是用sigmod层产生的权重筛选信息,控制数据流动,决定信息是否通过。一个LSTM单元内拥有三个门:分别是“忘记门”(决定丢弃 C中的哪些信息),“输入门”(决定往C中填入什么信息),和“输出门”(确定输出什么值)。由图2可明显看出:在t时刻,LSTM单元有样本Xt,上一单元输出ht-1,上一单元的细胞状态Ct-1三个输入,这些输入经过门结构的处理形成新的细胞状态Ct和新的单元输出ht并流向下一单元,若干这样的单元首尾相连就形成了长短期记忆网络。随着训练样本不断输入,网络不断学习,提取其规律和特征,所有门结构的权重也会通过优化方法不断调整,最终达到全局最优,实现准确预测。

随着人工智能的不断发展和火热,越来越多的开发框架问世,为学习者和开发者提供了便利Tensorflow是谷歌公司推出的用于数字计算的开源软件库,它将用户设计的算法用一幅数据流图描述。多维数据作为“tensor”(张量)是流动且可以动态调整的,尤其适合神经网络的构建,训练和分类,推理等应用。Tensorflow 提供了丰富的调用方法,可自动求微分和导数,使用户不必编写复杂的计算细节就可构建计算模型;当程序开始执行,Tensorflow可将模型中的节点自动分配到 CPU,GPU等设备上,实现过程优化,最大限度发挥设备的计算潜能;它还具备可移植性,不用修改代码就可将训练好的模型移到手机,服务器或者其它集群中运行,用户群庞大等特点,是目前最流行的人工智能开发平台之一。

综合以上几段对相关技术的介绍和分析,云数据中心的负载预测问题本质上是对时间序列(任务请求量序列和单位请求资源申请量序列)的预测。鉴于云数据中心目前存在的资源无法最优分配问题,需要提出一种以LSTM神经网络为模型,依靠由大量历史数据组成的各优先等级任务请求量序列和单位请求资源申请量序列训练好并完成优化的,准确预测未来一段时间内这两项指标的方法。



技术实现要素:

本发明的目的在于提供一种运行在云数据中心的,基于长短期记忆网络的预测算法,为计算资源的调度提供充足而准确的信息支撑,使调度模块能够提前分析趋势并计划好将要采取的调度方法,及早做好准备,保障云数据中心平稳高效运行。待预测指标可分为两类:任务请求总量,单位是个;单位请求资源申请量,无单位。由于每类又可分为三种,分别对应任务请求的三种优先等级:低级、中级和高级,所以一共有2*3=6种指标。

根据本发明的一个方面,提供了数据集制作方法和一种LSTM神经网络模型的构建方法,包括从文件中读取数据;处理这些数据,将它们“变形”成符合 Tensorflow标准的数据模型,制作由时间序列组成的数据集;初始化LSTM模型输入层和输出层的权重矩阵,偏置矩阵;根据样本批次数量,网络层数,学习率,时间步长等设定好的超参数和权重,偏置矩阵构建LSTM模型,定义模型对数据样本的获取,处理,输出方式。

根据本发明的另一方面,提供了一种把数据样本输入LSTM网络模型,让其学习序列规律,调整各个门结构权重以优化全局的训练方法和迭代式的滚动预测方法,包括用输入的训练样本(在Tensorflow框架里称作“tensor”,此表述下文将经常用到)计算损失函数;以损失函数作自变量用适应性矩估计 (Adaptive moment estimation,Adam)算法进行全局优化;迭代训练,重复以上两步并定时保存调整好的模型,以及进而以测试样本为输入,用“最终版”网络模型迭代输出未来n个时间段某指标的预测值。

综上所述,一种基于长短期记忆网络的云数据中心负载预测方法,包括如下步骤:

S1、用存储在文件中的数据制作历史时间序列和数据集;

S2、构建长短期神经网络模型;

S3、训练LSTM网络:迭代地向长短期神经网络模型中导入训练样本,计算损失函数,并以此为基础进行全局优化,不断提取训练样本的特征以及数值与时序的关系,直至迭代结束;

S4、训练阶段结束后,向长短期神经网络模型;中导入测试样本,迭代输出未来数个时间步待预测指标的数值,形成预测值时间序列。

作为优选,步骤1中将数据集分为两部分:

第一部分为“tensor子集”,以“X子集”代替:所述tensor为一时间序列,是训练或测试时输入LSTM网络的最小单元,长度均为num_step,构建方法是迭代地从矩阵中取出连续数据,转化成列表并填入:

第二部分为“标签子集”,以“Y子集”代替,由每个tensor对应的标签构成,Y子集每个位置上的序列值是X子集对应位置序列值的后继值:

作为优选,步骤2具体为:

步骤2.1、每一批样本输入LSTM网络,网络中每个单元在筛选和处理样本后都会产生两个数值并传入下一个单元:一个称作“细胞状态”,简称C,另一个是“单元输出”,简称h;LSTM网络有num_unit个单元,每批样本中有batch_size个样本序列,故一批样本会先后产生num_unit*batch_size个C值和h 值,即:

步骤2.2、去掉所有c值序列,保留所有h值序列,产生一个新矩阵;

步骤2.3、将这个新矩阵和输出层权重矩阵w_out相乘,再和输出层偏置矩阵b_out相加,得到pred。

作为优选,步骤3具体为:

1)从X,Y两子集中取出第一批batch_size个样本,分别命名为x和y;

2)将x输入LSTM模型,求得pred矩阵;

3)计算损失量tensor loss。

4)以损失量loss和学习率lr为参数,初始化一个适应性矩估计(Adam) 优化器,计算loss的梯度,然后把梯度应用到变量上,更新LSTM网络所有单元中门结构的权重,返回一个包含训练操作输出结果的tensor;

5)从X,Y子集中取出下一批batch_size个样本,更新x和y;

6)如x,y不为空,则重复步骤2-步骤5;否则开始下一次迭代。

作为优选,步骤3中,在LSTM网络训练阶段,给定学习率lr且计算出损失量loss后,采用适应性矩估计(Adaptive moment estimation)方法调整,更新LSTM网络模型中忘记门、输入门和输出门的权重。本发明采用新型的神经网络优化方法:Adam算法取代传统的随机梯度下降法。它通过计算梯度的一阶矩估计和二阶矩估计而为不同的参数设计独立的自适应性学习率,适合求解带有大规模数据和参数,对学习速度要求高的问题。同其它优化算法,如随机梯度下降(SGD)法、动量法和AdaGrad法相比,它收敛速度更快,学习效果更明显,还可纠正学习率消失,陷入局部最优,损失函数波动大等问题。因为对H的预测对速度的需求和准确率很高,所以Adam算法是最优选的。

Adam算法涉及以下几个常数:α是步长因子;β1是一阶矩估计衰减率;β2是二阶矩估计衰减率;ε是非常小的,接近于零的数。在Tensorflow框架中,这四个常数的默认设定分别是0.001,0.9,0.999,10E-8。

设随机目标函数为f(θ),mt是t时刻参数θ的一阶矩向量;vt是t时刻参数θ的二阶矩向量;初始值都为零。算法是迭代进行的,每次迭代都伴随着θ的更新。当θ不收敛时,循环迭代执行以下操作。具体如下:

1)时间步t加1,t=t+1。

2)获得t时刻目标函数对参数θ的梯度,

3)更新一阶矩和二阶矩估计,mt←β1·mt-1+(1-β1)·gt; vt←β2·vt-1+(1-β2)·gt2

4)计算偏差修正后的一阶矩和二阶矩估计,

5)更新参数向量,

这一迭代过程直到θt收敛为止。其中,mt和vt可分别看做对gt绝对值期望和gt平方绝对值的估计。在Tensorflow中,已知学习率就可利用Adam算法构建优化器,训练出各个门结构的最佳权重。

本发明的有益效果如下

本发明所述技术方案能够解决云数据中心中各类别请求到达的无规律性和单位请求资源申请的差异性给请求调度带来的难题,使得云数据中心可以“未雨绸缪”,提前很长时间估计出以后的变化趋势,进而决定资源调配方式和调度算法,使得云数据中心始终能够以状态最优,资源利用最高效的方式运转。将该方案和其它类似方案横向比较,训练所需时间更短,学习效率更高,还能规避常见的局部最优,梯度消失,收敛速度慢等缺陷,这些对十分强调效率的云数据中心都是很有实际意义的。

附图说明

下面结合附图对本发明的具体实施方式作进一步详细的说明:

图1是基于长短期记忆网络的云数据中心负载预测方法的流程图;

图2是长短期记忆网络基本单元的内部结构图;

图3是LSTM网络的完全训练流程;

图4是用测试样本得出预测值序列的流程。

具体实施方式

下面对本发明的实施流程和注意事项做进一步阐述。如前文所述,云数据中心中待预测指标共有六种,但算法中大部分内容均适用于预测这六种指标。如某一步骤对针对不同类型的预测量有不同的处理办法,会有特别说明。算法用python语言编写,导入了Tensorflow、数据分析包pandas、数值计算扩展包 numpy和用来绘制图像的matplotlib.pyplot。在这一部分,待预测的某个指标始终以“H”指代,其余五种指标的预测方法与之大体相同。

S1、用存储在文件中的数据制作历史时间序列和数据集;

历史数据常常存放在csv格式的文件中。要想预测H,第一步就是从文件中读出H的历史数据,形成一条时间序列。csv文件里六种指标的全部数据通过调用pandas中的方法获得,H的历史时间序列用numpy创建,参数为H的全部历史数据。

下面开始数据集的制作。由于这些海量的历史数据会存在数值两极分化,量纲不同甚至差距巨大等情况,而这些将导致学习过程收敛过慢甚至不收敛,为了使数据更“平均”且在相同量纲下分析,需要对原始数据进行归一化处理。第一类指标(任务请求量)取值的分布较为随意,影响因素很多,不一定近似高斯分布,故对其采用对数归一法:样本数据=对原始数据取以10为底的对数;第二类指标(单位任务平均资源申请量)取值的分布近似高斯分布,对其采用标准差归一法最为适合:样本数据=(原始数据-数据总均值)/数据总标准差。算法的后续步骤经常要用到矩阵计算,下一步就是对H的样本序列进行增维,变成shape为[n,1]的二维矩阵:

[[t0] [t1] ... [tn-1]]T

为达到“在训练中优化”的目的,需要把数据集分为两部分:第一部分为“tensor子集”(以“X子集”代替):在本算法中,tensor的实质也是一时间序列,是训练或测试时输入LSTM网络的最小单元,长度均为num_step,构建方法是迭代地从矩阵中取出连续数据,转化成列表并填入:

第二部分为“标签子集”(以“Y子集”代替),由每个tensor对应的标签构成。 Y子集每个位置上的序列值是X子集对应位置序列值的后继值:

S2、构建长短期神经网络模型,使其能够正确,有效地处理输入和计算输出;

LSTM模型的部分参数需要预先设定好取值,它们称作超参数。本算法涉及到的超参数有八个,分别是学习率lr、输入层维度input_size、输出层维度 output_size、单批次训练样本数batch_size、单层LSTM单元个数num_unit、时间步个数num_step、迭代训练次数epochs以及测试样本数n_train。由于对H 未来取值的预测属单因素预测,所以LSTM网络的层数为1,input_size和 output_size均为1。训练样本规模庞大,tensor往往成千上万。单次输进网络的样本过多虽然可减少迭代次数,但收敛速度慢,容易陷入局部最优;输进过少的样本虽然可加快收敛速度并提高精度,但过小的batch_size无法体现并行计算的优势且训练稳定性差。所以batch_size不宜过大或过小,较小批量的样本集为最优。

依照惯例,每个LSTM基本单元输入层和输出层的权重均设定为满足高斯分布的随机数,偏置量均设为常数,如0.1。输入层权重矩阵w_input,输出层权重矩阵w_output,输入层偏置矩阵b_input和输出层偏置矩阵b_output均可依此构建。

模型的构建工作封装在一个函数中,目的是利用Tensorflow描绘一个 LSTM网络抽象的数据流图,为后续步骤提供“原材料”。由于训练阶段和测试阶段所需的单批次样例数不同,所以将函数的参数设为batch,若batch= batch_size,说明该网络用于训练;若batch=1,说明该网络用于测试(每次测试输入一个tensor样本即可)。

实现本算法只需使用基本的LSTM模型,所以令每个网络单元为基本的 BasicLSTMCell。这样的cell一共有num_unit个,无需clipping、peep-hole等高级变种。网络是单层的,故不引入多层LSTM常用于防止过拟合的 DropoutWrapper。

依照Tensorflow手册的规定,网络模型处理一批样本时需要首先将从X子集连续取出的,由batch_size个样本序列组成的矩阵“拉长”成一“竖条”(shape 为[batch_size*num_step,1]),构成训练样本矩阵train_matrix。

训练样本矩阵不能直接作为输入传进LSTM网络,需要同输入层权重矩阵 w_input相乘再和输入层偏置矩阵b_input相加转化成shape为[batch_size, num_step,num_unit]的矩阵real_input后方可作为网络真实输入,并作为参数传入tensorflow的tf.nn.dynamic_rnn方法(调用tf.nn.dynamic_rnn方法的目的是用给定输入和初始模型训练类RNN网络并返回训练结果)。

real_input=train_matrix*[w0w1...wnum_unit-1]+[b0b1..bnum_unit-1]T

S2的最终输出是一个[batch_size,1]形矩阵(后面用“pred”指代),由LSTM 网络对该批样本中所有输入的样本序列进行计算后得出的“下一刻预测值”构成。因为在训练状态下每批样本有batch_size个序列,故pred中有batch_size 个元素。以下是pred的计算步骤:

1)、运行tf.nn.dynamic_rnn,取出第二个返回项[batch_size,2*num_unit] 型矩阵,由该批样本中每一个样本序列输入网络时,所有LSTM单元产生的c 值和h值组成,其结构如下式所示:

2)、去掉所有c值序列,保留所有h值序列,产生一个新矩阵;

3)、将这个新矩阵和输出层权重矩阵w_out相乘,再和输出层偏置矩阵 b_out相加,得到pred。

对LSTM网络的训练是一个循环过程,每次循环都会遍历整个训练样本集,训练每一批样本时都要计算损失量,然后用Adam算法做一次优化。循环次数用变量epoch表示,该值是可调的,当执行完epoch次循环,网络模型就训练好了。

S3、训练LSTM网络:迭代地向这个模型中导入训练样本,计算损失函数,并以此为基础进行全局优化,不断提取训练样本的特征以及数值与时序的关系,直至迭代结束;

训练前首先调用S2中设计的网络模型函数。对LSTM网络的训练是迭代进行的,共有epoch次,实质上就是以下操作的循环:

1)从X,Y两子集中取出第一批batch_size个样本,分别命名为x和y;

2)将x输入LSTM模型,求得pred矩阵;

3)计算损失量tensor(后面用“loss”指代)。预测问题实质是一个回归问题,所以应采用均方误差法(MSE,mean squared error)。采用均方误差法计算损失量:

其中,predi为该批次第i个样本序列下一时刻的“预测值”,tagi是“标签子集”中与该样本序列对应的“标签”序列(在Tensorflow框架中,不同尺寸的矩阵间是可以加减的)。

4)以损失量loss和学习率lr为参数,初始化一个适应性矩估计(Adam) 优化器,计算loss的梯度,然后把梯度应用到变量上,更新LSTM网络所有单元中门结构的权重,返回一个包含训练操作输出结果的tensor;

5)从X,Y子集中取出下一批batch_size个样本,更新x和y;

6)如x,y不为空,则重复步骤2-步骤5;否则开始下一次迭代。

在整个训练过程中,要定期将中间结果保存为检查点文件(一个二进制文件,它把变量名映射到对应的tensor值,扩展名为.ckpt)存入指定路径下。LSTM 网络的完全训练流程,如图3所示。

S4、训练阶段结束后,向模型中导入测试样本,迭代输出未来数个时间步待预测指标的数值,形成预测值时间序列。

进入预测阶段后,输入LSTM网络的是不同于训练样本的测试样本,每一条序列独自成批。这样,h值矩阵仅有一个,经过w_output和b_output“加工”后就是该序列下一时刻的预测值。若想由测试序列得到以后n个时刻的预测值,应采取“步进法”:每次都将上一个预测值接到序列后面,去掉首项元素形成新的序列,再次输入LSTM网络,得到预测值,如此循环。如果预测值准确率不高,测试不成功,可反复调整学习率、LSTM单元个数和迭代次数等超参数,之后重复步骤S1-S4,直至最终产生的预测结果满意为止。

经过迭代训练和调整,LSTM网络已调整至最佳,可以进行时序预测:首先依照路径把最新保存的模型从最新的.ckpt文件里读取出来,将batch_size设为1,并输入”第一条测试数据。假定预测值序列长度也为num_step,这样既为资源调度提供足够“长远”的预报,又便于预测值同实际值的比对。预测是滚动且步进的,其流程如图4所示。

预测值的精准程度可通过平面坐标系中两个序列图线的拟合度直观得出。如果精度不够高,则不断调整超参数,重复S1-S4,直至两图线拟合度令人满意为止。

显然,本发明的上述实施过程仅仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无法对所有的实施方式予以穷举,凡是属于本发明的技术方案所引伸出的显而易见的变化或变动仍处于本发明的保护范围之列。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1