首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >错误:找不到对象'.doSnowGlobals‘?

错误:找不到对象'.doSnowGlobals‘?
EN

Stack Overflow用户
提问于 2014-08-01 11:44:57
回答 5查看 9.4K关注 0票数 10

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

代码语言:javascript
运行
复制
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个节点产生错误;第一个错误:找不到对象'.doSnowGlobals‘。

如果我使用doMC,即使用同一台机器的内核,则此代码运行良好。但是,当我试图使用其他计算机进行并行计算时,就会出现上述错误。当我将其更改为registerDoSNOW时,错误仍然存在。

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

EN

回答 5

Stack Overflow用户

发布于 2014-09-15 18:15:43

如果任何工作人员无法加载doParallel包,则可以获得此错误。您可以通过将doParallel安装到某个目录并通过“.libPaths”指向主目录来实现这一点:

代码语言:javascript
运行
复制
> .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

当一个来自doParallel的函数被反序列化到一个工作人员上时,就会发生警告。当函数执行并尝试访问在.doSnowGlobal命名空间中定义的doParallel (而不是.GlobalEnv )时,就会发生错误。

还可以通过执行以下命令来验证工作人员是否可以使用doParallel:

代码语言:javascript
运行
复制
> clusterEvalQ(cl, library(doParallel))
Error in checkForRemoteErrors(lapply(cl, recvResult)) : 
  3 nodes produced errors; first error: there is no package called ‘doParallel’
票数 6
EN

Stack Overflow用户

发布于 2016-10-19 18:34:33

若要在每个工作人员上设置库路径,可以运行:

代码语言:javascript
运行
复制
clusterEvalQ(cl, .libPaths("Your library path"))
票数 6
EN

Stack Overflow用户

发布于 2016-04-27 21:48:04

@Steve回答的一个具体案例是,您的员工无法加载给定的包(例如doParallel),因为包在Packrat项目中。将软件包安装到系统库中,或将其安装到工作人员能够找到的其他地方。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25079527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档