O Emacs pode usar o tramp para executar em uma sessão interativa em um nó HPC remoto?

12

Eu tenho usado o Emacs com ESS e tramp para carregar arquivos remotos e executar processos R remotos em computadores HPC. Com as teclas ssh, o tramp facilita C-x C-fa localização de arquivos em /ssh:myserver:/path/to/fileseguida M-x Re o lançamento de uma sessão R.

No entanto, nos computadores HPC que usam um sistema de agendamento de trabalhos (por exemplo, Sun Grid Engine ou Torque), existem restrições quanto à quantidade de memória e CPU que podem ser usadas no nó principal, por isso tenho que iniciar uma sessão interativa usando qsub -I.

É possível configurar o tramp, ssh e / ou Emacs para iniciar uma sessão interativa em um nó escravo (usando qsub -Iou equivalente) após a conexão ssh?

David LeBauer
fonte
Não tenho muita certeza de quais são as limitações?
precisa saber é o seguinte
@PythonNut Eu posso ssh no nó principal usando o tramp, mas não sei como conectar-me ao nó escravo (que não é diretamente acessível via ssh).
David LeBauer 4/15
Não parece possível dizer ao ESS para iniciar um shell diferente primeiro, mas com tramp-remote-shellset qrshou qloginvocê pode obter uma sessão de cluster interativa.
rekado

Respostas:

5

Parece que você deve estender tramp-methods, adicionando um novo método que seja semelhante ao sudométodo, mas que use qsub -I. Você seria capaz de usar um caminho de salto múltiplo para conectar-se primeiro ao nó principal e depois ao nó de computação.

Tente o seguinte:

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

Você usaria um caminho de caminhada como /ssh:myserver|qsub:myserver:/path/to/file.

Pode ser necessário especificar outras opções para passar para o qsub; Eu não o usei, então não posso ajudá-lo lá. Você também deseja examinar as outras opções que você pode especificar em um método tramp; existem algumas dúzias listadas no tramp.el.

db48x
fonte
3

Eu tenho lutado para fazer o mesmo. Encontrei uma rota diferente que me permitia fazer basicamente a mesma coisa.

Você pode abrir um buffer de shell M-x shelle, a partir daí, conectar-se ao nó de login e, em seguida, conectar-se à sessão interativa por qsub -I. Uma vez que você está na sessão interativa, iniciar uma sessão de R digitando o comando R. Lá, você pode fazer M-x ess-remote. Isso solicitará um mini-buffer perguntando qual programa você deseja executar (R, S +, Stata, etc.) Depois de selecionar R, você poderá usar a sessão R no shell remoto, assim como o ESS na máquina local.

Eu, pessoalmente, abro Rscripts salvos no nó remoto, entrando nele (em uma janela separada) e trabalhando com a sessão R conectada pelo ess-remotedescrito acima. Dessa forma, a sessão R pode interagir diretamente com os Rscripts com os quais estou trabalhando. (Por exemplo, o source('code.R')comando em R poderá ler o 'code.R' no cluster HPC, que eu poderia ter acabado de editar. Se eu estivesse editando Rscripts na minha máquina local, a sessão ess-remote de R não faria ' não será capaz de lê-los, a menos que eu os carregue no nó remoto toda vez.)

Joonha Park
fonte