我一直在尝试使用多台计算机构建一个集群三天,并且失败了。所以现在我要尝试吸吮你们一群为我解决问题。如果一切顺利,我希望我们能够生成一个循序渐进的指南,以便将来作为参考使用,因为到目前为止,我还没有找到一个合适的参考来设置它(也许这太具体了?)
就我而言,我们假设使用PuTTY作为SSH客户端的Windows 7,并且'localhost'将作为主服务器。
此外,我们现在假设同一网络上只有两台计算机。我想这个过程很容易概括,如果我可以让它在两台计算机上运行,我可以让它在三台计算机上工作。因此,我们将处理localhost
和remote-computer
。
这是我到目前为止收集的内容(底部有引用链接)
localhost
。remote-computer
remote-computer
localhost
remote-computer
localhost
和remote-computer
localhost
代码:
library(parallel)
cl <- makePSOCKcluster(c(rep("localhost", 2),
rep("remote-computer", 2)))
到目前为止,我已经完成了步骤1-3,不确定我是否需要执行4,完成5-7,而步骤8的代码只是无限期挂起。
当我检查我的SSH服务器日志时,似乎我没有从localhost
访问SSH服务器。所以看来我的第一个问题是正确配置SSH。有没有人成功做到这一点,你愿意分享你的专业知识吗?
EDIT 糟糕:参考 http://www.milanor.net/blog/wp-content/uploads/2013/10/03.FirstStepinParallelComputing.pdf
R Parallel - connecting to remote cores
https://stat.ethz.ch/pipermail/r-sig-hpc/2010-October/000780.html
答案 0 :(得分:4)
充其量,这是部分答案。我还没有建立一个集群,但这里描述的步骤非常好地记录了我是如何达到这一点的。
将R添加到路径
在&#39; localhost&#39;
C:\PuTTYPath\plink.exe -pw [password] [username]@[remote_ip_address] Rscript -e rnorm(100)
(确认返回100个正常随机变量
C:\PuTTYPath\plink.exe -pw [password] [username]@[remoate_ip_address] RScript -e parallel:::.slaveRSOCK() MASTER=[local_ip_address] PORT=100501 OUT=/dev/null TIMEOUT=2592000 METHODS=TRUE XDR=TRUE
(确认在SSH服务器上启动会话登录&#39;远程计算机&#39;)
从R会话中,运行
system(paste0("C:/PuTTYPath/plink.exe -pw [password] ",
"[username]@[remote_ip_address] ",
"RScript -e rnorm(100)"))
(确认返回100个正常随机变量)
从R会话中,运行
system(paste0("C:/PuTTY/plink.exe ",
"-pw [password] ",
"[username]@[remote_ip_address] ",
"RScript -e parallel:::.slaveRSOCK() ",
"MASTER=[local_ip_address] ",
"PORT=100501 ",
"OUT=/dev/null ",
"TIMEOUT=2592000 ",
"METHODS=TRUE ",
"XDR=TRUE"))
(确认在SSH服务器上启动并维护会话登录远程计算机&#39;
从R会话中,运行
library(snow)
cl <- makeCluster(spec = c("localhost", "[remote_ip_address]"),
rshcmd = "C:/PuTTY/plink.exe -pw [password]",
host = "[local_ip_address]")
(应在SSH服务器上启动和维护会话,登录远程计算机&#39;。 理想情况下,该功能将在&#39; cl&#39;被指派)
建立集群是我失败的关键所在。我运行makeCluster
并查看我的SSH服务器日志。它显示已建立连接,然后立即关闭。 makeCluster
从未完成投放,cl
未分配,而且我仍然坚持如何继续投放。我现在还不确定这是一个R问题还是配置问题。
没有充分的理由,我尝试使用snow
包运行它,如&#34;建立群集&#34;以上部分。当我使用snow
包时,群集已构建并稳定运行。不知道为什么我无法使用parallel
包,但至少我有一些功能。
答案 1 :(得分:0)
对于那些正在寻找在Windows中的多台计算机上建立集群的人来说,@ Benjamin的答案几乎是正确的,你需要按照他的指示直到最后一步,即建立一个集群,并确保以前的步骤都在您的计算机上工作。我的解决方案基于包&#39; Parallel&#39;而不是&#39; snow&#39;,它们基本相同。
代码模板:
machineAddresses <-list(list(host='[Server address]',user='[user name]',rscript="[The Rscript file in the server]",rshcmd="plink -pw [Your password]"))
cl <- makePSOCKcluster(machineAddresses,manual = F)
您必须填写代码中的所有[]。在我的电脑中,它是:
machineAddresses <-list(list(host='192.168.1.220',user='jeff',rscript="C:/Program Files/R/R-3.3.2/bin/Rscript",rshcmd="plink -pw qwer"))
cl <- makePSOCKcluster(machineAddresses,manual = F)
在Windows中运行集群非常棘手,函数makePSOCKcluster通常不能按预期工作。使其工作的最简单方法是将manual = F更改为manual = T并手动创建工作程序。这是一个相关的帖子,它讲述了为什么函数makePSOCKcluster将永远挂起,我认为这两个帖子基本上都停留在同一个地方。我也发布了我对该问题的回答,讨论如何使其发挥作用。
答案 2 :(得分:0)
由于我不具有对Jeff的答案发表评论的声誉,因此我将其发布为答案:
我发现使用makePSOCKcluster自动启动群集节点在Windows中不起作用的原因是内部arg
函数{{1}中的outfile
和parallel
自变量}包装在newPSOCKnode
函数中。这导致cmd.exe和Rscript.exe的组合返回错误,从而导致shQuotes
永远挂起。
以下两个功能定义假定使用基于密钥的密码makePSOCKcluster
或makePSOCKcluter
/ ssh
正确配置,从而可以使用putty
自动启动群集节点。 -less登录:
plink
如果有机会,我打算用更完整的设置说明来更新此响应。