Bisakah Emacs menggunakan gelandangan untuk menjalankan sesi interaktif pada simpul HPC jarak jauh?

12

Saya telah menggunakan Emacs dengan ESS dan tramp untuk memuat file jarak jauh dan menjalankan proses R jarak jauh di komputer HPC. Dengan tombol ssh, gelandangan mempermudah C-x C-fpencarian file di /ssh:myserver:/path/to/filediikuti oleh M-x Runtuk memulai sesi R.

Namun, pada komputer HPC yang menggunakan sistem penjadwalan pekerjaan (mis. Sun Grid Engine atau Torque) ada batasan berapa banyak memori dan CPU yang dapat digunakan pada head node, jadi saya harus meluncurkan sesi interaktif menggunakan qsub -I.

Apakah mungkin untuk mengkonfigurasi tramp, ssh, dan / atau Emacs untuk meluncurkan sesi interaktif pada slave node (menggunakan qsub -Iatau setara) setelah koneksi ssh dibuat?

David LeBauer
sumber
Saya tidak sepenuhnya yakin apa batasannya?
PythonNut
@PythonNut Saya bisa ssh ke simpul kepala menggunakan gelandangan, tetapi tidak tahu bagaimana kemudian terhubung ke simpul budak (yang tidak dapat diakses langsung melalui ssh).
David LeBauer
Tampaknya tidak mungkin untuk memberitahu ESS untuk meluncurkan shell yang berbeda terlebih dahulu, tetapi dengan tramp-remote-shellset ke qrshatau qloginAnda mungkin bisa mendapatkan sesi cluster interaktif.
rekado

Jawaban:

5

Sepertinya Anda harus memperluas tramp-methods, menambahkan metode baru yang mirip dengan sudometode tetapi menggunakan qsub -Isebagai gantinya. Anda kemudian dapat menggunakan jalur tramp multi-hop untuk pertama-tama terhubung ke node kepala dan kemudian untuk terhubung ke node komputasi.

Coba ini:

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

Anda kemudian akan menggunakan jalur gelandangan seperti /ssh:myserver|qsub:myserver:/path/to/file.

Anda mungkin perlu menentukan opsi lain untuk lolos ke qsub; Saya belum menggunakannya jadi saya tidak bisa membantu Anda di sana. Anda juga ingin melihat opsi lain yang dapat Anda tentukan pada metode gelandangan; ada beberapa lusin yang terdaftar di tramp.el.

db48x
sumber
3

Saya telah berjuang untuk melakukan hal yang sama. Saya menemukan rute berbeda yang pada dasarnya memungkinkan saya melakukan hal yang sama.

Anda dapat membuka buffer shell dengan M-x shelldan dari sana terhubung ke node login, dan kemudian terhubung ke sesi interaktif dengan qsub -I. Setelah Anda berada di sesi interaktif, mulailah sesi R dengan mengetik perintah R. Di sana, Anda bisa melakukannya M-x ess-remote. Ini akan meminta buffer mini yang menanyakan program mana yang ingin Anda jalankan (R, S +, Stata, dll.) Setelah Anda memilih R, maka Anda dapat menggunakan sesi R pada shell jauh seperti halnya Anda menggunakan ESS di mesin lokal.

Saya pribadi membuka Rscripts yang disimpan di node jauh dengan menginjaknya (di jendela terpisah) dan bekerja dengan sesi R yang terhubung oleh ess-remoteseperti yang dijelaskan di atas. Dengan cara ini, sesi R dapat langsung berinteraksi dengan Rscripts yang saya kerjakan. (Misalnya, source('code.R')perintah dalam R akan dapat membaca 'code.R' di cluster HPC, yang mungkin baru saja saya edit. Jika saya mengedit Rscripts di mesin lokal saya sebagai gantinya, sesi ess-remote dari R wouldn ' t dapat membacanya kecuali saya mengunggahnya ke node jarak jauh setiap kali.)

Taman Joonha
sumber