如何使用多核处理更快地运行 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 &lt;- speedglm(y ~ s1 + s2,data=df)。只是不要忘记安装和调用包。另一个问题:您不能将所有变量都与“。”一起使用。 speedglm 不会将该点识别为“所有变量”。

【讨论】:

【参考方案3】:

一个新选项,是我的包裹parglm。您可以找到计算时间的比较here。下面给出了两个已实现方法的 18 核机器上的计算时间与已使用内核数量的关系图

虚线是glm 的计算时间,虚线是speedglm 的计算时间。带有空心圆的方法计算 Fisher 信息,然后求解标准方程,如speedglm。完整的圆圈将 QR 分解为glm。前者速度更快,但稳定性较差。

我在相关问题的答案here 中添加了更多关于 QR 方法的 cmets。

【讨论】:

以上是关于如何使用多核处理更快地运行 glm 功能的主要内容,如果未能解决你的问题,请参考以下文章

如何在 python 中从 redshift 更快地处理数据?

我可以通过使用多个线程来更快地分配内存吗?

NetworkX和Graphscope哪个运算速度更快?

如何列出多核处理器(使用 WMI)中的所有 CPU ID?

如何缩放使用 glm::lookat() 获得的矩阵?

如何在嵌入Qt环境的matplotlib中更快地绘制大量信号?