如何使用多核处理更快地运行 glm 功能
Posted
技术标签:
【中文标题】如何使用多核处理更快地运行 glm 功能【英文标题】:How can I use multi cores processing to run glm function faster 【发布时间】:2014-05-11 15:38:42 【问题描述】:我对 r 有点陌生,我想使用一个允许多核处理的包,以便更快地运行 glm 功能。我想知道是否有可以用于这件事的语法。 这是我写的一个示例 glm 模型,我可以添加一个将使用多核的参数吗?
g<-glm(IsChurn~.,data=dat,family='binomial')
谢谢。
【问题讨论】:
不容易。您也许可以安装矢量化/多核 BLAS(线性代数)库。也许看看Revolution R ... 例如blog.revolutionanalytics.com/2010/06/…(但请参阅那里的 cmets,了解这是否真的有帮助glm
)
***.com/questions/16284766/…
glm
不使用 BLAS。我不知道开源 R 中有任何多核 glm 实现。Revolution(您必须付费)具有更快的 glm 实现。
@JamesKing 有一些 1 级 BLAS 调用,例如,here。虽然,它只是 1 级。
【参考方案1】:
其他有用的软件包有:
http://cran.r-project.org/web/packages/gputools/gputools.pdf
使用 gpuGlm
和
http://cran.r-project.org/web/packages/mgcv/mgcv.pdf
见 mgcv.parallel 部分关于
gam(..., control=list(nthreads=nc))
或者
bam(..., cluster=makeCluster(nc))
其中 nc 是你的真实核心数
【讨论】:
注意:gputools
已“于 2017 年 12 月 19 日存档,因为尽管有提醒但检查问题仍未得到纠正”(根据 CRAN 页面)。【参考方案2】:
我使用了 speedglm,结果非常好:使用 glm 需要 14.5 秒才能获得结果,而使用 speedglm 需要 1.5 秒。提高了 90%..代码非常简单:m <- speedglm(y ~ s1 + s2,data=df)
。只是不要忘记安装和调用包。另一个问题:您不能将所有变量都与“。”一起使用。 speedglm 不会将该点识别为“所有变量”。
【讨论】:
【参考方案3】:一个新选项,是我的包裹parglm
。您可以找到计算时间的比较here。下面给出了两个已实现方法的 18 核机器上的计算时间与已使用内核数量的关系图
虚线是glm
的计算时间,虚线是speedglm
的计算时间。带有空心圆的方法计算 Fisher 信息,然后求解标准方程,如speedglm
。完整的圆圈将 QR 分解为glm
。前者速度更快,但稳定性较差。
我在相关问题的答案here 中添加了更多关于 QR 方法的 cmets。
【讨论】:
以上是关于如何使用多核处理更快地运行 glm 功能的主要内容,如果未能解决你的问题,请参考以下文章