Чи може 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 не доступний).
David LeBauer

Здається, неможливо сказати 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.el.


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 R буде " не зможу їх прочитати, якщо я не завантажую їх у віддалений вузол кожного разу.)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.