标签: snowfall

并行流程的沟通:我有什么选择?

我试图更深入地研究R例程的并行化。

关于一堆“工人”过程的沟通,我有哪些选择?

  1. 各个工人之间的沟通?
  2. 工人与“ 主人 ”过程的沟通?

AFAIU,没有“ 共享环境/共享内存 ”之类的东西,主服务器以及所有工作进程都可以访问,对吗?

到目前为止,我想到的最好的主意是使通信基于将JSON文档读写到硬盘上。这可能是个坏主意;-)我选择.json.Rdata文件,因为JSON似乎经常用于软件间的通信,因此我认为应该使用该“标准”。

期待了解更好的选择!

仅供参考:我通常基于基本包并行和contrib包降雪的功能sfClusterApplyLB()进行并行化,主要依靠函数来完成工作

编辑

我应该说我在Windows上运行,但是非常感谢基于Linux的答案/提示!

parallel-processing r shared-memory snowfall

5
推荐指数
2
解决办法
848
查看次数

使用降雪进行并行计算时为什么不进行负载平衡?

很长一段时间以来,我一直在使用sfLapply来处理很多并行r脚本.然而,最近我已经深入研究并行计算,我一直在使用sfClusterApplyLB,如果单个实例不需要花费相同的时间来运行,那么可以节省大量时间.如果sfLapply将在加载新批处理之前等待批处理的每个实例完成(这可能导致空闲实例),完成任务的sfClusterApplyLB实例将立即分配给列表中的其余元素,因此可能会节省相当多的时间当实例没有花费相同的时间时.这让我质疑为什么我们在使用降雪时不想平衡我们的跑步?到目前为止我唯一发现的是,当并行脚本出现错误时,sfClusterApplyLB仍会在发出错误之前循环遍历整个列表,而sfLapply将在尝试第一批后停止.我还缺少什么?是否存在负载平衡的任何其他成本/缺点?下面是一个示例代码,显示了两者之间的差异

rm(list = ls()) #remove all past worksheet variables
working_dir="D:/temp/"
setwd(working_dir)
n_spp=16
spp_nmS=paste0("sp_",c(1:n_spp))
spp_nm=spp_nmS[1]
sp_parallel_run=function(sp_nm){
  sink(file(paste0(working_dir,sp_nm,"_log.txt"), open="wt"))#######NEW
  cat('\n', 'Started on ', date(), '\n') 
  ptm0 <- proc.time()
  jnk=round(runif(1)*8000000) #this is just a redundant script that takes an arbitrary amount of time to run
  jnk1=runif(jnk)
  for (i in 1:length(jnk1)){
    jnk1[i]=jnk[i]*runif(1)
  }
  ptm1=proc.time() - ptm0
  jnk=as.numeric(ptm1[3])
  cat('\n','It took ', jnk, "seconds to model", sp_nm)

  #stop sinks
  sink.reset <- function(){
    for(i in seq_len(sink.number())){
      sink(NULL)
    }
  }
  sink.reset()
}
require(snowfall)
cpucores=as.integer(Sys.getenv('NUMBER_OF_PROCESSORS'))

sfInit( parallel=T, cpus=cpucores) # …
Run Code Online (Sandbox Code Playgroud)

parallel-processing r snowfall

5
推荐指数
1
解决办法
409
查看次数

R:在doParallel /降雪中制作集群

我在局域网上有两台服务器,全新安装了Centos 6.4 minimal和R 3.0.1.两台计算机都安装了doParallel,snow和snowfall软件包.

服务器可以很好地互相ssh.

当我尝试在任一方向上创建集群时,我会收到密码提示,但输入密码后,它会无限期挂起.

makePSOCKcluster("192.168.1.1",user="username")
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

编辑:

我也尝试在上面提到的计算机上调用makePSOCKcluster,其主机能够用作从属设备(来自其他计算机),但它仍然挂起.那么,是否可能存在防火墙问题?我也尝试使用带端口22的makePSOCKcluster:

> makePSOCKcluster("192.168.1.1",user="username",port=22)
Error in socketConnection("localhost", port = port, server = TRUE, blocking = TRUE,  :
  cannot open the connection
In addition: Warning message:
In socketConnection("localhost", port = port, server = TRUE, blocking = TRUE,  :
  port 22 cannot be opened
Run Code Online (Sandbox Code Playgroud)

这是我的iptables

# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state …
Run Code Online (Sandbox Code Playgroud)

parallel-processing r cluster-computing snowfall snow

4
推荐指数
1
解决办法
3331
查看次数

在 R 中并行运行函数

我有两个函数fun1fun2。我想在我的 R 脚本中并行运行它们。当它们完成时,我想按顺序使用它们的输出进行进一步处理。我想这意味着我需要等待它们完成。

我非常感谢任何提示或指示。

谢谢你。

r snowfall

3
推荐指数
1
解决办法
1995
查看次数

在多个内核上运行不同的程序

希望这是一个简单的问题,我忽略了答案,但在今天早上的搜索中,我一无所获。

我的计算机上有四个核心,并且希望在多个核心上同时运行 R 中的不同程序(循环)。如果我打开四个 R 会话,它们会自动放置在不同的核心上,还是我需要找到一种方法来处理降雪?

我之前曾成功地使用 Snowfall 来运行相同的程序,但之前具有不同的值。但是降雪能让我在不同的内核上运行完全不同的程序吗?我可以将每个模拟循环设置为不同的函数(即:func1、func2、func3、func4),然后让 Snowfall 将每个函数分配给不同的核心吗?

谢谢你的帮助

r snowfall

2
推荐指数
1
解决办法
2269
查看次数