Windows上的多台计算机makePSOCKcluster:构建分步指南

时间:2015-09-14 19:00:22

标签: r ssh parallel-processing putty

我一直在尝试使用多台计算机构建一个集群三天,并且失败了。所以现在我要尝试吸吮你们一群为我解决问题。如果一切顺利,我希望我们能够生成一个循序渐进的指南,以便将来作为参考使用,因为到目前为止,我还没有找到一个合适的参考来设置它(也许这太具体了?)

就我而言,我们假设使用PuTTY作为SSH客户端的Windows 7,并且'localhost'将作为主服务器。

此外,我们现在假设同一网络上只有两台计算机。我想这个过程很容易概括,如果我可以让它在两台计算机上运行,​​我可以让它在三台计算机上工作。因此,我们将处理localhostremote-computer

这是我到目前为止收集的内容(底部有引用链接)

  1. localhost
  2. 上安装PuTTY
  3. remote-computer
  4. 上安装PuTTY
  5. remote-computer
  6. 上安装SSH服务器
  7. 为它分配一个端口来监听? (我不确定这一步)
  8. localhost
  9. 上安装R.
  10. remote-computer
  11. 上安装相同版本的R.
  12. 将R添加到localhostremote-computer
  13. 上的PATH环境变量中
  14. localhost
  15. 运行以下R代码

    代码:

    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

3 个答案:

答案 0 :(得分:4)

充其量,这是部分答案。我还没有建立一个集群,但这里描述的步骤非常好地记录了我是如何达到这一点的。

配置:

  1. 在&#39; remote-computer&#39;
  2. 上安装PuTTY
  3. 在&#39; remote-computer&#39;
  4. 上安装SSH服务器
  5. 在远程计算机上安装R&#39; (使用与on&#39; localhost&#39;相同的R版本)
  6. 将R添加到路径

  7. 在&#39; localhost&#39;

  8. 上安装PuTTY
  9. 在&#39; localhost&#39;
  10. 上安装R.
  11. 将R添加到PATH
  12. 测试连接:第一阶段

    1. 从命令行运行
    2. C:\PuTTYPath\plink.exe -pw [password] [username]@[remote_ip_address] Rscript -e rnorm(100)

      (确认返回100个正常随机变量

      1. 从命令行运行
      2. 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;)

        测试连接:第二阶段

        1. 从R会话中,运行

          system(paste0("C:/PuTTYPath/plink.exe -pw [password] ", "[username]@[remote_ip_address] ", "RScript -e rnorm(100)"))

          (确认返回100个正常随机变量)

        2. 从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"))

        3. (确认在SSH服务器上启动并维护会话登录远程计算机&#39;

          建立一个集群

          1. 从R会话中,运行

            library(snow) cl <- makeCluster(spec = c("localhost", "[remote_ip_address]"), rshcmd = "C:/PuTTY/plink.exe -pw [password]", host = "[local_ip_address]")

          2. (应在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将永远挂起,我认为这两个帖子基本上都停留在同一个地方。我也发布了我对该问题的回答,讨论如何使其发挥作用。

R Parallel - connecting to remote cores

答案 2 :(得分:0)

由于我不具有对Jeff的答案发表评论的声誉,因此我将其发布为答案:

我发现使用makePSOCKcluster自动启动群集节点在Windows中不起作用的原因是内部arg函数{{1}中的outfileparallel自变量}包装在newPSOCKnode函数中。这导致cmd.exe和Rscript.exe的组合返回错误,从而导致shQuotes永远挂起。

以下两个功能定义假定使用基于密钥的密码makePSOCKclustermakePSOCKcluter / ssh正确配置,从而可以使用putty自动启动群集节点。 -less登录:

plink

如果有机会,我打算用更完整的设置说明来更新此响应。