论文部分内容阅读
Spark MLlib是一种高效、基于内存的分布式机器学习框架,它实现了常用的机器学习算法,如聚类、分类、回归,极大的降低了用户使用分布式机器学习算法的复杂度。相比于传统单机运行的机器学习算法,分布式机器学习算法把计算任务和数据分布到多个计算节点上,在各个计算节点上完成数据处理。从单机到分布式,分布式机器学习算法是否具有很好的扩展性,受到学术界和工业界的广泛关注。本文探究如何对分布式机器学习算法扩展性进行测试,并分析算法扩展性瓶颈及其原因。 本文对分布式机器学习算法扩展性进行测试与分析,主要研究以下几个方面的问题:首先,设计多维度扩展性测试方法,即通过横向测试方法测试物理资源、计算框架、算法的扩展性;通过混合测试方法测试系统开销;通过纵向测试方法测试物理资源和计算框架瓶颈,同时根据机器学习的不同阶段分别观测算法的数据预处理时间、模型训练时间和模型评估时间。其次,提出基于数据流的瓶颈分析方法。在横向测试、纵向测试以及混合测试的基础上,基于数据流的分析方法分析把算法的多阶段、逻辑DAG图和物理执行计划统一起来,该方法把应用分成不同的阶段,每个阶段包含若干个Job,每一个Job包含若干个Stage,同一个Stage内的Task并行执行。根据算法的理论执行时间复杂度和多维度测试结果,分析算法的扩展性瓶颈及其原因。结合上述方法,本文测试并分析了Spark MLlib上实现的NIPS会议最常讨论的算法,得出了有价值的结论,这些结论包括SVM算法和Logistic regression算法因为使用treeAggregate算子导致模型出现瓶颈、ALS算法因为数据倾斜导致Task调度串行化、Logistic regression算法因RDD的优先位置属性导致Task反序列化(数据预处理)成为算法瓶颈等,对算法和框架的进一步优化和实践应用都有很好的参考和指导意义。