Может ли Emacs использовать tramp для запуска в интерактивном сеансе на удаленном узле HPC?

12

Я использую Emacs с ESS и tramp для загрузки удаленных файлов и запуска удаленных процессов R на компьютерах HPC. С помощью ключей ssh ​​tramp позволяет легко C-x C-fнайти файл, /ssh:myserver:/path/to/fileа затем M-x Rзапустить сеанс R.

Однако на компьютерах HPC, которые используют систему планирования заданий (например, Sun Grid Engine или Torque), существуют ограничения на объем памяти и ЦП, которые можно использовать на головном узле, поэтому я должен запустить интерактивный сеанс с использованием qsub -I.

Можно ли настроить tramp, ssh и / или Emacs для запуска интерактивного сеанса на подчиненном узле (использующем qsub -Iили эквивалентном) после установления соединения ssh?

Дэвид Лебауэр
источник
Я не совсем уверен, каковы ограничения?
PythonNut
@PythonNut Я могу подключиться к ssh к головному узлу, используя tramp, но не знаю, как подключиться к подчиненному узлу (который не доступен напрямую через ssh).
Дэвид Лебауэр,
Похоже, что сначала невозможно сказать ESS запустить другую оболочку, но при tramp-remote-shellустановленном значении qrshили qloginвы можете получить сеанс интерактивного кластера.
Rekado

Ответы:

5

Похоже, вы должны расширить tramp-methods, добавив новый метод, который похож на sudoметод, но использует qsub -Iвместо этого. После этого вы сможете использовать многопролетный трамповый путь, чтобы сначала подключиться к головному узлу, а затем подключиться к вычислительному узлу.

Попробуй это:

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

Затем вы будете использовать трамплин как /ssh:myserver|qsub:myserver:/path/to/file.

Вам может потребоваться указать другие параметры для передачи в qsub; Я не использовал его, поэтому я не могу помочь вам там. Вы также захотите просмотреть другие опции, которые вы можете указать в методе tramp; Есть несколько десятков, перечисленных в tramp.el.

db48x
источник
3

Я изо всех сил пытался сделать то же самое. Я нашел другой маршрут, который позволил мне сделать то же самое.

Вы можете открыть буфер оболочки M-x shellи оттуда подключиться к узлу входа в систему, а затем подключиться к интерактивному сеансу qsub -I. Как только вы в интерактивном сеансе, начните сеанс R, набрав команду R. Там вы можете сделать M-x ess-remote. Это предложит мини-буфер, спрашивающий, какую программу вы хотите запустить (R, S +, Stata и т. Д.). После выбора R вы можете использовать сеанс R на удаленной оболочке так же, как вы используете ESS на локальном компьютере.

Лично я открываю Rscripts, сохраненные в удаленном узле, зайти в него (в отдельном окне) и работаю с сеансом R, связанным ess-remoteкак описано выше. Таким образом, сеанс R может напрямую взаимодействовать с Rscripts, с которыми я работаю. (Например, source('code.R')команда в R сможет прочитать «code.R» в кластере HPC, который я, возможно, только что отредактировал. Если бы вместо этого я редактировал Rscripts на своем локальном компьютере, сеанс ess-remote для R не состоялся бы » я не смогу их прочитать, если я не загружу их каждый раз на удаленный узел.)

Joonha Park
источник