与云中运行的R会话进行交互的最佳方法


10

我有R于亚马逊EC2上运行,使用的修改版本Bioconductor的AMI。当前,我正在使用腻子将ssh放入服务器,从命令行启动R,然后将脚本从notepad ++复制并粘贴到我的腻子会话中。

事情是,我讨厌剪切和粘贴。感觉很困难,有时我会遇到奇怪的缓冲问题,这些问题使我的代码搞砸了。我不能使用RStudio,因为它不支持我严重依赖的多核

有什么更优雅的方式做到这一点?

/编辑:感谢所有的伟大建议。现在,我已经切换到将doeach与doRedis后端一起使用foreach,它在Mac,PC以及通过RStudio的Amazon上都可以很好地工作。一旦我学会了如何使用“ foreach” 编写一个模拟“ lapply”函数,此切换就非常容易。(此外,doRedis很棒!)


2
顺便说一句,这个问题在尚未建立的Computational Science SE上将是非常热门的话题。


Imo,screen + vim是赢家,但是这可能并不吸引所有人。
马克·克莱森

Answers:


12

我可以想到几种方法。我已经做了很多,这是我发现最有用的方法:

  1. Emacs守护程序模式。使用-X开关ssh进入EC2实例,以便将X窗口转发回您的删除计算机。使用守护程序模式将确保您在连接超时或断开连接时不会丢失状态
  2. 代替使用多核软件包,将不同的并行后端与foreach软件包一起使用。这样,您可以使用RStudio,这太棒了。Foreach很棒,因为您可以非并行地测试代码,然后只需更改后端(1或2行代码)即可切换到并行模式。我推荐doRedis后端。您在云中,不妨启动多台计算机!

+1用于Emacs守护程序模式。我最近在做很多ssh,这看起来真的很有用。
richiemorrisroe 2011年

有没有一种简单的方法可以使用foreach模拟lapply?我已经编写了很多利用apply的代码,而且我喜欢多核软件包,因为我可以简单地用mclapply替换lapply。是否有一个“ foreachlapply”,还是我不得不重新编写很多代码?谢谢!
Zach

1
好吧,doRedis只能做redis的东西;大量的投入并不是HPC计算的唯一原因。

13

最方便的方法是安装VNC服务器和一些轻型环境(如XFCE),并使自己成为一个虚拟会话,您可以从任何地方使用它(它会断开​​连接),例如: 在此处输入图片说明

其他好处是,您可以在虚拟桌面中使用本地剪贴板,并且比通过X11转发或复制图像文件更快地看到R绘图。

设置所有正确的位置(X init,ssh隧道)需要花费一些精力,但是互联网上充斥着有关如何做到这一点的教程。


1
NX甚至更好,它通常具有大大改善的性能特征。
scw

您想要一个喜欢的教程,还是我应该看看google上排名靠前的几个结果?
Zach

3

我不知道Amazon EC2的工作原理,所以也许我的简单解决方案不起作用。但是我通常使用scp或sftp(如果在Windows上则通过WinSCP)或git。


3

我将使用rsync将脚本和数据文件推送到服务器,然后使用“ nohup Rscript myscript.R> output.out&”运行内容,并在完成后使用rsync提取结果。


2
screen还是tmuxnohup它们更好-他们还分离了脚本,因此不会因注销而被杀死,但允许重新附加会话并重新开始,甚至可以从其他客户端计算机重新开始。tmux甚至可以用作一种文本模式窗口管理器。

0

VIM + tmux + VIM粘液。您将获得最出色的文本编辑器,并且能够将代码从编辑器发送到R命令行(就像在Rstudio中一样)。


0

由于Louis Aslett创建了AMI,因此我一直在EC2上使用R Studio 。您不必知道任何SSH或其他任何内容(当然,除了R之外)。您只需要一个EC2帐户。如其他答案中所述,R Studio确实通过例如foreach包支持并行计算。这确实可以利用EC2的功能。通过使用经过计算优化的实例(32个内核),我几乎可以免费(每小时几美元)大大减少ML模型的培训时间。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.