The Cluster

The aforementioned instructions suite both apl13.eti.pg.gda.pl and apl15.eti.pg.gda.pl - access to both clusters is restricted to selected users!

Aby wykonywać operacje na klastrze należy logować się na właściwy frontend. Przy pierwszym logowaniu należy wygenerować klucze prywatne i publiczne pozwalające na bezhasłowe logowanie się na inne węzły klastra (rzecz niezbędna do poprawnego działania mpi). Należy postępować zgodnie z instrukcjami dla komputerów w sali 527 (poniżej) i ręcznie wygenerować kliucze. Przy pytaniu o passphrase należy wcisnąć enter (nic nie wpisując). Jeżeli pracujemy na koncie indywidualnym to procedurę tą można wykonać na dowolnym systemie Linuxowym w laboratorium (np. na desach)

Dostępne jest klika implementacji MPI, domyślna to OpenMPI z katalogu /usr/lib64/openmpi/bin/mpirun. Do kompilacji należy użyć właściwych programów dla danej binarki uruchomieniowej. Lokalizacja programów uruchomieniowych jest następująca:

  • /usr/lib64/openmpi/bin/mpirun - domyślnie używa InfiniBand
  • /usr/lib64/mpich/bin/mpirun
  • /opt/openmpi/bin/mpirun - domyślnie używa InfiniBand
  • /opt/openmpi_postfix/bin/mpirun - implementacja ze wsparciem dla MPI_THREAD_MULTIPLE, tylko apl13
  • /opt/mpich2_local/bin/mpirun - tylko apl13
  • /opt/mpich2/gnu/bin/mpirun - tylko apl13
  • /opt/mpich3/gnu/bin/mpirun - tylko apl15
  • /opt/SUNWhpc/HPC8.2.1/ - tylko apl13

UWAGA! Klaster apl15.eti.pg.gda.pl posiada inny frontend niż resztę węzłów. Z tego względu nie widzi on sieci InfiniBand wnętrza klastra! W takich przypadkach należy programy uruchamiać nie na węźle dostępowym a na jednym z obliczeniowych!

Na frontendach zainstalowany jest program screen. Pozwala on na odłączenie sie od otwartej sesji na czas trwania obliczeń. Po zalogowaniu się należy wykonać polecenie “screen“. Po uruchomieniu obliczeń poprzez mpirun można odłączyć się od sesji naciskając kombinację klawiszy Ctr+a a następnie d. W tym momencie wykonane w screen polecenie będzie działać w tle, można się nawet wylogować z węzła. Aby podłączyć się do raz otwartej sesji należy wykonać polecenie “screen -r “co spowoduje podłączenie do raz otwartej sesji. Jeżeli w danym momencie jest więcej niż 1 taka sesja pokazana zostanie ich lista. Należy wtedy podłączyć się do właściwej za pomocą polecenia “screen -r pid_procesu“. Zamykanie sesji odbywa się za pomocą komendy “exit” lub kombinacji klawiczy Ctrl+d. Bardziej szczegółowe informacje na temat polecenia screen znajdują się w dokumentacji dostępnej przez “man screen” bądź “screen --help“.

Czyszczenie procesów na klastrze

Bardzo ważne jest by sprzątać po sobie po każdych zajęciach i nie pozostawiać działających procesów. Nieumiejętne uruchamiane aplikacji może w łatwy sposób naruszyć stabilność całego klastra (co też dało się na zajęciach zauważyć). Bardzo proszę o każdorazowe usuwanie starych procesów zanim uruchomią Państwo nową instancję, a w szczególności proszę o dbanie o poprawność Państwa aplikacji. Jeżeli z jakiegoś powodu aplikacja jednak zawiesi się należy skorzystać z polecenia kill. W celu zakończenia wszystkich zadań użytkownika na danym komputerze należy wykonać polecenie:

 kill -9 `ps -u -o "pid="`

W miejscewstawiamy nazwę użytkownika. Proszę zwrócić uwagę na cudzysłowia – wszystkie muszą zostać wpisane w poleceniu.  Polecenie to zakończy wszystkie procesy łącznie z procesem powłoki, więc po jego wykonaniu należy zalogować się ponownie.

Polecenie to należy wykonać na każdym z węźle z osobna!

MPI na komputerach w sali 527

Na komputerach w slai 527 dostępne sa 2 implementacje MPI:

  • mpich-3.3a2
  • openmpi-2.1.1 - domyślna
  • /opt/openmpi_postfix/bin/mpirun - implementacja ze wsparciem dla MPI_THREAD_MULTIPLE

Domyślna wersja to openmpi, mvapch można wywołać dodając suffix .mpich lub zmieniając zmienne środowiskowe.

Aby MPI działał bez problemów zalecane jest by uwierzytelnianie pomiędzy komputerami odbywało się za pomocą kluczy a nie haseł. Bez tego połączenie pomiędzy każdym węzłem musi zostać zweryfikowane hasłem użytkownika. Aby wygenerować klucze publiczne/prywatne poleceniem:

ssh-keygen -t rsa

W wyniku tego polecenia w katalogu .ssh w katalogu domowym użytkownika powstaną dwa pliki: id_rsa oraz id_rsa.pub. Plik id_rsa.pub (klucz publiczny) należy dopisać do pliku ~/.ssh/authorized_keys (np. poleceniem cat id_rsa.pub >> ~/.ssh/authorized_keys) na komputerze, na który chcemy się logować. Oczywiście wcześniej musimy go tam jakoś skopiować.

Zaleca się by operację taką wykonać na każdym komputerze wchodzącym w skład klastra i każdy dopisać w każdym. Można też skopiować gotowe klucze (zarówno publiczny jak i prywatny) pomiędzy komputerami. Wtedy wystarczy tylko jeden wpis na każdym komputerze, gdyż z każdego komputera uwierzytelniać będziemy się tym samym kluczem.

Jeżeli korzystamy z konta katedralnego to klucze wystarczy wygenerować na jednej maszynie i dostęp do wszystkich innych w obrębie katedry będzie możliwy bez hasła (dzięki współdzielonemu systemowi plików).

Po zmianie systemu na Ubuntu wynikły pewne problemy z MPI. Obecna konfiguracja wersji mpi, sieci i Ubuntu wymaga by programy uruchamiać w odpowiedni sposób. Zmieniły się też klucze SSH, trzeba je wygenerować na nowo, do tego ubuntu stosuje własny algorytm szyfrowania więc najlepiej wygenerować je z niego samego. Kroki są następujące:
  • usunąć ~/.ssh/known_hosts
  • zalogować się na każdego desa po kolei i zaakceptować klucze ssh
  • uruchamiać openMPI z odpowiednimi przełącznikami:

mpirun -np 18 -mca orte_keep_fqdn_hostnames t -mca btl_tcp_if_exclude docker0 -hostfile hostfile.des mpi_latency

Pierwszy przełącznik wymusi używanie pełnej nazwy z pliku hostfile (razem z subdomeną kask), drugi wymusi nieużywanie interfejsu docker0. Z tymi przełącznikami MPI zadziała zarówno dla hostfile postaci:

172.20.83.201
172.20.83.202
...

jak i

des01.kask
des02.kask
...

MPI on apl09, apl10, apl11 and apl12

The aforementioned servers require some initial setup before MPI can be used. Due to the fact that mpi-selector is a bad hack from the OFED project, it has been dropped entirely in favor of environment-modules.  The environment-modules package creates a shell command used to load and unload the necessary environment variables for the mpi packages.  To see what modules are available, use this command:

module avail

Loading a module is done via

module load <module-name>

Unload is similar

module unload <module-name>

In order to emulate the previous behavior, it is sufficient for a user to place a call to module load in their personal .bashrc (or similar shell init script if they use a different command shell) to cause the proper module to be loaded at login each time.

MPI on APL12 with IntelPhi

Running MPI with ability to use both the IntelPhi and the host requires some environmental variable setup and proper code compilation/execution. Assuming that the code lies in current directory in the file called  mpi_example.c the following commands should be executed. The application should than run on apl12, mic0 and mic1 with 2, 3 and 5 processes respectively.

source /opt/intel/composer_xe_2013_sp1/bin/compilervars.sh intel64

source /opt/intel/impi/4.1.3.048/bin64/mpivars.sh

mpiicc -mmic mpi_example.c -o mpi_example.mic

mpiicc mpi_example.c -o mpi_example.host

scp mpi_example.mic mic0:

scp mpi_example.mic mic1:

cp mpi_example.host ~/

export I_MPI_MIC=enable

export I_MPI_FABRICS=shm:tcp

cd ~

mpirun -n 2 -host apl12 ./mpi_example.host : -n 3 -host mic0 ./mpi_example.mic : -n 5 -host mic1 ./mpi_example.mic