CCF2020大数据时代的Serverless工作负载预测-亚军方案
原创 WintoMT ChallengeHub 公众号
比赛链接:https://www.datafountain.cn/competitions/468
大家好,我们是湘菜是真的辣团队,团队成员有:WintoMT、不是吧啊sir、lrhao、cy和小熊,感谢队友的辛勤付出。历时3个多月的CCF大数据与计算智能大赛总算落下了帷幕,比赛过程中历经各种波折,最终我们获得了A榜第二,B榜第三的成绩。
1:赛题背景
云计算时代,Serverless 软件架构可根据业务工作负载进行弹性资源调整,这种方式可以有效减少资源在空闲期的浪 费以及在繁忙期的业务过载,同时给用户带来极致的性价比 服务。在弹性资源调度的背后,对工作负载的预测是一个重 要环节。如何快速感知业务的坡峰波谷,是一个实用的 Serverless 服务应该考虑的问题。
2:赛题任务
本次赛题的数据来自于华为云数据湖探索,它是一个Serverless的弹性大数据分析服务。数据每5分钟采集一次,赛题假设集群内节点间的任务调度平均,例如数据中的CPU_USAGE是集群中各节点的平均值。数据分为训练集和测试集,其中训练集中包含了43个队列的性能采集数据,每个队列之间相互独立,对于测试集,赛题给定我们某队列某段时间内的性能监控数据,希望我们可以预测未来5个点的指标(例如给定某队列9:35-10:00的性能监控数据,希望我们预测该队列10:00-10:25的指标)。为了简化任 务,官方挑选了两个在生产环境中较为重要的指标作为评测标准(CPU 的利用率和队列中的 Job 数)
上图为本赛题的评测指标,具体来说先使用公式(1)计算每个测试用例的误差值;然后使用公式(2)计算单个测试点的总误差,最终得分如公式(3)所示。
3:数据预处理
通过对数据进行数据探索分析,我们发现数据中存在着含缺失值的数据及唯一值特征,因唯一值特征在我们的数据中恒为常值,对我们的建模过程毫无帮助故将其舍去,而含缺失值的数据多发生在开头,我们因此判断导致数据缺失的可能原因是服务器尚未开始启动,故舍去。
4:特征工程
1.时间特征
因官方对数据的特殊处理使得数据中的时间不为真实时间,所以我们仅提取其小时分钟的信息,作为我们的时间特征。
2.交叉特征
实际生活中CPU使用率多和很多因素有关,因此我们从已知特征出发多角度挖掘具有现实意义的特征作为模型的输入。其中包括作业提交总数、提交作业占比、运行作业占比、运行作业CPU占比和差分特征等。
3.历史特征
在测试集中我们需要将前五个时间点的数据作为输入希望我们能未来5个时间点的指标,因此在进行特征工程时我们将过去5个时间的数据作为特征。
上图为当前时间点CPU使用率与前5min、10min、20min和25minCPU使用率的相关系数矩阵,可以明显看出当前时间点的CPU使用率与临近时间点的CPU使用率具有强相关性。
4.历史特征
当我们有了历史特征之后,我们就可以求取其均值、方差、最大值、最小值和中位数等特征,用以刻画一段时间内的数据分布,从而帮助我们的模型去学习。
5:LightGBM方案
由于本次比赛所给的数据中的数值型变量是经过取整处理过的,这使得原本稠密的数值型变量变得稀疏,而集成树模型对于这种稀疏型变量具有天然的优势,故使用其对我们的数据进行建模,下图为LightGBM模型结构图。
6:LSTM-NN融合框架方案
实际上,本次比赛的赛题是一个时间序列预测的问题,而LSTM和NN在提取这类时间序列数据特征的方面具有较强的能力,而且异质模型也能为最后模型融合的效果也能带来质的提升,故我们将LSTM和NN作为特征提取器提取特征最后输入到一个全连接神经网络中得到最后的预测结果。下图为我们的LSTM-NN融合框架模型结构图。
7:关键改进
我们能达到这个成绩的主要原因来源于比赛中我们对模型的两个改进。第一个是修改了预测目标,用差分值代替原始目标,此想法基于邻近时间的几个点通常具有较强的相关性,而事实数据也证明差分后要比差分前在0点处的密度提升很多。
而第二个则改进是修改了损失函数,比赛方在评价我们成绩好坏的时候使用的是MAE损失函数,但我们通过数据探索分析发现,训练集和测试集出现明显的分布不一致的问题,这会导致测试集中不一致的部分会被认为是“异常值”,而MAE对“异常值”不敏感的特点使得在预测过程中,这一部分的数据会变得不准确,因此我们修改损失函数将MAE改成MSE提高模型对于“异常值”的敏感性来保证在实际预测中,对这一部分数据的预测更具鲁棒性。
基于这两处改进使得我们在后期线上模型得分提升了将近3个百的成绩。
8:模型融合
我们最后对上面两个方案得到的结果进行加权融合,取LSTM-NN融合框架的权重为0.6,LightGBM的权重为0.4。最终我们获得了A榜第二,B榜第三的成绩。
END
-
欢迎扫码关注ChallengeHub学习交流群,关注公众号:ChallengeHub
或者添加以下成员的微信,进入微信群: