ModelArts 的雪中送炭,让我拿下 CCF BDCI 华为 Severless 工作负载预测亚军
【本期推荐】8岁小朋友的儿童节,有点硬核,一起来认识这些小小程序员,看他们如何coding出一个与众不同的童年。
摘要: 中国计算机学会大数据与计算智能大赛(CCF BDCI)华为 Severless 工作负载预测亚军方案和 ModelArts 使用体验分享
本文分享自华为云社区《免费薅ModelArts算力资源-拿下CCF BDCI华为Severless工作负载预测亚军》,原文作者:wyhhyw 。
赛题简介
基于历史数据和历史趋势,对 Severless 软件架构的工作负载进行精准预测,便于优化资源调整和提升用户服务质量。
数据提供了 43 个队列数天中的使用情况,其中包涵 CPU 使用率、磁盘使用率、提交作业数量,作业是否提交成功等信息。要求根据历史信息,预测测试集未来 25 分钟内,每间隔五分钟的 CPU 使用率和提交作业数量。赛题链接https://www.datafountain.cn/competitions/468.
赛题分析
这是一道非常典型的时间序列回归问题,目标时对未来五个时间点的 CPU 使用率和提交作业进行预测。可以从以下几个角度对目标进行建模。
趋势拟合:根据待预测时间点之前的使用率和作业数拟合曲线,并给出预测,参考 arima 等模型。
单标签回归:以 5 为时间间隔,对目标进行预测,例如,x1 -> x6, x2 -> x7。具体如下图所示:
多标签回归:参考 pandas.shift 函数,构造历史信息的平滑特征,每次预测一个时间点的目标。示意图如下:
方案介绍
笔者有幸获得该比赛的第二名(二等奖),建模方法为融合 lightgbm 和 lstm 预测结果,其中 lightgbm 线上第二,lstm 线上第 10 左右。由于本方案采用的 lstm 结构比较简单且成绩不是特别理想,而第三名的 lstm 是决赛答辩队伍中线上成绩最高的神经网络模型,因此本文还介绍了第三名(同二等奖)的 lstm 架构。
数据分析
在特征工程和建模之前,首先来一波 EDA~
下图展示了不同队列下的 CPU 使用率分布情况,可以发现,不同队列下的数据分布存在较大差别,因此队列号对于预测 CPU 使用率也是一个非常强力的特征。
下图展示了某队列号下 CPU 使用率随小时的变化趋势,可以发现下午至凌晨 3 点使用率均较高,因此小时和分钟也是一个非常强力的特征。需要注意的是,赛题方对时间戳的年月日进行了脱敏,因此仅能使用小时和分钟两个特征。
特征工程
必不可少的部分,特征为王
滑动特征:对 CPU 使用率等特征使用 pandas.shift 函数构建其平滑特征。
差分特征:在平滑特征的基础上构造各阶差分特征。
基于滑窗的统计特征:在平滑特征的基础上开一个窗口,然后滑动,每次取窗口内特征的均值、方差、最大值等统计特征。
聚合统计特征:例如历史数据中不同小时下 CPU 使用率的均值和方差等特征。
伪穿越特征:穿越特征一般是不被允许的。那么对于时序问题,可以构建伪穿越特征,其实也就是聚合统计特征。例如,待预测的时间点是上午 9 点,可以根据历史数据构造上午 10 点的均值等统计特征,并且衍生出差值比值等特征。
模型
建模策略:见赛题分析中的多标签回归。一般来说,这种建模方式都会取得较好的效果。
lightgbm:对每一个标签都进行五折交叉验证,CPU 使用率和提交作业数各五个时间点,则一共进行了十次五折交叉验证。
lstm:CPU 使用率是 0-100 的整数,连续五个时间点的数据如"10-21-41-31-34"可以看做是 nlp 中的字符索引,因此可以直接用于索引 embedding lookup table 中的字向量,那么建模就很自然的过度到了 lstm。
下图展示了本文所用的 lstm 架构,效果并不是十分理想,线上大约在第十左右。在赛后和队友分析讨论之后,认为我们的框架存在几个问题。首先是将每个 CPU 使用率当做字向量,那么 lstm 中的 input_dim 为 1,效果肯定不好。其次是我们的框架很简单,并没有引入卷积或者注意力机制等。
下面给出二等奖中另一支队伍的 lstm 框架,该框架包括两部分:
(1)LSTM 提取 CPU 使用率、硬盘使用率的时序信息,引入注意力机制
(2)全连接提取其他手工特征的信息,进行高阶交叉,并且设置跨层连接,构成“不同尺度的集成模型”。
训练
损失:由于数据波动较大,因此可以认为存在一定的离群点,所以采用 smooth l1 作为损失函数。
算力:lightgbm 建模对算力的要求较小,16G 内存足以。但使用上述神经网络训练时,由于是多标签回归(10 个标签),对每个标签都需要训练一个模型,如果再结合五折交叉验证,那么将训练 50 个模型,这对算力就有一定的需求。
笔者在赛程接近尾声时才开始训练 nn 模型,然而本人只有一张玩具显卡 gtx1650,对于该多标签任务训练数十个模型实在太过耗费时间,迫不得已去寻找算力资源。经过师兄的推荐,最后选定了华为云的 ModelArts,每天两小时的免费算力,而且是 V100,感觉很不错。最后让实验室兄弟多开几个号,一边训练一边保存模型,时间快到了就换号继续训练,两三天就把模型跑好了。虽然因为时限需要切换账号,但总体的使用体验还是不错的,下面就给大家简单介绍一下 ModelArts 的使用体验。
ModelArts 使用体验
使用感受
(1)虽然是在云端训练,但是 ModelArts 提供了 jupyter lab/notebook,就像平时在本地 PC 上上传数据到 notebook 中然后写代码一样,完全感知不到训练流程的变化。lab 中集成了不同的引擎,常规的如 pytorch, tf, xgboost 这些都有。
(2)安装依赖包很方便,直接在 cell 中’!pip install xxx’就可以,原生的 notebook 中好像没有这个功能。比如我新建的 notebook 是 pytorch 引擎,但又需要 xgboost,那么就可直接安装,见下图。
(3)目前上传数据有限制,一次只能上传大约是几百 MB,可以先将数据上传至 notebook 中后再进行特征工程,对于比较大的数据,可以本地切分以后分批上传,所以这也是一个无关紧要的问题,毕竟免费 V100 太香了。
还有一些其他的细节,各位小伙伴们可以自行探索呀!
划重点-如何申请
还愣着干什么,猛点链接,抢算力呀!!!
获取更多 AI 相关数据、算法、模型等 AI 资产,请点击“了解更多”,AI Gallery 等您!
版权声明: 本文为 InfoQ 作者【华为云开发者社区】的原创文章。
原文链接:【http://xie.infoq.cn/article/d32d7dd7798c15767a7d4d6eb】。文章转载请联系作者。
评论