【发布时间】:2018-07-25 07:24:28
【问题描述】:
我正在处理一个大型数据集,我用它来进行某些计算。由于它是一个庞大的数据集,我正在使用的机器完成这项工作的时间过长,因此我决定使用 future 包来在多台机器之间分配工作并加快计算速度。 所以,我的问题是,通过未来(使用 putty 和 ssh)我可以连接到那些机器(并行),但工作本身正在做主要的工作,没有任何分发。也许您可以提出一些解决方案:
- 如何让它在所有机器上工作;
- 还有,如何检查进程是否正常工作(我的意思是某些功能或任何有助于验证这些功能的功能,如果存在的话)。
我的代码:
library(future)
workers <- c("000.000.0.000", "111.111.1.111")
plan(remote, envir = parent.frame(), workers= workers, myip = "222.222.2.22")
start <- proc.time()
cl <- makeClusterPSOCK(
c("000.000.0.000", "111.111.1.111"), user = "...",
rshcmd = c("plink", "-ssh", "-pw", "..."),
rshopts = c("-i", "V:\\vbulavina\\privatekey.ppk"),
homogeneous = FALSE))
setwd("V:/vbulavina/r/inversion")
a <- source("fun.r")
f <- future({source("pasos.r")})
l <- future({source("pasos2.R")})
time_elapsed_parallel <- proc.time() - start
time_elapsed_parallel
f 和 l 对象应该并行完成,但主机正在完成所有工作,所以如果我能做一些关于它的事情,我有点困惑。
PS:我尝试了plan() 和remote, multiprocess, multisession, cluster,但什么也没有。
PS2:我的本地机器是 Windows,并尝试连接到 Kubuntu 和 Debian(所有这些机器都关闭了防火墙)。
提前谢谢。
【问题讨论】:
-
@Axeman 问题是计划代码对我没有任何作用,因为没有它有连接,但机器之间没有分配
-
@Axeman 所以是的,
plan(remote, envir = parent.frame(), workers= workers, myip = "192.168.2.48")我试过这个,Error in socketConnection("localhost", port = port, server = TRUE, blocking = TRUE, : reached elapsed time limit出现错误 -
@Axeman 哦,对不起,你是对的!
-
@Axeman 所以
workers只是我想用于连接的机器IP
标签: r windows ubuntu debian future