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.