r语言 - 错误:找不到对象'.doSnowGlobals'?



我试图在4个节点上并行化代码(type =" SOCK")。这是我的代码。

library(itertools)
library(foreach)
library(doParallel)
library(parallel)
workers <- ip address of 4 nodes
cl = makePSOCKcluster(workers, master="ip address of master")
registerDoParallel(cl)
z <- read.csv("ProcessedData.csv", header=TRUE, as.is=TRUE)
z <- as.matrix(z)

system.time({
  chunks <- getDoParWorkers()
  b <- foreach (these = isplitIndices(nrow(z),
                                      chunks=chunks),
                .combine = c) %dopar% {
                  a <- rep(0, length(these))
                  for (i in 1:length(these)) {
                    a[i] <- mean(z[these[i],])
                  }
                  a
                }
})

我得到这个错误:

4个节点产生错误;第一个错误:object '。doSnowGlobals不发现。

这段代码运行良好,如果我使用doMC即使用相同的机器的核心。但是当我尝试使用其他计算机进行并行计算时,我得到了上述错误。当我将其更改为registerDoSNOW时,错误仍然存在。

snow和DoSNOW在集群中工作吗?我可以使用snow在本地主机上创建节点,但不能在集群上创建节点。有人在用雪吗?

要在每个worker上设置库路径,可以运行:

clusterEvalQ(cl, .libPaths("Your library path"))

如果任何工作程序无法加载dopparallel包,则会得到此错误。你可以这样做:安装dopparallel到某个目录,并通过".libPaths"将主目录指向它:

> .libPaths('~/R/lib.test')
> library(doParallel)
> cl <- makePSOCKcluster(3, outfile='')
starting worker pid=26240 on localhost:11566 at 13:47:59.470
starting worker pid=26248 on localhost:11566 at 13:47:59.667
starting worker pid=26256 on localhost:11566 at 13:47:59.864
> registerDoParallel(cl)
> foreach(i=1:10) %dopar% i
Warning: namespace ‘doParallel’ is not available and has been replaced
by .GlobalEnv when processing object ‘’
Warning: namespace ‘doParallel’ is not available and has been replaced
by .GlobalEnv when processing object ‘’
Warning: namespace ‘doParallel’ is not available and has been replaced
by .GlobalEnv when processing object ‘’
Error in checkForRemoteErrors(lapply(cl, recvResult)) : 
  3 nodes produced errors; first error: object '.doSnowGlobals' not found

当在工作线程上反序列化来自parallel的函数时,会发生该警告。当函数执行并试图访问. dosnowglobal时,错误发生,该函数定义在dopparallel命名空间中,而不是在. globalenv中。

您还可以通过执行:

来验证工作线程上的dopparallel是否可用。
> clusterEvalQ(cl, library(doParallel))
Error in checkForRemoteErrors(lapply(cl, recvResult)) : 
  3 nodes produced errors; first error: there is no package called ‘doParallel’

@Steve Weston回答的一个具体情况是,当您的工作人员无法加载给定的包(例如dopparallel1),因为该包在Packrat项目中。将这些包安装到系统库中,或者其他工作人员能够找到它们的地方。

我今天遇到了同样的问题,我尝试了上面所有的答案,但没有一个对我有效。然后我简单地重新安装了doSNOW包,问题神奇地解决了。

所以这些修复对我来说都不起作用。在我的特殊情况下,我使用自定义的R库位置。如果我的工作目录是我的自定义libraries文件夹所在的基本目录,那么并行处理可以工作,但是如果我使用setwd()来更改工作目录,那么并行处理就失败了。

这个自定义库位置没有被传递给工作节点,所以他们在R的默认库目录中寻找不存在的包。@Nat的修复对我不起作用;工作节点仍然找不到我的自定义库文件夹。起作用的是:

在向节点发送作业之前:

paths <- .libPaths()

然后我将作业连同参数paths一起发送给节点。然后,中,我简单地调用了worker函数:

.libPaths(paths)

相关内容

  • 没有找到相关文章

最新更新