【发布时间】:2018-09-25 16:30:07
【问题描述】:
按照其他帖子中的建议,我在 R 中编写了自己的包,以并行化我使用 Rcpp 编写的函数。我可以加载包并且一切正常,但是当我使用 optimParallel 时,我收到消息:
checkForRemoteErrors(val) 中的错误: 3个节点产生错误;第一个错误:找不到对象“_EffES_profileLLcpp”
这是我正在做的事情:
library(optimParallel)
library(EffES) # EffES is my own package
cl <- makeCluster(detectCores()-1)
clusterEvalQ(cl, library(EffES))
clusterEvalQ(cl, library(optimParallel))
setDefaultCluster(cl = cl)
w.es <- optimParallel(par=rep(0.001,3), profileLLcpp, y=y.test, x=x.test, lower = rep(0.001,3), method = "L-BFGS-B")$par
Error in checkForRemoteErrors(val) :
3 nodes produced errors; first error: object '_EffES_profileLLcpp' not found
我做错了什么?
【问题讨论】:
-
登录工作节点,尝试加载它,看看会发生什么。也许
.libPaths()是不同的。也许您忘记在一个或多个节点上安装EffES。我们不知道。 -
你的电脑有几个核心?您使用哪些工具进行包开发?
-
它不在 GitHub 存储库中,但也许这有帮助:src
-
codebunk 链接没有多大帮助,因为它只包含您的“业务逻辑”。在这里,该文件周围的所有胶水都很有趣。例如,我认为没有必要使用
tools::package_native_routine_registration_skeleton(),因为Rcpp::compileAttributes()已经这样做了。 -
同理,如果“复杂”或“非标准”包失败,请尝试更简单的包。我对分布式工作的第一个测试总是报告进程 ID,或硬件 IP 地址,或者……返回。
标签: r parallel-processing rcpp