将复杂模型重复拟合到大数据集时,如何优化计算效率?


12

使用MCMCglmmR中的程序包运行混合效果模型时出现性能问题。代码如下:

MC1<-MCMCglmm(bull~1,random=~school,data=dt,family="categorical"
, prior=list(R=list(V=1,fix=1), G=list(G1=list(V=1, nu=0)))
, slice=T, nitt=iter, ,burnin=burn, verbose=F)

数据中大约有20,000个观测值,它们聚集在大约200所学校中。在运行之前,我从数据框中删除了所有未使用的变量,并从内存中删除了所有其他对象。我的问题是,除非将迭代次数减少到无法接受的程度,否则运行时间将非常长。经过50,000次迭代,需要5个小时,而且我要运行许多不同的模型。所以我想知道是否有加速代码执行的方法,或者我可以使用其他软件包。我正在使用,MCMCglmm因为我想要随机效果的置信区间。

另一方面,我希望在今年晚些时候购买一台新PC,但运气好的话,我也许可以将其推广,所以我一直在想如何最好地在新硬件上花有限的钱-更多的RAM ,更快的CPU等。通过观察任务管理器,我不认为RAM是问题(它永远不会超过物理使用的50%),但是CPU使用率也不会超过50%,这让我感到奇怪。我当前的设置是Intel Core i5 2.66GHz,4GB RAM,7200rpm HDD。以尽可能多的RAM为代价,获取尽可能快的CPU是否合理?我还想知道3级CPU缓存大小对像这样的统计计算问题的影响吗?

更新:已经问的元SO我一直建议重新措辞上的超级用户的问题和岗位。为此,我需要提供有关MCMCglmm中“幕后工作”的详细信息。我是否认为大部分的计算时间都花在了优化上,这是对的吗?我的意思是找到一些复杂函数的最大值?矩阵求逆和/或其他线性代数运算是否也是可能引起瓶颈的常见运算?我将非常感激能够提供给超级用户社区的任何其他信息。


我认为MCMC在此类问题上花了很长时间并不奇怪。我确信可能有一些方法可以使其运行更快。但是要想出正确的答案仍然需要时间。
Michael R. Chernick 2012年

@Michael Chernick,谢谢-我知道这仍然需要时间。我只想将其最小化,仅此而已。我父亲的工作是Oracle SPARC T4,运行MCMC的速度非常快;)
Joe King

3
@JoeKing,我对您的标题进行了编辑,使其更具描述性,并可能吸引了更多可以为您提供帮助的用户。我还发现,将lmer()模型拟合到大型数据集可能需要花费相当长的时间,特别是如果您需要多次进行。尽管其他用户(例如@DirkEddelbuettel)将比我有更多帮助,但是您的问题的答案可能在于并行计算。也有可能在stackoverflow上获得更好的答案。
2012年

宏,谢谢您的有用编辑。我也用过glmer(正如您从其他帖子中所知道的),这大约需要20秒,但是问题是它没有给出置信区间或标准错误,而且从我在邮件列表存档中看到的内容来看,lme4包说,随机效应的抽样分布可能会非常偏斜,因此不会报告这些统计数据。实际上MCMCglmm,到目前为止,我发现它们对我来说已经接近正常了(这并不是很有帮助-我只是说)。如果我要求将其迁移到SO会更好吗?
乔·金

1
我不知道mcmcglmm的细节,但是已经使用了很多MCMC方法。MCMC的好处是,它具有令人尴尬的可并行化性(这是一个技术术语!)。如果您有多个核心,则在每个核心上运行独立的链,然后合并结果。这就是我运行MCMC的方式,但是我已经编写了自己的并行C ++代码(使用MPI)来做到这一点。那么就硬件建议而言,请选择具有尽可能多内核的产品。假设您正在使用的任何工具都可以利用多个内核。在提供有关您问题的SU的信息方面,请确定是否可以利用内核。
Bogdanovist,2012年

Answers:


3

为什么不在Amazon的EC2云计算服务或类似的服务上运行它?MCMCpack,如果我没记错的话,大多数情况下都是用C实现的,因此除非您降低模型的复杂性,迭代等,否则它不会变得更快。有了EC2或类似的云计算服务,无论什么情况,您都可以拥有多个实例。规格,然后一次运行所有模型。


对此的一种修改:在m2.4xlarge(68.7GB RAM选件)上运行是保证获得完整计算机的唯一方法,这样就不必遇到VM(虚拟机)上可能发生的RAM缓存问题。 / AMI)在机器的一小部分上运行。
Iterator 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.