Emacs peut-il utiliser tramp pour s'exécuter dans une session interactive sur un nœud HPC distant?

12

J'utilise Emacs avec ESS et Tramp pour charger des fichiers distants et exécuter des processus R distants sur des ordinateurs HPC. Avec les clés ssh, tramp facilite la C-x C-frecherche de fichier à /ssh:myserver:/path/to/filesuivi de M-x Rpour lancer une session R.

Cependant, sur les ordinateurs HPC qui utilisent un système de planification des travaux (par exemple, Sun Grid Engine ou Torque), il existe des restrictions sur la quantité de mémoire et de CPU pouvant être utilisée sur le nœud principal, je dois donc lancer une session interactive à l'aide de qsub -I.

Est-il possible de configurer tramp, ssh et / ou Emacs pour lancer une session interactive sur un nœud esclave (en utilisant qsub -Iou équivalent) après une connexion ssh?

David LeBauer
la source
Je ne sais pas exactement quelles sont les limitations?
PythonNut
@PythonNut Je peux ssh vers le nœud principal en utilisant tramp, mais je ne sais pas comment me connecter ensuite au nœud esclave (qui n'est pas directement accessible via ssh).
David LeBauer
Il ne semble pas possible de dire d'abord à ESS de lancer un autre shell, mais avec tramp-remote-shellset to qrshou qloginvous pourrez peut-être obtenir une session de cluster interactif.
rekado

Réponses:

5

Il semble que vous devriez étendre tramp-methods, en ajoutant une nouvelle méthode qui est similaire à la sudométhode mais utilise à la qsub -Iplace. Vous pourrez alors utiliser un chemin de tramp à sauts multiples pour vous connecter d'abord au nœud principal, puis pour vous connecter à un nœud de calcul.

Essaye ça:

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

Vous utiliseriez alors un chemin clochard comme /ssh:myserver|qsub:myserver:/path/to/file.

Vous devrez peut-être spécifier d'autres options pour passer à qsub; Je ne l'ai pas utilisé, je ne peux donc pas vous aider. Vous voudrez également regarder les autres options que vous pouvez spécifier sur une méthode de tramp; il y en a quelques dizaines dans tramp.el.

db48x
la source
3

J'ai du mal à faire de même. J'ai trouvé un itinéraire différent qui m'a permis de faire essentiellement la même chose.

Vous pouvez ouvrir un tampon shell à M-x shellpartir de là et vous connecter au nœud de connexion, puis vous connecter à la session interactive par qsub -I. Une fois que vous êtes dans la session interactive, démarrez une session R en tapant la commande R. Là, vous pouvez le faire M-x ess-remote. Cela demandera un mini-tampon demandant quel programme vous souhaitez exécuter (R, S +, Stata, etc.) Une fois que vous sélectionnez R, vous pouvez utiliser la session R sur le shell distant comme vous utilisez ESS sur la machine locale.

J'ouvre personnellement les scripts enregistrés dans le nœud distant en y marchant (dans une fenêtre séparée) et je travaille avec la session R connectée par le ess-remotecomme décrit ci-dessus. De cette façon, la session R peut interagir directement avec les scripts avec lesquels je travaille. (Par exemple, la source('code.R')commande dans R pourra lire le 'code.R' dans le cluster HPC, que je viens peut-être de modifier. Si je modifiais plutôt des scripts sur ma machine locale, la session ess-remote de R ne le ferait pas '' t être en mesure de les lire à moins que je les télécharge à chaque fois sur le nœud distant.)

Parc Joonha
la source