r - 在 R foreach() 下并行运行时无法识别动态库依赖项
问题描述
我正在使用Rfast
包,它导入包RcppZiggurat
。我在 Linux 集群(Red Hat 6.1)上运行 R 3.6.3。软件包安装在我的本地目录中,但 R 安装在系统范围内。
colsums()
当我直接调用Rfast 函数(例如)时,它们运行良好。但是当我在如下循环中调用它们时foreach()
(编辑:我添加了代码来注册集群,如 Rui Barradas 所指出的,但它没有解决问题)。
library(Rfast)
library(doParallel)
library(foreach)
cores <- detectCores()
cl <- makeCluster(cores)
registerDoParallel(cl)
A <- matrix(rnorm(1e6), 1000, 1000)
cm <- foreach(n = 1:4, .packages = 'Rfast') %dopar% colmeans(A)
stopCluster(cl)
然后我得到一个错误:
unable to load shared object '/home/users/sutd/R/x86_64-pc-linux-gnu-library/3.6/RcppZiggurat/libs/RcppZiggurat.so':
libgsl.so.0: cannot open shared object file: No such file or directory
不知何故,动态库在直接调用时被识别,但在foreach()
.
我知道它libgsl.so
位于 中/usr/lib64/
,所以我在 R 脚本的开头添加了以下行
Sys.setenv(LD_LIBRARY_PATH=paste("/usr/lib64/", Sys.getenv("LD_LIBRARY_PATH"), sep = ":"))
但它没有用。
我也尝试过,dyn.load('/usr/lib64/libgsl.so')
但出现以下错误:
Error in dyn.load("/usr/lib64/libgsl.so") : unable to load shared object '/usr/lib64/libgsl.so':
/usr/lib64/libgsl.so: undefined symbol: cblas_ctrmv
如何使依赖项在foreach()
并行循环中可用?
笔记
在实际用例中,我使用的是遗传算法包GA
,并使用GA::ga()
它来处理foreach()
循环,并且在循环中我使用我自己的包中的一个函数来调用这些Rfast
函数。所以我希望有一个解决方案,我不必修改foreach()
call。
解决方案
以下工作没有问题。与问题中的代码不同,它首先检测可用内核的数量,创建一个集群并使其可用于foreach
.
library(Rfast)
library(doParallel)
library(foreach)
cores <- detectCores()
cl <- makeCluster(cores)
registerDoParallel(cl)
set.seed(2020)
A <- matrix(rnorm(1e6), 1000, 1000)
cm <- foreach(n = 1:4,
.combine = rbind,
.packages = "Rfast") %dopar% {
colmeans(A)
}
stopCluster(cl)
str(cm)
#num [1:4, 1:1000] -0.02668 -0.02668 -0.02668 -0.02668 0.00172 ...
# - attr(*, "dimnames")=List of 2
# ..$ : chr [1:4] "result.1" "result.2" "result.3" "result.4"
# ..$ : NULL
推荐阅读
- node.js - 避免在特殊情况下通过实时数据库触发 Firebase 功能
- tsql - 如何在 T-SQL 中选择不同的组合
- java - org.springframework.beans.factory.UnsatisfiedDependencyException:创建类路径资源中定义的名称为“commandGateway”的bean时出错
- python - 如何使用熊猫在多列excel中使用相同的条件(替换)?
- c# - CLError 和 CLErrorDomain 中的未知类型名称“NS_ASSUME_NONNULL_BEGIN”错误
- python - 如何说服鼠标右键单击弹出菜单在wxPython中显示鼠标光标位置附近?
- git - 管道#37652在阶段准备索引中的主控失败
- json - 如何正确地 JSON 编码/解码 Flutter 中的 Duration 字段
- sql - 加入与父母和祖父母的关系
- javascript - 不确定如何在 useEffect 中集成功能