使用Ray将可扩展的自动化机器学习(AutoML)用于时序预测-阿里云开发者社区

开发者社区> Apache Spark中国社区> 正文

使用Ray将可扩展的自动化机器学习(AutoML)用于时序预测

简介: 机器学习和深度学习在时序预测上有更好的表现,前提是生成好的模型。但训练出好的模型并不是那么容易的,尤其是那些新手,这也就说明了为什么AutoML越来越火。在Analytics Zoo当中用户可以使用AutoML,在很短的时间内得到满足准确度要求的模型.在2020 Spark+AI峰会直播中,由Intel高级架构师黄晟盛为您介绍时序应用典型场景,基于AutoML的时序解决方案,同时结合实际案例与大家分享与客户的合作经验和反馈。

演讲嘉宾简介:黄晟盛,Intel高级架构师,Apache Spark committer,PMC member Analytics Zoo和BigDL重要贡献者。

以下内容根据演讲视频以及PPT整理而成。

点击链接观看精彩回放:https://developer.aliyun.com/live/43188

本次分享主要围绕以下四个方面:
一、Background
二、Scalable AutoML for Time Series
三、Use Case Sharing & Learnings
四、Future Work

Background

Analytics Zoo

BigDL是英特尔Spark团队的第一个开源项目,基于Spark的深度学习框架,对标的是TensorFlow、Caffe等库,在BigDL中实现了大量的神经网络层,整个模型的训练可以以Spark job的形式跑在大数据集群上。后来在BigDL基础上又开源了Analytics Zoo,为大数据用户提供了统一的端到端的大数据+深度学习的平台,为用户提供单机到集群的无缝式体验。Analytics Zoo集成了多种软硬件加速库,为主流的深度学习框架TensorFlow,PyTorch,Keras等等提供了更便捷的分布式工作流支持。同时提供了大量的预定义的模型和参考案例,使得用户使用起来更方便更高效。下图展示了Analytics Zoo架构概览,Analytics Zoo可以跑在各种环境当中,包括笔记本、K8S集群、Hadoop Cluster、Spark Cluster等等。Analytics Zoo的底层有pipeline的支持,这些流水线组件可以使得用户更方便的将深度学习框架使用到工作学习当中,比如分布式的TensorFlow和PyTorch支持、RayOnSpark、Spark DataFrame、ML pipelines for DL、Inference Model等等。流水线之上提供了Workflow方面的支持,如自动调参,自动Cluster Serving等。最上层针对不同的用户场景,提供了场景的算法,使得用户模型的搭建更加简便。

image.png

Time Series

时间序列数据指的是在时间轴上有序的样本,一般是数值类型,可以是标量也可以是矢量。标量是单变量的预测,矢量是多变量预测。常见的时序数据预测包括一段时间的股票价格预测、商品销量、监控指标、传感器设备数据。下图展示的是2014年到2015年出租车乘客数量时序数据,可以看到这份时序数据是有一定周期规律的,但也不是非常的规整,现实世界的。时序数据是多种多样的,各自可能有有不同的特征。

对时序数据的分析有很多种类。时序预测是首先是用过去可以预测未来。时序异常检测,另一个是可以发现异常时序特征的样本。,此外还有还有时序分类及时序聚类等等。时序预测可以作为在线异常检测的前序步骤,首先根据过去样本数据预测将来数据,当实际值到达时,去比较预测值和实际值之间的差距,当差距过大时可以认为新的数据可能是异常。时序分析本身也有多种应用,销量或资源的预测可以用于仓储管理和资源人力分配,对通信网络的KPI分析可以用于通信网络质量检测,针对设备传感器数据传感器设备的预测可以用于高价值设备的维护,针对服务监控指标分析可以用于智能运维。AIOps是一个常常用到时间序列分析的领域,企业的系统迁移到云端之后,传统的运维方法很难管理大规模的虚拟机和服务,AIOps试图使用大数据和ML、AI的技术在监控数据中进行挖掘和分析,自动化探测和修复问题,从而节省运营成本,减少错误修复平均时间。常见的数据分析在AIOps的使用场景包括:是对虚拟机状态的异常监测和告警,以及异常和告警的根源分析,再根据长期或短期的趋势预测指导资源的规划和配置。

image.png

Time Series Forecasting

时序预测这个问题可以定义为:已知认为从第1个观测点到第t个观测点的数值是y1到yt,目标是预测点是yt+1到yt+h ,h可以大于等于1,取决于具体场景。理论上,从第一个观测点开始的所有历史数据都是可以用来预测未来使用的,但是相隔太久远的数值对当前预测的意义不大,也会加大模型的负担,所i有。一般我们经常实际上,使用t时刻之前最邻近的k个样本点数值,如下图中标记的紫色部分,从yt-k+1到yt。很多种方法可以用于时序预测,如自回归、指数平滑回归、ARIMA等等在现实中有很多使用基础,相对简单,不擅长捕捉复杂的时序模式,也不擅长捕捉曲线之间的关联。最近有很多基于机器学习和深度学习做时序预测。传统方法通常需要依赖于领域的专业知识,而且对数据的统计分布有假设。基于机器学习和深度学习的方法是大多是数据驱动的,而且很多实验结果表明,这些方法会比传统方法得到更好的预测效果。

image.png

时序预测要预测数值,本质上是回归问题,但时序预测相比普通的回归问题有一些特殊性,除了模型本身需要考虑序列和趋势的特征之外,而且train数据时间戳需要按照顺序划分,在交叉验证时注意使用时序验证方法。还需要特别关注采样区间、采样频率、采样不规则等问题。

AutoML

机器学习和深度学习在时序预测上比传统方法有更好的表现,前提是生成好的模型。但训练出好的模型并不是那么容易的,尤其是那些没有多少经验的用户,这也就说明了为什么AutoML越来越火。下图中展示了使用机器学习构建模型的大致步骤,从问题定义、收集数据、特征工程、建模、训练、评估到部署等。特征工程到评估的步骤是非常耗时且需要多轮迭代,还需要基于建模者的经验调参。AutoML希望将耗时的机器学习步骤进行自动化,以此来减轻建模者调优的工作量,降低机器学习门槛。AutoML初级版本基本思路是将模型参数进行排列组合,逐一跑一遍,找最好的一组参数。现代AutoML把自动寻找最优模型的这个任务抽象成了一个新的优化问题,也就是:在一个给定的预算之内去寻找一个最优化的目标指标,所使用的方法呢也远比简单的网格搜索和随机搜索要更加复杂。 目前,AutoML将这些步骤切换成了新的优化问题,在给定的范围之内寻找最优的目标指标,所使用的方法远比简单的网络搜索或随机搜索更加复杂。AutoML不仅可以用于网络搜索,还可以用于机器学习的深度搜索。在Analytics Zoo当中用户可以用AutoML得到更优的时序模型。同时减少预处理和特征工程方面的工作。

image.png

Ray and RayOnSpark

在考虑如何实现Analytics Zoo当中的AutoML模块时,英特尔选择了Ray Tune。Ray Tune在Ray上进行可扩展实验和超参调优库,Ray是为新型的AI用户打造的分布式框架。RayOnSpark是Analytics Zoo上的新功能,使得用户可以方便的将Ray跑在Spark大数据集群之上。

image.png

二、Scalable AutoML for Time Series

Time Series Solution In Analytics Zoo

下图中黄色部分是Analytics Zoo当中的Time Series Solution,最底层是AutoML框架,框架中对流水线的各个部分进行了自动化,如特征生成、模型选择、调优等。上一层是专转为时序模型定制的算法模块,如时序预测和异常检测。用户可以基于自己的场景构造时序应用。Time Series Solution有三种特性,首先是提供了丰富的算法,包括统计、神经网络、混合模型等。第二是提供了基于AutoML的自动调参,可以对特征生成,模型选择,超参,调优等步骤进行自动化,大量节约调参人工消耗。第三了由于背靠Analytics Zoo,可以使用更多AI pipeline中的功能,使得整个自动化训练过程更加高效,还可扩展在集群之上。

image.png

Software Stack

下图中,中间的AutoML框架中包含四个组件,用蓝色方框表示,。FeatureTransformer和Model是机器学习不同环节的抽象,可以把它们看作接受一些当作参数的黑盒子——这些参数被它们各自用于构造内部的流水线结构,以及控制后续的执行流程。,具体来说,FeatureTransformer可以做特征生成,特征选择等任务,Model可以做模型构建及训练,以及多模型选择。SearchEngine负责超参组合和启动实验,并且负责所有实验在分布式集群上的调度。当超参过程结束之后,实验结果进行回收,通过最好的模型结果和超参组合构建pipeline。Pipeline是端到端的处理过程,包含预处理,特征工程和模型。Pipeline可以被存储下来后再加载,做推理和增量式训练,所有模块都可以被扩展用于其他种类的被分析任务,不仅限于并且用于时序场景。在AutoML框架中有两个灰色的框,在计划中但目前还没有实现。

在这个general的automl的框架之上基于general的AutoML框架,实现了针对时序特征的模块,其中TimeSequencePredictor负责自动化模型训练过程,TimeSequencePipeline作为时序预测pipeline的输出。在AutoML框架中有两个灰色的框,目前还没有实现。

image.png

自动化训练过程

大体而言,使用SearchEngine驱动整个训练过程。,SearchEngine在构造的时候首先接收一个FeatureTransformer和一个Model,同时需要Search presets。SearchEngine会根据Search presets确定超参组合,启动实验,并且将多个实验在Ray的集群上进行调度。每个实验都有不同的参数组合来构造内部流水线和最终执行的训练流程。当实验结束时,将结果结构写到HDFS中。全部实验结果都被回收和分析,根据最好的参数组合和训练好的模型构建pipeline,最终返回给用户。

image.png

A glimpse of API

要训练一个模型,首先需要创建TimeSequencePredictor,然后调用在fit中调用Predictor,启动自动训练过程。fit中有两个重要的参数,一个是recipe,具体表示用什么策略调参,如参数搜索范围,采样分布等等。目前已经设置了一些公用的recipe,用户可以简单的调用,同时可以自定义recipe。另一个参数是distributed,表明搜索过程是分布式还是单机的,在单机模式下可以适当减少开销。Fit结束后返回TimeSequencePipeline,可以被回收加载,Pipeline还提供evaluate,predict和fit(incremental)等API用于评估,预测和增量式训练。

image.png

Use Case Sharing & Learnings

Project Zouwu

Zouwu是在前面所介绍的模块的加持上实现的新的项目,专门为电信领域的时序应用所打造的,不仅仅提供基于AutoML的时序预测方案,还会提供了一些单独的时序预测模型给用户,同时会为电信用户的典型场景提供了参考解决解决方案,如网络流量预测。

image.png

电信网络流量预测

电信网络在实际运营过程当中有很多KPI,如上下行速率,连接速率等,这些KPI的预测在电信应用中非常广泛,可以做节能,资源调度。电信网络的KPI可以反映实时的客户需求,如活跃用户数量等。电信运营商如果可以预测每个小区的KPI的话,就可以预测哪些小区未来一段时间实际承载的业务量比较低。运营商可以根据这些的KPI预测进行有计划的实施资源调节,比如在特定时间段关闭一些闲置的小区,这样就可以在不影响终端用户体验的情况下显著降低基站能耗。除了节能检查之外,网络流量的预测可以指导自适应的network slicing。正因为KPI预测有如此广泛的应用因为,在Project Zouwu中我们选择了使用网络流量预测作为典型案例给用户提供参考解决方案。我们选择了WIDE项目维护的公开数据集,其中收集的都是真实的网络流量数据,我们将总吞吐量和平均传输速率作为预测KPI目标,使用过去一周数据预测未来两个小时的KPI。Project Zouwu为同一个用例提供了两种不同的方案,一个个模型直接使用了独立的Forecaster模型,另一个模型使用了有AutoML加持的AutoTS模块。两个部分提供了两个notebook,展示两种KPI的预测情况。用户发现他们只需要对模型做少量改动就可以应用在自己的场景中。

image.png

SK Telecom

下图展示了与韩国电信所合作的项目,是KPI预测的又一个实践应用。韩国电信使用KPI预测检查小区当中基站的潜在异常情况,并且将有潜在异常的小区在3D地图中展示出来。这类异常检查是非常常见的需求,尽管在本案例中没有使用到前面所介绍的时序解决方案,但其它客户正在使用时序解决方案解决类似的网络异常检测问题。韩国电信在2019年的Spark峰会中有关于本案例的talk,感兴趣的同学可以进一步了解。

image.png

NeuSoft

NeuSoft是一家IT解决方案提供商,他们有很多客户,包括宝马之类的企业。在NeuSoft所开发的智能运维系统中需要实时监控虚拟机,容器,服务等健康指标,对这些指标进行预测和异常检测。NeuSoft使用了基于AutoML的时序预测方案,在很短很多时间之内就训练出除了达到准确度要求的模型。

image.png

经验分享

通过与大量客户的合作经验和反馈,有以下几点需要与大家进行分享:
亮点:首先,我们基于AutoML的模型允许输入额外特征。很多传统模型不允许输入额外特征。但是analytics-zoo的基于AutoML的pipeline会获得自动生成额外的特征,如是否处于节假日,忙时还是闲时等,。客户也有自己领域相关的特征。,利用这些额外特征可以得到相对而言可以得到更优的模型效果。另外,采用analytics-zoo内置的模型和自动训练辅助, 通过自动调优的策略,大部分用户可以在较很短的时间内得到比手动调优更高的满足准确度要求的模型。

数据质量:当然并不是所有案例在一开始都能获得很好的效果,其中但绝大部分都是由于数据质量不好所造成的。数据质量上的问题其中又是缺失数据最普遍,不同的填充方法对于预测的准确度影响可能很大。同一个数据集中都要采取不同的方法。

数据量大:很多客户在面临数据量大的问题,很多时候这并不是因为时间维度上样本数量大,而是有太多的时间序列需要预测。比如跟我们合作的一个客户有几十万的小区,每个小区有很多KPI需要预测,相当于一次要预测数百万的时序曲线。在云系统的智能运维场景下,百万级别的容器和服务,及上百个监控指标需要预测上千万的时序。在如此大规模的时序预测场景中,为每个时序做一个模型显然不是高效的做法。英特尔也正在尝试为客户解决此类问题,同时也取得了一些进展。

image.png

四、未来规划

英特尔正在为超高维度时间序列预测寻找更高效的解决方案。其次,还在计划改进搜索方法,如meta-learning,集成学习等功能。同时结合用户的需求增加更多的机器学习模型和特征方面的处理功能。英特尔还在考虑添加自动化数据预处理功能,解决数据质量问题。

从下图中可以发现,英特尔提供了一系列端到端的AI技术和产品,从硬件到软件,以及集成方案。结合不同需求提供多样化选择,感兴趣的同学可以重点关注下方三个链接获取更多的信息。

image.png

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:

阿里巴巴开源大数据技术团队成立Apache Spark中国技术社区,定期推送精彩案例,问答区数个Spark技术同学每日在线答疑,只为营造纯粹的Spark氛围,欢迎加入!邀请你加入钉钉群聊Apache Spark中国技术交流社区,点击进入查看详情 https://qr.dingtalk.com/action/joingroup?code=v1,k1,X7S/0/QcrLMkK7QZ5sw2oTvoYW49u0g5dvGu7PW+sm4=&_dt_no_comment=1&origin=11

官方博客
官网链接