Emacs是否可以使用流浪汉在远程HPC节点上的交互式会话中运行?


12

我一直在将Emacs与ESS和Tramp结合使用以加载远程文件并在HPC计算机上运行远程R进程。使用ssh键,tramp可以轻松地在C-x C-f处查找文件,/ssh:myserver:/path/to/file然后M-x R启动R会话。

但是,在使用作业调度系统(例如Sun Grid Engine或Torque)的HPC计算机上,在根节点上可以使用多少内存和CPU受到限制,因此我必须使用来启动交互式会话qsub -I

qsub -I在建立ssh连接之后,是否可以配置tramp,ssh和/或Emacs在从属节点上启动交互式会话(使用或等效方法)?


我不能完全确定局限性是什么?
PythonNut 2015年

@PythonNut我可以使用流浪汉ssh到头节点,但是不知道如何连接到从节点(不能通过ssh直接访问)。
David LeBauer

似乎不可能告诉ESS首先启动其他Shell,但是将其tramp-remote-shell设置为qrsh或,qlogin您可能能够获得交互式群集会话。
rekado

Answers:


5

听起来您应该扩展tramp-methods,添加一个与该sudo方法类似但使用的新方法qsub -I。然后,您将能够使用多跳流浪路径首先连接到头节点,然后再连接到计算节点。

尝试这个:

(add-to-list 'tramp-methods
  '("qsub"
    (tramp-login-program        "qsub")
    (tramp-login-args           (("-I"))) ; other options here?
    ;; Local $SHELL could be a nasty one, like zsh or fish.  Let's override it.
    (tramp-login-env            (("SHELL") ("/bin/sh")))
    (tramp-remote-shell         "/bin/sh")
    (tramp-remote-shell-args    ("-c"))
    (tramp-connection-timeout   10)))

然后,您将使用/ssh:myserver|qsub:myserver:/path/to/file

您可能需要指定其他选项以传递给qsub; 我没有使用过,所以在这里我无法为您提供帮助。您还需要查看可以在流浪汉方法上指定的其他选项。在tramp.el中列出了几十个。


3

我一直在努力做同样的事情。我找到了一条不同的路线,使我可以做基本上相同的事情。

您可以通过打开shell缓冲区,M-x shell然后从那里连接到登录节点,然后通过打开连接到交互式会话qsub -I。进入交互式会话后,请输入命令来启动R会话R。在那里,你可以做M-x ess-remote。这将提示一个迷你缓冲区,询问您要运行哪个程序(R,S +,Stata等)。选择R后,便可以在远程外壳程序上使用R会话,就像在本地计算机上使用ESS一样。

我本人通过漫游到远程节点(在单独的窗口中)来打开保存在远程节点中的Rscripts,并使用ess-remote如上所述通过R连接的R会话进行工作。这样,R会话可以直接与我正在使用的Rscript进行交互。(例如,source('code.R')R中的命令将能够读取我可能刚刚编辑的HPC集群中的“ code.R”。如果我是在本地计算机中编辑Rscripts,则R的ess-remote会话不会。除非我每次都将它们上传到远程节点,否则它们将无法读取。)

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.