Czy Emacs może używać trampa do uruchamiania w interaktywnej sesji na zdalnym węźle HPC?

12

Używam Emacsa z ESS i tramp do ładowania zdalnych plików i uruchamiania zdalnych procesów R na komputerach HPC. Dzięki kluczom ssh tramp ułatwia C-x C-fznalezienie pliku, /ssh:myserver:/path/to/filea następnie M-x Ruruchomienie sesji R.

Jednak na komputerach HPC korzystających z systemu planowania zadań (np. Sun Grid Engine lub Torque) obowiązują ograniczenia dotyczące ilości pamięci i procesora w węźle głównym, więc muszę uruchomić sesję interaktywną qsub -I.

Czy można skonfigurować tramp, ssh i / lub Emacs, aby uruchamiać interaktywną sesję w węźle slave (za pomocą qsub -Ilub równorzędnym) po nawiązaniu połączenia ssh?

David LeBauer
źródło
Nie jestem do końca pewien, jakie są ograniczenia?
PythonNut
@PythonNut Mogę ssh do węzła głównego za pomocą trampa, ale nie wiem, jak połączyć się z węzłem slave (który nie jest bezpośrednio dostępny przez ssh).
David LeBauer
Wydaje się, że nie można powiedzieć ESS, aby najpierw uruchomiła inną powłokę, ale po tramp-remote-shellustawieniu opcji qrshlub qloginmożesz uzyskać interaktywną sesję klastra.
rekado

Odpowiedzi:

5

Wygląda na to, że powinieneś rozszerzyć tramp-methods, dodając nową metodę, która jest podobna do sudometody, ale używa qsub -Izamiast niej. Będziesz wtedy mógł użyć ścieżki trampowej z wieloma przeskokami, aby najpierw połączyć się z węzłem głównym, a następnie połączyć z węzłem obliczeniowym.

Spróbuj tego:

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

Użyłbyś wtedy ścieżki trampowej /ssh:myserver|qsub:myserver:/path/to/file.

Może być konieczne określenie innych opcji, aby przejść do qsub; Nie użyłem tego, więc nie mogę ci pomóc. Będziesz także chciał przejrzeć inne opcje, które możesz określić w metodzie trampowej; w tramp.el jest wymienionych kilkadziesiąt.

db48x
źródło
3

Walczyłem o to samo. Znalazłem inną trasę, która pozwoliła mi zrobić to samo.

Możesz otworzyć bufor powłoki M-x shell, a następnie połączyć się z węzłem logowania, a następnie połączyć się z sesją interaktywną przez qsub -I. Po przejściu do sesji interaktywnej rozpocznij sesję R, wpisując polecenie R. Tam możesz zrobić M-x ess-remote. Spowoduje to wyświetlenie mini-bufora z pytaniem, który program chcesz uruchomić (R, S +, Stata itp.) Po wybraniu R możesz użyć sesji R na zdalnej powłoce, tak jak używasz ESS na komputerze lokalnym.

Osobiście otwieram skrypty Rscript zapisane w zdalnym węźle, wtrącając się do niego (w osobnym oknie) i pracuję z sesją R połączoną w ess-remotesposób opisany powyżej. W ten sposób sesja R może bezpośrednio oddziaływać z skryptami R, z którymi pracuję. (Na przykład source('code.R')polecenie w R będzie w stanie odczytać „code.R” w klastrze HPC, który mógłbym właśnie edytować. Gdybym zamiast tego edytował Rscripts na moim komputerze lokalnym, sesja R-ess-zdalnego nie zrobiłaby „ będę mógł je odczytać, chyba że za każdym razem załaduję je do zdalnego węzła).

Joonha Park
źródło