Migracja obliczeń na system Hydra Uniwersytet Warszawski Matematycznego i Komputerowego http:// Maciej E. Marchwiany m.marchwiany@icm.edu.pl Maciej Szpindler m.szpindler@icm.edu.pl
Plan szkolenia Organizacja i dostęp do zasobów ICM Prezentacja Hydry Migracja danych Wprowadzenie do PLGrid Podstawowe informacje o SLURM SLURM kontra PBS Przykład 1 praca w trybie graficznym Przykład 2 uruchamianie aplikacji i wizualizacja Przykład 3, 4 kompilacja i uruchamianie programów Przykład 5 obliczenia na kartach GPU Dodatkowe funkcjonalności SLURM
Plan szkolenia Organizacja i dostęp do zasobów ICM Prezentacja Hydry Migracja danych Wprowadzenie do PLGrid Podstawowe informacje o SLURM SLURM kontra PBS Przykład 1 praca w trybie graficznym Przykład 2 uruchamianie aplikacji i wizualizacja Przykład 3, 4 kompilacja i uruchamianie programów Przykład 5 obliczenia na kartach GPU Dodatkowe funkcjonalności SLURM
Login.icm.edu.pl Logowanie do sieci ICM Używamy protokołu SSH Putty (Windows), ssh (Linux, Mac) Łączenie poprzez serwer dostępowy (kolejkowy) login.icm.edu.pl (hpc.icm.edu.pl) Zastępuje dostęp przez delta/gw/atol
Organizacja zasobów Serwer login posiada dostęp do wszystkich ważniejszych zasobów dyskowych z różnych maszyn Aktualnie z wyjątkiem: Boreasz-a (Power775) Nie ma potrzeby podwójnego transferowania danych z przesiadką na delcie Możliwość zlecania zadań bezpośrednio na systemy: Hydra, Halo2, Grom W przygotowaniu: Nostromo (BlueGene/Q) Nie dotyczy: Notos(BlueGene/P),Boreasz (Power775)
Organizacja zasobów cd. Kompilacje wykonujemy na docelowej maszynie (Nostromo) lub na węzłach obliczeniowych (Hydra, Halo2, Grom) Kompilacja w trybie cross-compilation nie dostępna na serwerze kolejkowym (login)
Organizacja zasobów (schemat) Internet (Dom, Instytut) ssh login.icm.edu.pl /icm/* ssh boreasz notos nostromo /icm/nostromo/home hydra/grom /icm/hydra/home /icm/hydra/software /icm/hydra/* halo2 /icm/halo2/home slurm /icm/home /icm/tmp
Dostępne informacje Strona wiki centrum obliczeniowego ICM UW http:///kdm/
Plan szkolenia Organizacja i dostęp do zasobów ICM Prezentacja Hydry Migracja danych Wprowadzenie do PLGrid Podstawowe informacje o SLURM SLURM kontra PBS Przykład 1 praca w trybie graficznym Przykład 2 uruchamianie aplikacji i wizualizacja Przykład 3, 4 kompilacja i uruchamianie programów Przykład 5 obliczenia na kartach GPU Dodatkowe funkcjonalności SLURM
O Hydrze Hydra to klaster serwerów HP i Supermicro ogólnego przeznaczenia, wyposażony w procesory AMD i Intel. System dostępny jest dla wszystkich posiadających konta w infrastrukturze PL-Grid, dla użytkowników KDM, dla członków organizacji związanych z CERN. Dostęp do klastra możliwy jest poprzez ssh, podobnie, jak w przypadku innych maszyn ICM, przy pomocy narzędzi takich, jak: UNICORE, QosCosGrid czy glite. Systemy zainstalowane na klastrze to Scientific Linux, SLURM, Lustre.
Hydra specyficzne własności Własności węzłów (constraint) Model CPU Liczba CPU x rdzeni RAM Roboczy system plików(scratch) Interconnect Liczba węzłów AMD2435,ib,noht AMD Opteron 2435 2 x 6 32 GB 250 GB Infiniband DDR + 1Gb Ethernet 96 intelx5660,ib,noht Intel(R) Xeon(R) X5660 2 x 6 24 GB 188 GB Infiniband QDR + 1Gb Ethernet 120 magnycours,noht AMD Opteron 6128 4 x 12 256 GB 188 GB 10Gb Ethernet 30 interlagos,noht AMD Opteron 6272 4 x 16 512 GB 188 GB 10Gb Ethernet 16 Pełna wersja tabeli: http:///kdm/hydra
Hydra specyficzne własności cd. Lokalizacja Zmienna środowiskowa Przeznaczenie Całkowita przestrzeń Współdzielona? Intensywny zapis/odczyt? Kopie zapasowe (backup)? Quota (limit miejsca) /icm/home/ $HOME Przestrzeń przechowywania wyników obliczeń. 130TB Tak (wszystkie wezły klastra i submit host) Nie Nie 100GB /mnt/software - Zainstalowane aplikacje dla węzłów z SL6 20T Tak (Wszystkie węzły klastra) Nie Tak - $TMPDIR Lokalny scratch obliczeniowy (katalog tymczasowy) <1TB Nie Tak Nie - $TMPSHARED Współdzielony pomiędzy węzłami scratch obliczeniowy 108 TB Tak (Wszystkie węzły klastra) Tak Nie 10TB. Automatyczn e kasowanie Pełna wersja tabeli: http:///kdm/hydra
Plan szkolenia Organizacja i dostęp do zasobów ICM Prezentacja Hydry Migracja danych Wprowadzenie do PLGrid Podstawowe informacje o SLURM SLURM kontra PBS Przykład 1 praca w trybie graficznym Przykład 2 uruchamianie aplikacji i wizualizacja Przykład 3, 4 kompilacja i uruchamianie programów Przykład 5 obliczenia na kartach GPU Dodatkowe funkcjonalności SLURM
Gdzie są moje pliki Katalog domowy: /icm/home/login Pliki z Halo2: /icm/halo2/home/users/login Pliki z workspace: /icm/delta/workspace/login Pliki z nostromo: /icm/nostromo/home/users/login
Migracja danych Kopiowanie plików z Halo2 będąc na Hydrze: cp -p /icm/halo2/home/users/login/plik. Kopiowanie katalogów: cp rp /icm/halo2/home/users/login/plik. -p: zachowuje oryginalną datę stworzenia pliku
Plan szkolenia Organizacja i dostęp do zasobów ICM Prezentacja Hydry Migracja danych Wprowadzenie do PLGrid Podstawowe informacje o SLURM SLURM kontra PBS Przykład 1 praca w trybie graficznym Przykład 2 uruchamianie aplikacji i wizualizacja Przykład 3, 4 kompilacja i uruchamianie programów Przykład 5 obliczenia na kartach GPU Dodatkowe funkcjonalności SLURM
Plan szkolenia Organizacja i dostęp do zasobów ICM Prezentacja Hydry Migracja danych Wprowadzenie do PLGrid Podstawowe informacje o SLURM SLURM kontra PBS Przykład 1 praca w trybie graficznym Przykład 2 uruchamianie aplikacji i wizualizacja Przykład 3, 4 kompilacja i uruchamianie programów Przykład 5 obliczenia na kartach GPU Dodatkowe funkcjonalności SLURM
System SLURM Menadżer zasobów (system kolejkowy) dla klastrów obliczeniowych na licencji GNU http://slurm.schedmd.com/ Funkcjonalność Alokacja określonych zasobów (węzłów obliczeniowych) na wyłączne użycie lub bez wyłączności Uruchamianie i zarządzenie zadaniami równoległymi na przydzielonych zasobach Kolejkowanie zadań
Terminologia SLURM Węzeł (node) - pojedynczy węzeł klastra na którym można alokować zasoby Partycja (partition) zbiór węzłów na którym kolejkowane są zadania (odpowiednik kolejki w innych systemach) Zadanie (job, job step) zestaw programów użytkownika wraz z zasobami i potencjalnymi zależnościami Proces (task) program uruchamiany na pojedynczym procesorze Własności (constraint) funkcjonalności węzła zdefiniowane przez administratora
SLURM komendy (szybki start) salloc - alokuje węzły i inne zasoby dla zadania użytkownika sbatch - wstawia skrypt zadania wsadowego do kolejki sbatch n4 moje_zadanie.sl scancel - wysyła sygnał / przerywa wykonanie zadania scancel --signal=sigkill 1234 scontrol- podgląd i modyfikacje zadań, partycji, rezerwacji sinfo - wyświetla informacje o węzłach i partycjach squeue - wyświetla stan kolejki zadań srun - uruchamia zadanie (równoległe) srun n4 --exclusive moj_program.exe
Tryb interaktywny W trybie interaktywnym system przydziela nam określone zasoby i pozwala pracować na nich z poziomu konsoli Obliczenia wykonujemy wydając kolejne komendy Możliwość interakcji z programem Możliwość pracy z programami graficznymi (okienkowe GUI, trudne do obsługi w windows) srun --pty bash -l Z użyciem rezerwacji srun --pty -reservation=rez_szk bash -l srun --pty A=GrantID bash -l
Tryb wsadowy W trybie wsadowym system przydziela określone zasoby oraz uruchamia sekwencję komend opisaną w skrypcie Skrypt musi posiadać odpowiednią strukturę Brak interakcji z uruchomionym programem Komendy SLURM zamiennie jako opcje sbatch lub na początku skryptu w linii #SBATCH sbatch moje_zadanie.sl #!/bin/sh #SBATCH --time=1 #SBATCH N4 srun hostname sort moje_zadanie.sl
Struktura skryptu wsadowego #!/bin/bash -l #SBATCH -J MojeZadanie #SBATCH -N 1 #SBATCH --tasks-per-node 12 #SBATCH --mem 5000 #SBATCH --time=20:00:00 #SBATCH -A G01-77 Nagłówek skryptu Blok dyrektyw SLURM Linie rozpoczynające się od: #SBATCH --nazwa opcji sbatch/srun (pojedynczy minus - dla jednoliterowej nazwy opcji) wartość opcji #SBATCH -C intelx5660 #SBATCH -p hydra #SBATCH --output= job.out #SBATCH -error= job.err mpiexec my_program -argument arg_value Komendy uruchamiające program(y) / aplikację
Organizacja środowiska: SLURM i moduły Narzędzie Modules służy do wyboru środowiska: docelowej architektury oraz dostępu do wymaganych aplikacji Typowy schemat pracy 1. W pierwszej kolejności wybór architektury, np.: 2. Alokacja zasobów SLURM poprzez salloc / sbatch / srun, np.: 3. Następnie w ramach zadania wybór aplikacji, np.: 4. Podobnie dostęp do kompilatorów, bibliotek, np.: UWAGA: Kolejność operacji ma znaczenie module load hydra-sl6 srun --pty p hydra bash -l module load vasp module load compilers/intel
Plan szkolenia Organizacja i dostęp do zasobów ICM Prezentacja Hydry Migracja danych Wprowadzenie do PLGrid Podstawowe informacje o SLURM SLURM kontra PBS Przykład 1 praca w trybie graficznym Przykład 2 uruchamianie aplikacji i wizualizacja Przykład 3, 4 kompilacja i uruchamianie programów Przykład 5 obliczenia na kartach GPU Dodatkowe funkcjonalności SLURM
Komendy SLURM vs PBS salloc sbatch srun scancel scontrol sinfo squeue qsub qdel qalter qstat qrun
Skrypt SLURM Skrypt PBS SLURM #!/bin/csh #SBATCH -J MojeZadanie #SBATCH -N 1 #SBATCH --tasks-per-node 12 #SBATCH --mem 5000 #SBATCH --time=20:00:00 #SBATCH -A G01-77 #SBATCH -C intelx5660 #SBATCH -p hydra #SBATCH --output= job.out #SBATCH -error= job.err PBS #!/bin/csh #PBS -N MojeZadanie #PBS -l nodes=1:ppn=12 #PBS -l mem=5000mb #PBS -l walltime=20:00:00 #PBS -A G01-77 #PBS -q test #PBS o job.out #PBS e job.err sbatch job.slurm qsub job.pbs
Hydra (własności) Hydra Istanbul (AMD2435) 12 rdzenie AMD 2435 (2.6 GHz) 32 GB Westmere (intelx5660) 12 rdzenie Intel Xeon X5660 (2.8 GHz) 24 GB Magnycours (magnycours) 48 rdzenie AMD Opteron 6174 (2.2 GHz) 256 GB Interlagos (interlagos) 64 rdzenie AMD Opteron 6272 (2.2 GHz) 521 GB Halo2 (kolejki) Halo2 Zwykły węzeł (halo2) 16 rdzenie AMD Opteron (2.2 2.4 GHz) 16/32 GB Westmere (intelx5660) 12 rdzenie Intel Xeon X5660 (2.8 GHz) 24 GB Magnycours (magnycours) 48 rdzenie AMD Opteron 6174 (2.2 GHz) 256 GB Gruby węzeł (bigmem) 64 rdzenie AMD Opteron 6272 (2.1 GHz) 512 GB
Hydra (constraint -C) Halo2 (queue -q) Hydra Istanbul (AMD2435) 12 rdzenie AMD 2435 (2.6 GHz) 32 GB Westmere (intelx5660) 12 rdzenie Intel Xeon X5660 (2.8 GHz) 24 GB Magnycours (magnycours) 48 rdzenie AMD Opteron 6174 (2.2 GHz) 256 GB Interlagos (interlagos) 64 rdzenie AMD Opteron 6272 (2.2 GHz) 521 GB Halo2 Zwykły węzeł (halo2) 16 rdzenie AMD Opteron (2.2 2.4 GHz) 16/32 GB Westmere (intelx5660) 12 rdzenie Intel Xeon X5660 (2.8 GHz) 24 GB Magnycours (magnycours) 48 rdzenie AMD Opteron 6174 (2.2 GHz) 256 GB Gruby węzeł (bigmem) 64 rdzenie AMD Opteron 6272 (2.1 GHz) 512 GB
Zmiana parametrów zadania scontrol pozwala użytkownikowi na zmianę parametrów jego zadań, np. scontrol update JobId=<id> TimeLimit=+10 Dodaje do pierwotnego limitu czasu zadania 10 min. Format zmiany czasu to: = (nadpisanie), =+ (dodanie) lub =- (odjęcie) minuty, minuty:sekundy, godziny:minuty:sekundy, dni-godziny, dnigodziny:minuty <id> to numer zadania w SLURM, widoczny np. przez squeue
Zmienne środowiskowe SLURM W ramach zadania kontrolowanego przez SLURM dostęp do zmiennych środowiskowych SLURM_XXX SLURM_JOB_ID Zawiera identyfikator zadania SLURM_NODELIST Pozwala listować węzły na których działą zadanie SLURM_NTASKS Pozwala sprawdzić liczbę wszystkich procesów w ramach zadania SLURM_TASKS_PER_NODE Pokazuje rozkład przydzielonych procesów na węzłach Inne
PRZYKŁADY
Zadanie: aproksymacja pi Całkowanie metodą prostokątów następującego wzoru: 1 n 1 1 4 h 2 1 x xi 0.5 0 i 0 2 1 ( ) n 1,2 1 Wartość liczby pi przybliżamy poprzez całkowanie funkcji f na przedziale [0,1] za pomocą kwadratury prostokątów 0,8 0,6 f ( x) 1 1 x 2 0,4 0,2 0 0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 1 31.03.2010 Wprowadzenie do MPI 37
Przykład 1: praca z programem okienkowym Praca interaktywna z trybem graficznym: MATLAB 1. ssh Y login.icm.edu.pl 2. module load hydra-sl6 3. srun --pty p hydra bash l 4. module load matlab 5. matlab Rozwiązujemy zadanie za pomocą kwadratury >> f = @(x)4./(1 + x.^2); >> mypi = integral(f, 0, 1); >> mypi
Przykład 2: obliczenia w NWChem i wizualizacja wyników krok po kroku Optymalizacja geometrii i wizualizacja molekuły 1. Przekopiować pliki i zalogowanie na węzeł cp /icm/hydra/lustre/temp/memar/szkol2014/input. module load hydra-sl6 srun --pty N 1 --tasks-per-node 4 bash -l 2. Wykonać symulację module load nwchem/6.3 mpirun -np 4 nwchem input > out 3. Wizualizacja module load jmol jmol.sh
Job array Funkcjonalność pozwalająca na tworzenie wielu zadań o identycznych ustawieniach Dodatkowa zmienna środowiskowa SLURM_ARRAY_TASK_ID pozwala parametryzować zadania z grupy Dostępne tylko dla zadań wsadowych uruchamianych przez sbatch, dodatkowo z opcją array sbatch --array=0,7 N1 moje_zadanie.sl sbatch --array=1,2,5,7 N1 moje_zadanie.sl sbatch --array=1-8:2 N1 moje_zadanie.sl
Zależności pomiędzy zadaniami Używamy sbatch / srun z opcją --dependency= <dependency_list> after:job_id[:jobid...] Start po rozpoczęciu określonego zadania / zadań afterany:job_id[:jobid...] Start po zakończeniu (jakimkolwiek) określonych zadań afternotok:job_id[:jobid...] Start po zakończeniu z błędem określonych zadań afterok:job_id[:jobid...] Start po poprawnym zakończeniu expand:job_id Zadanie ma wystartować jako rozszerzenie określonego zadania w tej samej partycji singleton Start po zakończeniu wszystkich innych zadań tego samego użytkownika
Przykład 3: Kompilacja i uruchomienie własnego programu Implementacja kwadratury w C: kompilator intela 1. Alokacja węzła na hydrze module load hydra-sl6 srun --pty p hydra bash -l 2. Kompilacja na węźle export EXAMPLES=/icm/hydra/software/icm/examples/slurm cp $EXAMPLES/my_pi.c. module load compilers/intel icc o my_pi my_pi.c 3. Uruchomienie programu./my_pi
Przykład 4: uruchomienie własnego zadania z parametrem (job array) 1. Przygotowanie programu na węźle cp $EXAMPLES/my_pi_arg.c. module load compilers/intel icc o my_pi_arg my_pi_arg.c 2. Przygotowanie plików sterujących (input) 3. Utworzenie skryptu kolejkowego my_pi_arr.sl #!/bin/bash -l #SBATCH -N 1 #SBATCH -n 1 #SBATCH -J my_pi export EXAMPLES=/icm/hydra/software/icm/examples/slurm srun my_pi_arg $EXAMPLES/my_pi_${SLURM_ARRAY_TASK_ID}.inp 4. Wstawienie do kolejki macierzy zadań sbatch --array=1-4 my_pi_arr.sl
Przykład 5: Kompilacja i uruchomienie własnego programu równoległego Wersja równoległa implementacji kwadratury z MPI 1. Przygotowanie programu na węźle cp $EXAMPLES/my_pi_mpi.c. module load compilers/intel module load mpi/mpich mpicc o my_pi_mpi my_pi_mpi.c 2. Utworzenie skryptu kolejkowego #!/bin/bash l #SBATCH A szkolenia my_pi_mpi.sl module load compilers/intel mpi/mpich mpiexec./my_pi_mpi 3. Wstawienie zadania równoległego do kolejki sbatch N1 n4 Sekcja Algorytmiki my_pi_mpi.sl Nowych Generacji Architektur
Przykład 6: obliczenia na GPU Obliczanie liczb pierwszych w CUDA + kompilator CUDA 1. Przekopiowaćć pliki i zalogowanie na węzeł z GPU (grom) cp /icm/hydra/lustre/temp/memar/szkol2014/cuda.cu. module load hydra-sl6 srun --pty p hydra --gres=gpu:1 bash -l 2. Przygotowanie programu dla GPU module load compilers/cuda/5.5.22 nvcc arch=sm_20 o cuda cuda.cu 3. Uruchomienie programu./cuda
Strigger i notification SLURM może informować nas o konkretnych zdarzeniach Poprzez tzw. triggery strigger --set --jobid=1234 --time \ --offset=-600 --program=mój_program Ustawia trigger (set), który uruchomi program mój_program na 10 (offset 600) minut przed przekroczeniem limitu czasu (time) przez dane zadanie (id=1234) Poprzez komunikaty wysyłane e-mailem, sterowane opcjami srun / sbatch --mail-user=<user> --mail-type=<type> Powiadomienie o stanie zadania (type): BEGIN, END, FAIL, REQUEUE, ALL
Przydatne opcje srun --propagate=stack=unlimited --exclusive --dependency=expand:<jobid>
Plan szkolenia Organizacja i dostęp do zasobów ICM Prezentacja Hydry Migracja danych Wprowadzenie do PLGrid Podstawowe informacje o SLURM SLURM kontra PBS Tryby pracy w SLURM Przykład 1 praca w trybie graficznym Przykład 2 uruchamianie aplikacji i wizualizacja Przykład 3, 4 kompilacja i uruchamianie programów Przykład 5 obliczenia na kartach GPU Dodatkowe funkcjonalności SLURM
Profiling SLURM wspiera profiling zadań Sprawdzanie profilu zakończonego zadania sh5util -j <jobid> w lokalnym katalogu utworzony zostanie plik opisujący zadanie w formacie hdf5, np.: hpc$ sh5util -j 13526 sh5util: Merging node-step files into./job_13526.h5 Zawartość pliku otwieramy narzędziem graficznym hdfview module load tools/hdfview hdfview
Profiling cd. Przykładowy profil otwarty w programie hdfview
Przykład VAMPIR Ortogonalizacja wektorow 1. Przekopiować pliki i zalogowanie na węzeł cp /icm/hydra/lustre/temp/memar/szkol2014/vamp.c. module load hydra-sl6 srun --pty N 1 --tasks-per-node 4 bash -l 2. Przygotowanie programu dla GPU module load mpi/openmpi/1.6.5-intel14.0.1 module load vampir/8.2.0 mpicc-vt g vamp.c 3. Uruchomienie programu./a.out vampir
VAMPIR c.d.
sreport cluster AccountUtilizationByUser user=mstol start=01/09/13 end=12/10/13 format=accounts,cluster,cpucount,login,proper,used Accounting SLURM pozwala na sprawdzanie zużytych zasobów (w minutach procesora) Dla pojedynczego zadania przy użyciu sacct sacct j <jobid> -S <start zadania> \ -E <koniec zaadnia> \ -o JobID,AveRSS,MaxRSS,CPUTime,AllocCPUS,State Dla zadań użytkownika w określonym przedziale czasu przy użyciu sreport sreport cluster \ AccountUtilizationByUser user=<userid> \ start=01/09/13 end=12/10/13 \ format=accounts,cluster,cpucount,login,proper,used
Dziękujemy za uwagę! pomoc@icm.edu.pl hydra-admins@icm.edu.pl