基于Spark的性能优化及Spark在深度学习的应用研究

2020-06-29 09:58段智华
大众科学·中旬 2020年7期
关键词:性能优化深度学习人工智能

摘要:随着人工智能和大数据时代的到来,Spark+AI大数据平台快速发展,Spark是当今大数据领域最活跃、最热门、最高效的大数据通用计算平台。到目前为止,Spark是唯一一个将大规模数据处理与最先进的机器学习和人工智能算法相结合的统一分析引擎。本文阐述了Spark大数据技术在中国电信天翼高清IPTV端到端系统中的应用,以Spark大数据平台的性能优化及Spark在深度学习的应用为研究对象,从Spark内存管理、JVM GC性能调优、数据序列化、数据类型优化、Spark缓存优化、数据倾斜调优、Spark算子调优、Spark在深度学习的应用调优进行阐述,并对大数据技术未来的发展进行了展望 。

关键词: Spark;人工智能;大数据;深度学习;内存优化;Shuffle优化;性能优化

1 引言

Spark是当今大数据领域最活跃、最热门、最高效的大数据通用计算平台,Spark诞生于美国加州大学伯克利分校AMP实验室。Apache Spark已经成为大数据领域最大的开源社区,达到250多个组织的1400多个贡献者。在任何规模的数据计算中,Spark在性能和扩展性上都更具优势。近年来,Spark技术在工业界得到广泛应用,中国电信公司基于Spark大数据技术自研构建了天翼高清IPTV端到端系统,基于全国超大规模的实时数据进行大数据分析。本文结合生产业务场景对Spark性能优化进行了实践探索,从Spark内存管理、JVM GC性能调优、数据序列化、数据类型优化、Spark缓存优化、数据倾斜调优、Spark算子调优、Spark在深度学习的调优进行阐述。实践表明,经过一系列的优化措施,提升了Spark集群的计算性能及Spark任务执行速度。

2  天翼高清IPTV端到端系统案例实践

Spark大数据技术为天翼高清IPTV端到端系统的稳定运行提供了支撑保障,在天翼高清IPTV端到端系统中,清洗模块、单质量模块、考核模块、多维度计算模块、告警模块等模块均以Spark技术作为核心基石,各模块基于Spark Core 、Spark SQL、Spark Streaming、Spark ML等技术进行了设计与实现。

在生产实践中经常会面临Spark性能优化的问题,Spark应用程序基于内存进行计算,系统运行性能瓶颈受到集群资源的限制(例如,CPU、网络带宽、内存、存储等)。一个简单的方法是增加Spark的计算资源。

(1)Spark内存管理。

Spark的内存包括执行内存、存储内存。执行内存是指在洗牌、关联、排序及聚合中用于计算的内存,存储内存是指在集群中存储内部数据的内存,两者共享一个统一的内存区域,可以配置spark.memory.fraction、spark.memory.storageFraction等参数进行调参。

(2)JVM GC性能调优。

当加载的数据及Shuffle读写操作数据量较大时,可能会出现JVM GC的问题。如果出现GC,首先要收集垃圾回收发生的频率和GC所用时间的统计信息,考虑将对象进行序列化缓存,GC优化的效果取决于应用程序和可用内存的多少。在案例实践中要协调平衡Spark执行内存和存储内存的关系、JVM年轻代内存和老年代内存的关系、加载数据总量大小与批处理数据大小的关系。在JVM GC性能调优时,可以采用数据序列化、调整数据类型、数据缓存等方法。

(3)数据序列化。

Spark提供了Java序列化、kryo序列化方式,Kryo比Java序列化运行速度更快、更紧凑。在案例实践中采用了Kyro的序列化,将自定义的话单类型注册给Kyro序列化器,并设置默认缓存空间的大小。

1)调整数据类型。

Java字符串类型占用内存空间较大,在案例实践中将部分字段的String类型调整为Long类型,减少内存的消耗;加载文件时候筛选业务字段,从70个字段调整为10个字段,减少了内存空间的占用。

2)使用Spark缓存。

天翼高清IPTV端到端系统的播放类型包括组播、直播单播、时移、回看、点播、直播

及点播汇总等各个类型,每次都加载HDFS数据,运行时间较长。使用Spark缓存进行优化,先从HDFS文件系统中加载数据,然后将加载的数据缓存到集群内存中,遍历播放类型时可以直接读取缓存中的数据,计算性能大幅提升。

3)Spark数据倾斜调优。

数据倾斜是Spark分布式计算必须面临的问题,也是作大数据分析不能绕开的问题,

稍微复杂一点的业务,SparK大数据分析都需解决数据倾斜。在天翼高清IPTV端到端系统中,多维度模块(区域播放类型、单节目统计)要按省、地、县统计,将每一条记录汇聚到省、地、县编码,进行reducebykey聚合操作将导致省级编码记录数据倾斜的现象,我们使用随机Key实现双重聚合及从业务层面解决数据倾斜的问题。在第一次聚合时,使用reduceByKey算子进行Key-Value聚合,在区域播放类型、单节目模块将每个区域编码加上随机数前缀打散,组成一个新的Key值,调用reduceByKey操作。第二次聚合时,再去掉每个区域编码的前缀随机数,再调用一次reduceByKey操作,得到按区域统计的全局聚合结果。

在业务层面,单节目模块包括直播、点播,需根据区域编码、节目编码、播放類型等字段进行聚合计算,直播节目的记录包括省、地、县的记录,点播记录包括省级的记录,如果将直播、点播记录合在一起进行聚合计算,将发生数据倾斜的情况,某一些任务运行特别缓慢,不能进行实时统计分析。

4)Spark算子调优。

在天翼高清IPTV端到端系统中,单节目模块月维度的统计原采用collect方法将数据

全部收集到Driver节点写入HDFS及数据库,单节目数据量较大,导致运行时间较长及内存溢出。在案例实践中将foreach算子调整为foreachPartition算子,对每一个分区建立一个连接,按分区写入数据,提升了系统运行性能。

3 Spark在深度学习的调优

Pytorch 、Tensorflow深度学习框架是科研界、工业界运用最广泛的人工智能框架,基于Databricks及亚马逊(Amazon)公司的云计算平台,将Spark与Pytorch 、Tensorflow无缝集成,实现基于Spark的数据预处理、单节点、分布式深度学习训练及分布式深度学习预测推理。Spark在深度学习层面可能的一些调优方法,包括:

深度学习模型本身的性能调优。例如,ResNet-50模型加载预训练模型+微调网络全部参数;或者,冻结输出层以外的所有网络,微调输出层参数。

分布式深度学习预测中数据输入管道的调优。如果数据输入是瓶颈,可以使用Spark加载数据,转换为Spark DataFrame作为模型的输入,合理设置Spark批处理的记录数,以提升系统吞吐量。

4 未来展望

Spark官网即将发布 Apache Spark 3.0版本,新版本将包含许多重要的新特性,包括支持GPU 感知调度、Spark Graph 图增强、PySpark 可用性进一步提升等。FaceBook、谷歌、Amazon等业界最领先的人工智能公司,正在全面的转向深度学习。人工智能学习的核心是深度学习,深度学习是目前商业界最有价值和潜力的,深度学习应用于自动驾驶和演示人工智能武器等,增强学习的核心是实时的与环境进行交互,交互的能力可从环境交互中不断提升自己的能力,增强学习和深度学习的联合体,将使增強学习爆发出终极的潜力,也使深度学习的价值最大化。

参考文献

[1]《Spark大数据商业实战三部曲》第二版:清华大学出版社,王家林、段智华.

[2]《Spark大数据商业实战三部曲》:清华大学出版社,王家林、段智华、夏阳.

[3]《Spark内核机制解析及性能调优》:机械工业出版社,王家林、段智华.

[4]《Spark SQL大数据实例开发教程》:机械工业出版社,王家林、段智华.

猜你喜欢
性能优化深度学习人工智能
2019:人工智能
人工智能与就业
数读人工智能
SQL Server数据库性能优化的几点分析
Web应用的前端性能优化
MOOC与翻转课堂融合的深度学习场域建构
大数据技术在反恐怖主义中的应用展望
深度学习算法应用于岩石图像处理的可行性研究
基于深度卷积网络的人脸年龄分析算法与实现
下一幕,人工智能!