机器学习/数据挖掘中的内存太慢或内存不足问题

编辑:试图重述自己:

像R,Weka这样的工具功能丰富,但速度缓慢,数据大小有限,可以使用。 像Mahout,Vowpal Wabbit(VW)和它的扩展AllReduce这样的工具是针对1K节点集群的,它们的功能有限。 例如,大众只能通过减少一些损失函数来“学习”。

我在任何流行的软件中都没有看到使用并行编程(好的pthreads,MPI等)来加快速度。 我认为这对群集可能是一种矫枉过正的问题很有用,但是等待程序完成而其他处理器核心处于空闲状态时这种情况太糟糕了。 [例如,可以在AWS上获得26核心机器和88核心群集,并且一个好的并行算法可以加速20X和60X,而不需要采用重量级的hadoop系统]

我的意思是从社区学习:(主观)你的真实生活问题/算法不太大,不能称为大数据,但仍然足够大,你觉得更快会更好。 (客观地)沿着“算法X对具有特征C和大小D的数据的观点,你的经验花费了T时间,并且如果有算法X的并行版本可用,我有我可能抛出的M个处理器内核”。

我当然要问的原因是要学习这个领域的并行编程需求,也许有一个社区驱动的努力来解决这个问题。 下面详细介绍了我几次遇到的问题。


机器学习,数据挖掘和相关领域中存在的一些问题有些困难,因为它们太慢或需要过大的内存?

作为一项业余爱好研究项目,我们构建了一个核外编程模型来处理比系统内存更大的数据,并且它本地支持并行/分布式执行。 它在一些问题上表现出色(见下文),我们希望将这项技术(希望由社区驱动)扩展到现实生活中的问题。

一些基准(针对Weka,Mahout和R):

a)用于频繁项目集挖掘的Apriori算法[CPU限制但平均内存]

Webdocs数据集,拥有超过5.2M独特项目(1.4GB)的1.7M交易。 该算法会查找在交易中频繁出现的一组项目。 对于10%的支持,Weka3无法在3天内完成。 我们的版本在4小时24分钟内完成(尽管公平起见,我们在Weka中使用Tries而不是哈希表)。 更重要的是,在一台8核机器上,在8台机器上花了39 分钟 - > 6分30秒 (= 40倍)

b)SlopeOne推荐引擎[高内存使用量]

MovieLens数据集,10K电影10K等级从70K。 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 / petabytes范围内,以兆字节范围内的数据进行工作。 在千兆字节范围内似乎存在差距 - 大于虚拟内存但小于“大数据”。 虽然像numpy的Blaze,R大内存,scalapack等项目正在满足这种需求。

根据您的经验,您是否可以将这样一个更快,更出色的工具用于数据挖掘/机器学习社区的例子?


这实在是一个开放式问题。 从我可以告诉你要求的东西:

  • 在大型大数据集上使用机器学习。
  • 更快的工具是否会使社区受益?
  • 对于第一个问题,许多生产环境中使用的最好的工具之一是Vowpal Wabbit(VW)。 转到hunch.net看一看。

    对于第二个问题,如果你能击败大众,那么这对社区是绝对有利的。 不过大众很不错:)

    链接地址: http://www.djcxy.com/p/61381.html

    上一篇: Too slow or out of memory problems in Machine Learning/Data Mining

    下一篇: Factoring large numbers into triplets