要实现高效的大数据机器学习,需要构建一个能同时支持机器学习算法设计和大规模数据处理的一体化大数据机器学习系统。研究设计高效、可扩展且易于使用的大数据机器学习系统面临诸多技术挑战。近年来,大数据浪潮的兴起,推动了大数据机器学习的迅猛发展,使大数据机器学习系统成为大数据领域的一个热点研究问题。介绍了国内外大数据机器学习系统的基本概念、基本研究问题、技术特征、系统分类以及典型系统;在此基础上,进一步介绍了本实验室研究设计的一个跨平台统一大数据机器学习系统——Octopus(大章鱼)。
关键词:大数据;机器学习;分布并行计算;大数据处理平台
1 大数据机器学习系统研究背景
近年来,大数据技术在全球发展迅猛,掀起了巨大的研究热潮,引起全球业界、学术界和各国政府的高度关注。随着计算机和信息技术的迅猛发展和普及应用,行业应用数据呈爆炸性增长。动辄达到数百TB甚至数PB规模的行业/企业大数据已经远远超出了传统计算技术和信息系统的处理能力。与此同时,大数据往往隐含着很多在小数据量时不具备的深度知识和价值,大数据智能化分析挖掘将为行业/企业带来巨大的商业价值,实现多种高附加值的增值服务,从而提升行业/企业生产管理决策水平和经济效益。
大数据分析挖掘处理主要分为简单分析和智能化复杂分析两大类。简单分析主要采用类似于传统数据库OLAP的处理技术和方法,用SQL完成各种常规的查询统计分析;而大数据的深度价值仅通过简单分析是难以发现的,通常需要使用基于机器学习和数据挖掘的智能化复杂分析才能实现。
机器学习和数据分析是将大数据转换成有用知识的关键技术,并且有研究表明,在很多情况下,处理的数据规模越大,机器学习模型的效果会越好[1~3]。目前,国内外业界和学术界专家普遍认同的观点是,越来越多的海量数据资源加上越来越强大的计算能力,已经成为推动大数据时代人工智能技术和应用发展的动力,将基于大数据的机器学习和人工智能推上了新一轮发展浪潮,让大数据机器学习(bigdata machine learning)成为全球业界和学术界高度关注的热点研究领域。随着大数据时代的来临,Google、Facebook、微软、百度、腾讯等国内外著名企业均纷纷成立专门的基于大数据的机器学习与人工智能研发机构,深入系统地研究基于大数据的机器学习和智能化计算技术。
由于大数据机器学习和数据挖掘等智能计算技术在大数据智能化分析处理应用中具有极其重要的作用,在2014年12月中国计算机学会(CCF)大数据专家委员会上百位大数据相关领域学者和技术专家投票推选出的“2015年大数据十大热点技术与发展趋势”中,结合机器学习等智能计算技术的大数据分析技术被推选为大数据领域第一大研究热点和发展趋势[4]。
由于大数据机器学习在具体实现时通常需要使用分布式和并行化大数据处理技术方法,也有人将大数据机器学习称为“分布式机器学习”(distributedmachine learning)或“大规模机器学习”(large-scale machine learning)。
大数据机器学习,不仅是机器学习和算法设计问题,还是一个大规模系统问题。它既不是单纯的机器学习,也不是单纯的大数据处理技术所能解决的问题,而是一个同时涉及机器学习和大数据处理两个主要方面的交叉性研究课题。一方面,它仍然需要继续关注机器学习的方法和算法本身,即需要继续研究新的或改进的学习模型和学习方法,以不断提升分析预测结果的准确性;与此同时,由于数据规模巨大,大数据机器学习会使几乎所有的传统串行化机器学习算法难以在可接受的时间内完成计算,从而使得算法在实际应用场景中失效。因此,大数据机器学习在关注机器学习方法和算法研究的同时,还要关注如何结合分布式和并行化的大数据处理技术,以便在可接受的时间内完成计算。为了能有效完成大数据机器学习过程,需要研究并构建兼具机器学习和大规模分布并行计算处理能力的一体化系统。
因此,领域内出现了“大数据机器学习系统”或者“分布式学习系统”的概念,并进行了诸多大数据机器学习系统的研究与开发工作。
2 大数据机器学习系统的技术特征
参考文献[5,6]专门介绍了大数据机器学习系统的技术特征。
如图1所示,一个大数据机器学习系统会同时涉及机器学习和大数据处理两方面的诸多复杂技术问题,包括机器学习方面的模型、训练、精度问题以及大数据处理方面的分布式存储、并行化计算、网络通信、局部性计算、任务调度、容错等诸多因素。这些因素互相影响,交织在一起,大大增加了系统设计的复杂性。因此,大数据机器学习已经不仅仅是一个算法研究问题,而是需要针对大数据集,考虑从底层的大数据分布存储到中层的大数据并行化计算,再到上层的机器学习算法,设计一种一体化的支撑系统,形成易于为数据分析程序员和机器学习研究者使用的、完整的大数据机器学习系统。
图1 大数据机器学习系统所涉及的复杂因素[5]
一个理想的大数据机器学习系统通常需要具备以下几个方面的技术要素和特征[5~7]。
- 应当从整个学习的生命周期/流水线来考虑,包括训练数据和特征的提取、并行学习算法的设计、训练模型和参数的查询管理、分布式训练计算过程,都应在一个一体化的学习系统平台上完成。
- 应提供多种并行训练模式,支持不同的机器学习模型和算法。
- 需要提供对底层系统的抽象,以实现对底层通用大数据处理引擎的支持,并提供数据科学中常用的编程语言接口(API)。
- 应该拥有开放和丰富的生态、广泛的应用和快速的进化能力。
在上述技术特征中,一个非常重要的思路是,要通过系统抽象来降低系统设计的复杂性。如图2所示,一个设计良好的大数据机器学习系统,应当通过定义特定的机器学习编程计算和系统抽象接口,将上层机器学习和底层分布式系统解耦开来,将机器学习实现在现有的大数据计算平台之上,而不需要考虑底层系统层面的因素,以此实现底层大数据处理平台对上层用户的透明化,让上层用户从诸多底层的分布和并行化大数据编程计算细节中解放出来,以便他们致力于上层的机器学习模型和算法的设计实现。通过编程计算和系统抽象层API,向上提供各种机器学习编程计算接口以及学习模型和训练数据的表示,向下由底层分布式系统负责处理并提供高效的分布和并行化计算实现。
图2 大数据机器学习系统抽象
3 大数据机器学习系统的主要研究问题
知名的Apache Flink大数据分析系统研究者在2014年VLDB会议主题报告和论文中[8],从数据分析的复杂程度和数据规模的维度,考察了现有的相关研究工作和系统,如图3所示。现有的系统要么主要用于小规模复杂分析,要么主要用于大规模的简单统计分析,缺少既具有复杂数据分析能力又具有强大的大数据处理能力的大数据分析系统;文章作者甚至认为,对于行业大数据分析人员而言,现有的工具还处于“石器时代”[8]。
图3 研究者Apache Flink提出的分析维度和研究现状[8]
与此同时,著名的UC Berkeley AMPLab在研究基于Spark的机器学习库MLBase[9]时,从计算性能和系统易用性两个重要维度,考察了现有的大数据机器学习研究工作和系统,如图4所示。面向机器学习和数据分析时,目前已有的工作和系统,绝大多数都未能同时具备大规模分析处理能力和良好的系统易用性。
图4 Spark系统研究者提出的分析维度和研究现状[9]
因此,大数据机器学习除了需要继续关注和研究传统意义上的学习方法和算法问题,以不断提高学习精度外,还需要重点关注和研究解决大数据场景下所特有的两大技术问题:
- 一是大数据复杂分析时的计算性能问题;
- 二是大数据机器学习系统的可编程性和易用性问题。
(1)大数据复杂分析时的计算性能问题
在计算性能方面,大规模数据集给很多传统串行的机器学习和数据分析挖掘算法带来很大的挑战,需要研究解决面向大数据机器学习和数据分析的高效计算方法和系统。在数据集较小时,很多复杂度在O(n log n)、O(n2)甚至O(n3)的传统串行化机器学习算法都可以有效工作;但当数据规模增长到极大尺度时,现有的串行化算法将花费难以接受的时间开销,使得算法在实际应用场景中失效,这给业界大量实际的大数据复杂分析应用带来很多新的挑战和问题[10]。正如微软全球副总裁陆奇博士在2012年指出的,“大数据使得现有的大多数机器学习算法失效,面向大数据处理时这些算法都需要重写”。
在大型互联网企业,大规模机器学习算法经常用于处理十亿至千亿级别的样本以及一亿至数十亿数据特征的大规模数据集。例如,Google著名的Seti太空搜索项目需要进行高达千亿样本、十亿特征数据的大规模机器学习,腾讯Peacock主题模型分析系统需要进行高达十亿文档、百万词汇、百万主题的主题模型训练,而仅一个百万词汇乘以百万主题的矩阵,其数据存储量即高达3TB,如果再考虑十亿文档乘以百万主题的矩阵,其数据量更是高达3 PB[3]。如此大量的训练样本,加上机器学习算法本身的复杂性,导致难以在传统的串行化计算平台上、在可接受的时间内完成如此巨大的复杂分析计算任务,因而带来了十分突出的计算性能问题。因此,大数据机器学习算法和系统需要研究解决大规模场景下高效的分布式和并行化算法设计以及计算问题,以保证算法和系统可以在可接受的时间内完成大规模数据的学习和训练。
(2)大数据机器学习系统的可编程性和易用性问题
为了满足急剧增长的大数据处理需求,过去几年来,全球推出了Hadoop[11]和Spark[12]等多种主流大数据处理技术和系统平台。这些主流技术和平台的出现为大数据的处理提供了良好的技术手段和方法。Hadoop的出现使得大数据处理技术和平台从无到有,而基于内存计算的Spark系统的出现使得大数据分析计算从慢到快。然而,现有的大数据处理技术和系统平台都存在很大的易用性问题,难以为普通的程序员掌握和使用,尤其是面向复杂的大规模机器学习和数据分析时,这个问题更为突出。
大数据机器学习和数据分析的并行化程序设计,比传统的串行化算法设计复杂很多、对程序员的技术要求更高。对于普通的数据分析程序员或机器学习研究者来说,在特定的大数据编程模型和平台下进行并行化机器学习和数据分析算法设计,需要掌握很多分布式系统背景知识和并行程序设计技巧,这对他们来说难度较大,经常要把实际工作的大部分时间花费在底层复杂的并行化和分布式编程和调试上,给上层数据分析和算法设计工作带来很大的不便和困难,导致普通程序员与现有的各种大数据处理平台之间存在一个难以逾越的鸿沟[8,9,13~15]。
另一方面,即使对于诸如Google、百度等具有强大技术力量的互联网企业程序员来说,随着多种大数据处理与编程平台的出现以及各种分析应用问题需求的不同,他们也常常需要针对不同平台,重复编写和测试各种并行化机器学习和数据分析算法,这种在多个大数据平台上重复编写和尝试数以百计的机器学习算法的工作负担也很重。正如阿里巴巴集团副总裁、高级研究员章文嵩博士在中国计算机学会第一届大数据学术会议上所指出的,“淘宝内部需要使用的并行化机器学习算法很多,随着新型的并行化计算框架的逐步出现,需要将其逐个实现到MPI、MapReduce、Spark等并行计算框架上;如果后面出现更先进的框架,又面临着将这些算法重新实现一遍的负担”。
针对大数据的机器学习和数据分析,现有的大数据处理技术和平台存在很大的可编程性和易用性问题,导致普通程序员和常规的程序设计方法与现有的大数据分析处理编程技术之间存在着一个很大的鸿沟。正如CCF大数据专家委员会《2015年大数据发展趋势预测报告》指出的那样,“由于现有的大数据平台易用性差,而垂直应用行业的数据分析又涉及领域专家知识和领域建模,目前在大数据行业分析应用与通用的大数据技术之间存在很大的鸿沟,缺少相互的交叉融合”[4]。
因此,大数据机器学习系统要解决的一个重要问题是,让不易使用的大数据处理技术和平台变得易于使用,要填平普通程序员和常规程序设计方法与现有的大数据处理技术之间的鸿沟,尽可能让普通程序员用常规程序设计方法便能有效完成大数据的复杂分析处理。
根据Google Seti项目研究人员在开发实际的大型机器学习系统上的经验,在面向大数据时,考虑到用户开发效率问题,系统易用性与提高机器学习精度几乎同等重要,有时甚至比精度问题更为重要,“也许过去学术界很少关心设计一个精度稍差、但有更好易用性和系统可靠性的学习算法,但在实际应用中,这会体现出非常重要的价值”。