Kann Emacs tramp verwenden, um eine interaktive Sitzung auf einem Remote-HPC-Knoten auszuführen?

11

Ich habe Emacs mit ESS und Tramp verwendet, um Remote-Dateien zu laden und Remote-R-Prozesse auf HPC-Computern auszuführen. Mit ssh-Schlüsseln erleichtert tramp das C-x C-fAuffinden von Dateien, /ssh:myserver:/path/to/filegefolgt vom M-x RStarten einer R-Sitzung.

Auf HPC-Computern, die ein Jobplanungssystem verwenden (z. B. Sun Grid Engine oder Torque), gibt es jedoch Einschränkungen hinsichtlich der Verwendung von Speicher und CPU auf dem Hauptknoten. Daher muss ich eine interaktive Sitzung mit starten qsub -I.

Ist es möglich, tramp, ssh und / oder Emacs so zu konfigurieren, dass qsub -Inach dem Herstellen einer ssh-Verbindung eine interaktive Sitzung auf einem Slave-Knoten (mit oder gleichwertig) gestartet wird?

David LeBauer
quelle
Ich bin mir nicht ganz sicher, wo die Einschränkungen liegen.
PythonNut
@PythonNut Ich kann mit tramp zum Kopfknoten ssh, weiß aber nicht, wie ich mich dann mit dem Slave-Knoten verbinden soll (auf den über ssh nicht direkt zugegriffen werden kann).
David LeBauer
Es scheint nicht möglich zu sein, ESS anzuweisen, zuerst eine andere Shell zu starten, aber mit tramp-remote-shellset to qrshoder können qloginSie möglicherweise eine interaktive Clustersitzung erhalten.
rekado

Antworten:

4

Es hört sich so an, als sollten Sie erweitern tramp-methodsund eine neue Methode hinzufügen, die der sudoMethode ähnelt, aber qsub -Istattdessen verwendet. Sie können dann einen Multi-Hop-Tramp-Pfad verwenden, um zuerst eine Verbindung zum Kopfknoten und dann eine Verbindung zu einem Rechenknoten herzustellen.

Versuche dies:

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

Sie würden dann einen Tramppfad wie verwenden /ssh:myserver|qsub:myserver:/path/to/file.

Möglicherweise müssen Sie andere Optionen angeben, um sie an qsub zu übergeben. Ich habe es nicht benutzt, also kann ich dir dort nicht helfen. Sie sollten sich auch die anderen Optionen ansehen, die Sie für eine Tramp-Methode angeben können. In tramp.el sind ein paar Dutzend aufgeführt.

db48x
quelle
3

Ich habe mich bemüht, dasselbe zu tun. Ich fand eine andere Route, die es mir ermöglichte, im Grunde das Gleiche zu tun.

Sie können einen Shell-Puffer öffnen, indem Sie M-x shellvon dort aus eine Verbindung zum Anmeldeknoten herstellen und dann eine Verbindung zur interaktiven Sitzung herstellen qsub -I. Sobald Sie in der interaktiven Sitzung sind, starten Sie eine R-Sitzung, indem Sie den Befehl eingeben R. Dort können Sie tun M-x ess-remote. Daraufhin wird ein Minipuffer gefragt, welches Programm Sie ausführen möchten (R, S +, Stata usw.). Wenn Sie R ausgewählt haben, können Sie die R-Sitzung auf der Remote-Shell genauso verwenden, wie Sie ESS auf dem lokalen Computer verwenden.

Ich persönlich öffne Rscripts, die auf dem Remote-Knoten gespeichert sind, indem ich in ihn trampele (in einem separaten Fenster) und arbeite mit der R-Sitzung, die über die ess-remoteoben beschriebene verbunden ist. Auf diese Weise kann die R-Sitzung direkt mit den Rscripts interagieren, mit denen ich arbeite. (Zum Beispiel kann der source('code.R')Befehl in R den 'code.R' im HPC-Cluster lesen, den ich möglicherweise gerade bearbeitet habe. Wenn ich stattdessen Rscripts auf meinem lokalen Computer bearbeiten würde, würde die ess-remote-Sitzung von R nicht ' Sie können sie nur lesen, wenn ich sie jedes Mal auf den Remote-Knoten hochgeladen habe.)

Joonha Park
quelle