编辑:尝试改写自己:
R、Weka 等工具功能丰富,但速度慢,并且可以处理的数据大小有限。Mahout、Vowpal Wabbit (VW) 等工具及其扩展 AllReduce 是针对 1K 节点集群的,它们的功能有限。例如,大众只能通过最小化一些损失函数来“学习”。
我在任何流行的软件中都没有看到使用并行编程(好的 ol' pthreads、MPI 等)来加速。我想它对于集群可能是一种过度杀伤力的问题很有用,但是在其他处理器内核空闲时等待程序完成实在是太糟糕了。[例如,在 AWS 上可以获得 26 核机器和 88 核集群,一个好的并行算法可以提供 20X 和 60X 的速度,而无需求助于重量级的类似 hadoop 的系统]
我想从社区中学到什么:(主观地)你的现实生活中的问题/算法不是太大而不能称为大数据,但仍然足够大,让你感觉更快会更好。(客观地)您的经验类似于“具有特征 C 和大小 D 的数据的算法 X 花费了 T 时间,如果算法 X 的并行版本可用,我可以使用 M 个处理器内核来处理它”。
当然,我问的原因是了解该领域对并行编程的需求,并且可能需要社区驱动的努力来解决它。我在一些问题上的经验详述如下。
机器学习、数据挖掘和相关领域有哪些问题是您因为速度太慢或需要过大的内存而遇到困难的?
作为一个业余研究项目,我们构建了一个核外编程模型来处理大于系统内存的数据,并且它本身支持并行/分布式执行。它在一些问题上表现出良好的性能(见下文),我们希望将这项技术(希望由社区驱动)扩展到现实生活中的问题。
一些基准测试(针对 Weka、Mahout 和 R):
a)频繁项集挖掘的Apriori 算法[CPU-bound but average memory]
Webdocs 数据集包含 170 万笔交易,超过 520 万个独特项目 (1.4GB)。该算法查找在事务中频繁出现的项目集。对于 10% 的支持,Weka3 无法在3 天内完成。我们的版本在4 小时 24 分钟内完成(尽管公平地说,我们使用 Tries 而不是 Weka 中的哈希表)。更重要的是,在一台 8 核机器上花了 39 分钟,在 8 台机器上 -> 6分钟 30 秒(=40x)
b) SlopeOne 推荐引擎【高内存使用】
MovieLens 数据集具有来自 70K 的 10K 电影的 1000 万个评分。SlopeOne 推荐基于协作过滤的新电影。Apache Mahout 的“Taste”非分布式推荐器在内存不足6GB时会失败。为了对核外性能进行基准测试,我们将我们的版本限制为该限制的 1/10(600MB),并在执行时间上以 11% 的开销(由于核外)完成。
c) 使用主成分分析(PCA) 进行降维[CPU 和内存限制]
包含 32K 个样本的突变体“p53”蛋白质数据集,每个样本有 5400 个属性 (1.1GB)。PCA 用于通过删除方差非常小的变量来降低数据集的维度。尽管我们的版本可以处理大于系统虚拟内存的数据,但我们对这个数据集进行了基准测试,因为 R 软件可以处理它。R 在86 分钟内完成了这项工作。我们的核外版本没有额外的开销;事实上,它在单核机上用了 67 分钟,在 8 核机上用了14 分钟。
今天的优秀软件要么通过将数据加载到内存中(R、Weka、numpy)来处理兆字节范围内的数据,要么将它们加载到数据中心(Mahout、SPSS、SAS)的 tera/PB 范围内。千兆字节范围内似乎存在差距——大于虚拟内存但小于“大数据”。虽然,像 numpy 的 Blaze、R bigmemory、scalapack 等项目正在满足这一需求。
根据您的经验,您能否举例说明这样一个更快、更核心的工具可以使数据挖掘/机器学习社区受益的例子?