¿Puede Emacs usar vagabundo para ejecutarse en una sesión interactiva en un nodo HPC remoto?

11

He estado usando Emacs con ESS y vagabundo para cargar archivos remotos y ejecutar procesos R remotos en computadoras HPC. Con las teclas ssh, tramp hace que sea fácil C-x C-fencontrar el archivo y /ssh:myserver:/path/to/fileluego M-x Riniciar una sesión R.

Sin embargo, en las computadoras HPC que usan un sistema de programación de trabajos (por ejemplo, Sun Grid Engine o Torque) hay restricciones sobre la cantidad de memoria y CPU que se pueden usar en el nodo principal, por lo que tengo que iniciar una sesión interactiva usando qsub -I.

¿Es posible configurar vagabundo, ssh y / o Emacs para iniciar una sesión interactiva en un nodo esclavo (usando qsub -Io equivalente) después de realizar una conexión ssh?

David LeBauer
fuente
No estoy completamente seguro de cuáles son las limitaciones.
PythonNut
@PythonNut Puedo ssh al nodo principal usando vagabundo, pero no sé cómo conectarme al nodo esclavo (al que no se puede acceder directamente a través de ssh).
David LeBauer
Parece que no es posible decirle a ESS que inicie un shell diferente primero, pero con tramp-remote-shellset to qrsho qlogines posible que pueda obtener una sesión de clúster interactiva.
rekado

Respuestas:

4

Parece que debería extenderlo tramp-methods, agregando un nuevo método que es similar al sudométodo pero que usa en su qsub -Ilugar. Entonces podrá usar una ruta de vagabundo de múltiples saltos para conectarse primero al nodo principal y luego para conectarse a un nodo de cómputo.

Prueba esto:

(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)))

Entonces usarías un camino de vagabundo como /ssh:myserver|qsub:myserver:/path/to/file.

Es posible que deba especificar otras opciones para pasar a qsub; No lo he usado, así que no puedo ayudarte allí. También querrá revisar las otras opciones que puede especificar en un método de vagabundo; hay un par de docenas en tramp.el.

db48x
fuente
3

He estado luchando por hacer lo mismo. Encontré una ruta diferente que me permitió hacer básicamente lo mismo.

Puede abrir un búfer de shell M-x shelldesde allí y conectarse al nodo de inicio de sesión, y luego conectarse a la sesión interactiva mediante qsub -I. Una vez que esté en la sesión interactiva, inicie una sesión R escribiendo el comando R. Ahí puedes hacer M-x ess-remote. Esto generará un minibúfer que le preguntará qué programa desea ejecutar (R, S +, Stata, etc.) Una vez que seleccione R, podrá usar la sesión R en el shell remoto tal como usa ESS en la máquina local.

Personalmente, abro Rscripts guardados en el nodo remoto al entrar (en una ventana separada) y trabajo con la sesión R conectada por el ess-remotedescrito anteriormente. De esta manera, la sesión R puede interactuar directamente con los Rscripts con los que estoy trabajando. (Por ejemplo, el source('code.R')comando en R podrá leer el 'código. R' en el clúster de HPC, que podría haber editado. Si estuviera editando Rscripts en mi máquina local, la sesión de R de ess no remota ' No podrá leerlos a menos que los haya subido al nodo remoto cada vez).

Parque Joonha
fuente