Prometheus:Mathematica

Z Komputery Dużej Mocy w ACK CYFRONET AGH
Skocz do:nawigacja, szukaj

Mathematica 10.2.0

Przygotowanie inputów

1. Należy się zalogować na wybrany klaster korzystając z polecenia ssh z opcją -X:

ssh -X nazwa_uzytkownika@promehteus.cyfronet.pl

W przypadku korzystania przez użytkownika z systemu Windows, połączenie należy nawiązać przy pomocy programu putty http://www.putty.org oraz należy zainstalować i uruchomić program Xming https://sourceforge.net/projects/xming/

Konfiguracja putty:
Putty new session.pngPutty x11.pngPutty session zapis.png

Użytkownik jest wtedy połączony z maszyną dostepową.

2. Następnie przez polecenie

module load plgrid/apps/mathematica 

należy zładować domyślną wersję Mathematici. Jeżeli istnieje potrzeba załadowania innej dostępnej wersji Mathematici, najpierw należy sprawdzić dostępne wersje na wybranym klastrze

module avail mathematica

lub

module avail plgrid/apps/mathematica 

lub

module spider mathematica

a potem załadować wybrany moduł, np.

module load plgrid/apps/mathematica/9.0

3. W celu uruchomienia Mathematici w trybie graficznym w konsoli należy wpisać

mathematica

4. Utworzenie nowego pliku wsadowego. W oknie powitalnym Mathematici należy kliknąć na

"New Document\Package"(Mathematica 10) lub "Create New\Other\Package"(Wcześniejsze wersje Mathematica).

Otwiera się edytor, gdzie można umieszczać polecenia Mathematici.

5. Mathematica wspiera obliczenia równoległe. Dokumentacja: https://reference.wolfram.com/language/guide/ParallelComputing.html

6. Po przygotowaniu pliku należy zapisać plik z rozszerzeniem .m (Mathematica Package). Należy kliknąć:

File\Save as\test1.m

Domyślny katalog docelowy Mathematici to ~/Wolfram Mathematica. Można sprawdzić zawartość katalogu przez polecenie w konsoli

ls ~/Wolfram\ Mathematica

7. Kończymy pracę z Mathematicą w trybie graficznym zamykając edytor i okno powitalne.

8. Odpinanie modułu

module unload plgrid/apps/mathematica

lub jeżeli była załadowana inna wersja Mathematici niż domyślna to (odnośnie wcześniejszego przykładu)

module unlod plgrid/apps/mathematica/9.0

ewentualnie w celu odpięcia wszystkich modułów załadowanych przez użytkownika

module purge

9. Przygotowanie pliku sbatch (np. o nazwie mathematica_test_task) do uruchomienia zadania na klastrze. Przykładowy skrypt do uruchomienia zadania dla Mathematici można przygotować w dowolnym edytorze tekstu: gedit, nano lub vim

#!/bin/bash
#SBATCH -N 1
#SBATCH -n 24
#SBATCH -p plgrid
#SBATCH --time 01:00:00
#SBATCH --ntasks-per-node=24
#SBATCH -J mathematica-test1
#SBATCH --mail-type=FAIL,END
#SBATCH --mail-user=nazwa_uzytkownika@domena

module load plgrid/apps/mathematica

cd $SLURM_SUBMIT_DIR
math -script mathematica_test_task.m

więcej: https://kdm.cyfronet.pl/portal/Prometheus:Podstawy srun https://computing.llnl.gov/linux/slurm/srun.html


Najprościej jest umieścić plik wsadowy Mathematici w tym samym katalogu co skrypt do uruchomienia zadania

10. Uruchomienie zadania. Będąc zalogowanym na maszynie dostępowej należy przejść do katalogu gdzie znajduje się plik do uruchamiania zadania i w konsoli wpisać

sbatch mathematica_test_task

Przykłady

Przykładowy skrypt wykonujący mnożenie macierzy w pętli 10k

(* Generowanie macierzy 50x50 *)
a=RandomReal[{-10,10},{50,50}]; 
b=RandomReal[{-10,10},{50,50}];

(* Pomiar czasu wykonania pętli 10k w której mnożone są macierze a i b *)
time = AbsoluteTiming[Do[a.b;,{n,10000}];]; 

(* Zapis czasu do pliku *)
Export["test1.txt",time];

Zmierzony czas to ok. 5.3 [s].

To samo zadanie ale w trybie równoległym.

(* Pobranie informacji o ilości dostępnych rdzeni *)
(* cores = $ProcessorCount; *)

(* Uruchamianie kerneli *)
(* LaunchKernels[cores]; *)
(* Bezpieczniej jest napisać jak poniżej, wtedy uruchomią się kernele na dostępnych rdzeniach i tyle na ile pozwala licencja *)
(* LaunchKernels[]; *)

(* lub wpisać liczbę kerneli *)
LaunchKernels[4];

a=RandomReal[{-10,10},{50,50}];
b=RandomReal[{-10,10},{50,50}];

(* Pomiar czasu wykonania pętli 10k dla operacji mnożenia macierzy a i b w trybie zrównoleglonym *)
time = AbsoluteTiming[Parallelize[Do[a.b;,{n,10000}];];]; 

Export["test2.txt",time];
CloseKernels[]; (* Kończenie pracy kerneli *)

Zmierzony czas to ok. 0.43 [s].

Można również użyć automatycznych funkcji do obliczeń równoległych takich jak np. ParallelTable, ParallelDo. Funkcje te automatycznie uruchamiają kernele.

Poniższy przykład pokazuje jak użyć ParallelTable


a=RandomReal[{-10,10},{50,50}];
b=RandomReal[{-10,10},{50,50}];

time = AbsoluteTiming[ParalleTable[Do[a.b;,{n,2500}];,{i,4}];];

Export["test3.txt",time];

Zmierzony czas to ok. 1.2 [s].

Funkcje wbudowane takie jak mnożenie macierzy są automatycznie zrównoleglone i nie trzeba pisać dodatkowego kodu. Powyższy przykład pokazuje jak można zrównoleglić obliczenia w Mathematice dla przypadku gdy obliczenia mogą być przeprowadzone w sposób niezależny od siebie.

Źródło: https://reference.wolfram.com/language/guide/ParallelComputing.html