【发布时间】:2018-03-15 06:21:33
【问题描述】:
我在 R 中有一个脚本,它利用了 doParallel 包和并行化的 foreach 函数。我目前正在使用detectCores() 命令的变体注册我的集群,该命令运行良好,因为我使用的机器有 32 个内核。
我的问题是,如果我可以通过多台 Linux 机器访问 HPC 资源,是否可以从多台机器上 detectCores() 并在单个 foreach 调用中实现它们?
例如,如果我提交我的 HPC 作业以使其使用两个节点,是否可以让 detectCores() 函数生成 64 而不是 32 的值?
【问题讨论】:
-
我不确定我是否完全理解您在寻找什么。您是否在问如何设置 R 工作人员集群,以便它们分布在多台机器上,并且某些机器将运行多个工作人员?这可以使用
parallel::makeCluster()来完成。或者您是在问如何使用detectCores()来查询您的不同机器有多少个内核? -
是的,我想使用多台机器,每台机器上有多个工人。如何在不使用某些版本的 MPI(
Rmpi、pbdMPI等)的情况下使用parallel::makeCluster()函数来做到这一点?在我自己的实验中,我发现如果我创建一个集群,其指定的内核数量多于我机器上物理可用的内核数量,那么模拟速度会大大降低。如何为多台机器执行makeCluster(),如何确保我在每台机器上使用正确数量的内核? -
例如,
parallel::makeCluster(c("n1", "n1", "n1" "n2", "n3"))将建立一个 (PSOCK) 集群,其中机器n1上的 3 个工作人员、n2上的 1 个工作人员和n3上的 1 个工作人员。 -
这是有道理的。所以理论上我可以像
parallel::makeCluster(c(rep("n1",detectCores()), rep("n2", detectCores()), rep("n3", detectCores())), type = "PSOCK")命令一样使用?当然,假设每个节点具有相同数量的核心。非常感谢您的帮助。 -
@amelcher 有没有办法使用 makeCluster(),然后使用 detectCores() 测试集群上总共有多少个内核可用?我有一个脚本,它最初是为具有多个内核的服务器编写的(使用 mclapply() ),并且希望在高性能计算集群上使用它,并尽可能地进行少量更改。
标签: r hpc parallel.foreach doparallel