R中的并行化:如何在每个节点上“源”?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R中的并行化:如何在每个节点上“源”?相关的知识,希望对你有一定的参考价值。

我使用以下方法创建并行工作者(所有工作在同一台机器上):

MyCluster = makeCluster(8)

如何让这8个节点中的每个节点都来源我写的R文件?我试过了:

clusterCall(MyCluster, source, "myFile.R")
clusterCall(MyCluster, 'source("myFile.R")')

和几个相似的版本。但都没有效果。你能帮我找错吗?

非常感谢你!

答案

以下代码符合您的目的:

library(parallel)

cl <- makeCluster(4)
clusterCall(cl, function() { source("test.R") })

## do some parallel work

stopCluster(cl)

你也可以使用clusterEvalQ()做同样的事情:

library(parallel)

cl <- makeCluster(4)
clusterEvalQ(cl, source("test.R"))

## do some parallel work

stopCluster(cl)

但是,这两种方法之间存在细微差别。 clusterCall()在每个节点上运行一个函数,而clusterEvalQ()在每个节点上计算一个表达式。如果你有一个可变源文件列表,clusterCall()将更容易使用,因为clusterEvalQ(cl,expr)将任何expr视为一个表达式,所以在那里放一个变量是不方便的。

另一答案

如果使用命令来源本地文件,请确保该文件存在。

否则将文件放在网络共享或NFS上,并获取绝对路径。

更好的是,标准答案,写一个包,并在每个节点上安装该包,然后只需调用library()require()

以上是关于R中的并行化:如何在每个节点上“源”?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 sfInit 和 makeCluster 类型“MPI”/R 中的消息传递/集群上的并行化

在一组不同的解释变量上并行化 R 中的面板 logit 计算

在 Python 中通过线程/核心/节点并行化 for 循环

R中的并行优化

如何使 pyspark 作业在多个节点上正确并行化并避免内存问题?

如何在 fasta 文件中并行化计算,其中每个处理器采用一个序列