Emacs có thể sử dụng tramp để chạy trong phiên tương tác trên nút HPC từ xa không?


11

Tôi đã sử dụng Emacs với ESS và tramp để tải các tệp từ xa và chạy các quy trình R từ xa trên máy tính HPC. Với các phím ssh, tramp giúp dễ dàng C-x C-ftìm thấy tệp /ssh:myserver:/path/to/filetheo sau M-x Rđể khởi chạy phiên R.

Tuy nhiên, trên các máy tính HPC sử dụng hệ thống lập lịch công việc (ví dụ Sun Grid Engine hoặc Torque), có những hạn chế về lượng bộ nhớ và CPU có thể được sử dụng trên nút đầu, vì vậy tôi phải khởi chạy phiên tương tác bằng cách sử dụng qsub -I.

Có thể định cấu hình tramp, ssh và / hoặc Emacs để khởi chạy phiên tương tác trên nút nô lệ (sử dụng qsub -Ihoặc tương đương) sau khi kết nối ssh được thực hiện không?


Tôi không hoàn toàn chắc chắn những hạn chế là gì?
PythonNut

@PythonNut Tôi có thể ssh đến nút đầu bằng cách sử dụng tramp, nhưng không biết làm thế nào để kết nối với nút nô lệ (không thể truy cập trực tiếp qua ssh).
David LeBauer

Dường như không thể yêu cầu ESS khởi chạy một shell khác trước, nhưng với tramp-remote-shellcài đặt thành qrshhoặc qloginbạn có thể có được một phiên cụm tương tác.
rekado

Câu trả lời:


4

Có vẻ như bạn nên mở rộng tramp-methods, thêm một phương thức mới tương tự như sudophương thức nhưng sử dụng qsub -Ithay thế. Sau đó, bạn có thể sử dụng đường dẫn tramp nhiều bước để kết nối đầu tiên với nút đầu và sau đó kết nối với nút tính toán.

Thử cái này xem sao:

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

Sau đó, bạn sẽ sử dụng một con đường lang thang như thế /ssh:myserver|qsub:myserver:/path/to/file.

Bạn có thể cần chỉ định các tùy chọn khác để chuyển đến qsub; Tôi đã không sử dụng nó vì vậy tôi không thể giúp bạn ở đó. Bạn cũng sẽ muốn xem qua các tùy chọn khác mà bạn có thể chỉ định trên một phương pháp tramp; có một vài tá được liệt kê trong tramp.el.


3

Tôi đã phải vật lộn để làm điều tương tự. Tôi tìm thấy một tuyến đường khác cho phép tôi thực hiện cùng một việc.

Bạn có thể mở bộ đệm shell bằng cách M-x shellvà từ đó kết nối với nút đăng nhập, sau đó kết nối với phiên tương tác bằng cách qsub -I. Khi bạn đang ở trong phiên tương tác, hãy bắt đầu một phiên R bằng cách gõ lệnh R. Ở đó, bạn có thể làm M-x ess-remote. Điều này sẽ nhắc một bộ đệm nhỏ hỏi bạn muốn chạy chương trình nào (R, S +, Stata, v.v.) Khi bạn chọn R, sau đó bạn có thể sử dụng phiên R trên vỏ từ xa giống như khi bạn sử dụng ESS trong máy cục bộ.

Cá nhân tôi mở các bản sao lưu được lưu trong nút từ xa bằng cách truy cập vào nó (trong một cửa sổ riêng) và làm việc với phiên R được kết nối bởi ess-remotenhư mô tả ở trên. Bằng cách này, phiên R có thể tương tác trực tiếp với các bản sao mà tôi đang làm việc. (Ví dụ: source('code.R')lệnh trong R sẽ có thể đọc 'code.R' trong cụm HPC mà tôi có thể vừa chỉnh sửa. Thay vào đó, nếu tôi đang chỉnh sửa các bản ghi trong máy cục bộ của mình, thì phiên bản R-remote của R sẽ không Tôi không thể đọc chúng trừ khi tôi tải chúng lên nút từ xa mỗi lần.)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.