Praca z VS CODE na superkomputerze

Poniżej opisujemy zalecany sposób pracy w Visual Studio Code na węźle obliczeniowym klastra HPC. VS Code Remote SSH może instalować dodatkowe komponenty i uruchamiać procesy, które potrafią zużywać istotne zasoby systemowe.

Z tego powodu należy korzystać z VS Code na zarezerwowanym węźle obliczeniowym, a nie bezpośrednio na serwerze dostępowym lub logowania.

Bezpośredni dostęp do węzłów obliczeniowych nie jest możliwy, dlatego połączenie odbywa się przez tzw. jump hosty, czyli hosty pośredniczące:

komputer lokalny → kdm.task.gda.pl → trytonp → węzeł obliczeniowy

1. Logowanie na serwer dostępowy klastra

Najpierw należy zalogować się na serwer dostępowy:

ssh kdm.task.gda.pl

Następnie z serwera kdm.task.gda.pl należy zalogować się na superkomputer Tryton Plus:

ssh trytonp

2. Rezerwacja węzła do pracy interaktywnej

Na serwerze trytonp należy zarezerwować węzeł obliczeniowy poleceniem salloc, na przykład:

salloc --time 4:00:00 --partition interact

Przykładowy wynik:

salloc: Granted job allocation 10729286
salloc: Nodes gt0107 are ready for job

Oznacza to, że system kolejkowy SLURM przydzielił zadanie o numerze 10729286, a do pracy interaktywnej został przydzielony węzeł:

gt0107

Parametr:

--time 4:00:00

oznacza rezerwację na 4 godziny.

Parametr:

--partition interact

wskazuje partycję przeznaczoną do pracy interaktywnej.

3. Odczytanie nazwy zarezerwowanego węzła

Nazwę przydzielonego węzła można odczytać bezpośrednio z komunikatu salloc, np.:

salloc: Nodes gt0107 are ready for job

Można ją również sprawdzić poleceniem:

echo $SLURM_NODELIST

Przykładowy wynik:

gt0107

4. Połączenie z VS Code przez Remote SSH

Do pracy z VS Code należy użyć rozszerzenia:

Remote - SSH

W VS Code należy otworzyć paletę poleceń:

Ctrl+Shift+P

a następnie wybrać:

Remote-SSH: Add New SSH Host...

W wyświetlonym polu należy wpisać pełną komendę SSH z opcją -J, wskazując aktualnie zarezerwowany węzeł:

ssh -J login@kdm.task.gda.pl,login@trytonp login@gt0107

gdzie:

login

oznacza login użytkownika w KDM, a:

gt0107

należy zastąpić nazwą aktualnie zarezerwowanego węzła.

Po dodaniu hosta VS Code zaproponuje połączenie z nowo dodanym wpisem. Przy kolejnej rezerwacji, jeżeli SLURM przydzieli inny węzeł, należy ponownie użyć Remote-SSH: Add New SSH Host... i wpisać komendę z aktualną nazwą węzła.

Nie należy wpisywać pełnej komendy ssh -J ... bezpośrednio w opcji Remote-SSH: Connect to Host.... Ta opcja służy do wyboru lub wpisania nazwy hosta, a nie pełnej komendy SSH. Wpisanie całej komendy w tym miejscu może spowodować błąd typu:

remote username contains invalid characters

Po wpisaniu komendy VS Code zapyta, w którym pliku zapisać konfigurację SSH. Zwykle należy wybrać domyślny plik użytkownika:

~/.ssh/config

W systemie Windows będzie to najczęściej:

C:\Users\nazwa_uzytkownika\.ssh\config

Po zapisaniu wpisu można połączyć się z dodanym hostem przez:

Remote-SSH: Connect to Host...

5. Zamykanie sesji

Po zakończeniu pracy w VS Code należy zamknąć połączenie zdalne.

W terminalu, w którym działa rezerwacja salloc, należy zakończyć sesję poleceniem:

exit

albo skrótem:

Ctrl+D

Zwolni to zarezerwowany węzeł.

Aktywne zadania użytkownika można sprawdzić poleceniem:

squeue -u $USER

Jeżeli zadanie nadal działa, można je anulować poleceniem:

scancel <JOBID>

Przykład:

scancel 10729286

6. Uwaga dotycząca quoty w katalogu domowym

W katalogu domowym użytkownika obowiązuje quota 20 GB. VS Code Remote SSH instaluje na zdalnym systemie własny komponent, tzw. VS Code Server. Domyślnie znajduje się on zwykle w katalogu:

~/.vscode-server

Katalog ten może z czasem zajmować kilka GB, szczególnie jeśli używane są różne wersje VS Code, wiele rozszerzeń albo kilka środowisk zdalnych. Warto okresowo kontrolować zajętość katalogu domowego.

7. Najczęstsze problemy

VS Code nie może połączyć się z węzłem

Należy sprawdzić, czy rezerwacja nadal działa:

squeue -u $USER

Jeżeli czas rezerwacji minął, trzeba wykonać nową rezerwację przez salloc.

Błąd logowania przez jump host

Warto przetestować połączenie najpierw z terminala:

ssh -J login@kdm.task.gda.pl,login@trytonp login@gt0107

Dopiero gdy takie połączenie działa w terminalu, należy używać go w VS Code.

VS Code instaluje serwer na węźle

Przy pierwszym połączeniu VS Code instaluje komponent VS Code Server w katalogu domowym użytkownika na klastrze. Jest to normalne zachowanie. Instalacja może potrwać dłużej przy pierwszym uruchomieniu.

Ze względu na quotę 20 GB w katalogu domowym warto kontrolować rozmiar katalogu ~/.vscode-server.

Rezerwacja wygasła podczas pracy

Jeżeli upłynie czas podany w salloc, np. 4 godziny, system SLURM zwolni węzeł. Sesja VS Code zostanie wtedy zerwana. Aby kontynuować pracę, należy zarezerwować nowy węzeł i ponownie połączyć się przez Remote SSH.