Pro instalaci je nutný Linux s pokud možno X86_64 procesorem. V principu je možný i 32 bitový systém, ale v tomto případě narazíte na problémy při kroskompilaci 64 bitových slave programů a celý klastr bude muset být tvořen 32 bitovými procesory. Možnost použít počítače s 32 bitovými je dnes čistě teoretická a nikdo tuto možnost asi nevyužije. Pro správný chod klastru je doporučena síť s rychlostí 1 Gbit/s, při použití sítě 100 Mbit/s dojde poměrně rychle k nasycení a výpočet bude limitovaný rychlostí sítě. Dále newAD2 vyžaduje, aby uživatel měl na klastru (počítačích, kde bude newAD2 instalováno) stejné uživatelské jméno.
Instalace na hlavním počítači (Master) pro více uživatelů
Grupa newad
Instalace se provede do společných adresářů přístupných grupě newad
.
Proto je nutné nejprve vytvořit tuto grupu a přidat do ní všechny uživatele vývojáře modelů, kteří budou
mít právo newAD2 instalovat (většinou tedy pouze vás). Ostatní uživatelé newAD2 být v grupě nemusí.
Přihlaste se jako root nebo požádejte správce systému a proveďte následující:
groupadd newad
usermod -a -G newad username
Adresář newAD2
Dále je nutné vytvořit následující adresář pro programy a data:
mkdir -p /usr/local/share/newAD2
chown root:newad /usr/local/share/newAD2
chmod 2775 /usr/local/share/newAD2
Instalovat balíčky
- c/c++ : kompilátory
- boost-devel : rozšíření c++
- gsl-devel : knihovna pro vědecké výpočty
- pvm-devel : program a knihovna pro paralelizaci
- readline-devel : knihovna umožnující kurzory vracet se ve vstupním řádku
- gwyddion-devel : knihovna programu pro analýzu dat z SPM
Spolu s uvedenými balíčky se nainstaluje asi 100 dalších balíčků v závislosti na jednotlivých distribucích Linuxu. Dále jsou pro vybrané distribuce uvedeny příkazy pro instalaci balíčků:
openSUSE Leap 15.4
zypper addrepo https://download.opensuse.org/repositories/science/15.4/science.repo
zypper refresh
zypper -n install gcc gcc-c++ make boost-devel gsl-devel readline-devel gwyddion-devel libtirpc-devel
Baličky pvm a pvm-devel po stažení nainstalujeme pomocí příkazu:
rpm -ihv pvm-3.4.6-lp154.0.0.x86_64.rpm pvm-devel-3.4.6-lp154.0.0.x86_64.rpm
Ubuntu 20.04
sudo apt-get install gcc g++ libboost-all-dev libgsl0-dev pvm-dev libreadline-dev libgwyddion20-dev libgtkglext1-dev libfftw3-dev libgtk2.0-dev libtirpc-dev gawk
sudo ln -s /usr/lib/x86_64-linux-gnu/libGL.so.1 /usr/lib/x86_64-linux-gnu/libGL.so
sudo mkdir /usr/lib/pvm3/lib/LINUX64
sudo ln -s /usr/lib/x86_64-linux-gnu/libpvm3.a /usr/lib/pvm3/lib/LINUX64/libpvm3.a
Na závěr v uživatelském režimu ověříme instalaci. Napište příkaz:
echo halt | pvm
Jestliže výsledkem tohoto příkazu je:
pvm> halt
Terminated
Vše proběhlo správně a můžeme přistoupit k dalším bodům instalace. Jestliže uvidíte chybovou hlášku "Console: Can't start pvmd" něco je špatně:
- Zkontrolujte příkazem
hostname
jméno vašeho počítače. Měli byste obdržet jméno bez domény. Jestliže jste obdržely i jméno domény, je nutné nastavit systém tak aby tento příkaz vracel pouze samotné jméno. V SuSE změňte obsah souboru/etc/HOSTNAME
. - Zkontrolujte jestli vám jede síť, respektive jestli příkaz
ping hostname
vrátí pozitivní odezvu (pvm vyžaduje aby síť běžela, i když budete pvm používat pro paralelizaci pouze lokálně) V případě, že váš počítač není na síti nastavte hostname na loopback (přidejte127.0.0.1 hostname
do/etc/hosts
).
Stáhnout
Rozbalit
tar jxf newAD2-1.tar.bz2
Vytvořit soubor clusterAD2.ini
Pokud hodláte instalovat newAD2 pouze na jeden počítač, tento bod instalace můžete přeskočit.
V adresáři newAD2-1
je nutné vytvořit clusterAD2.ini
soubor s jedním řádkem v následujícím formátu:
hostname:pvm_arch/proc_arch
Pokud tento soubor neexistuje vytvoří se automaticky při prvním volání make
. V rozbaleném adresáři proveďte
následující příkaz:
make clean
Pokud make clean
vypíše chybu s nedefinovanou funkcí gensub je třeba doinstalovat gawk
.
Soubor clusterAD2.ini
může zůstat tak jak je vygenerován, pokud budeme newAD2 používat pouze na jednom počítači s X86_64 procesorem.
V opačném případě soubor je soubor nutné editovat:
- Hodnota
hostname
(jméno počítače) je nastavena automaticky pomocí programu hostname a není ji nutné měnit. - Hodnota
pvm_arch
je nastavena naLINUX64
, i když může nabývat i hodnotuLINUXX86_64
, která je zavedená ve Fedoře pro X86_64 procesory a není ji nutné měnit. V případě, že se poukoušíte program instalovat na 32 bitovém systému změňte hodnotu naLINUX
. - Hodnota
proc_arch
je skriptem nastavena na hodnotunative
, která způsobí, že kompilátor automaticky detekuje procesor, na kterém běží kompilace a nastaví správnou hodnotu. V případě, že budeme newAD2 používat na více počítačích je lepší tuto volbu změnit na hodnotu, která nejlépe odpovídá vašemu procesoru. Tím zamezíme dvojí kompilaci pro danou architekturu jestliže procesor na hlavním počítači je totožný s procesorem na podřízeném počítači. Možné hodnoty naleznete v Makefile souboru a pro procesory X86_64 může nabývat hodnotk8
,amdfam10
,bdver1
,core2
,corei7
,coreavx2
,haswell
. Názvy vychází z volby-march
gcc kopilátoru zkrácené o znaky "-", tj. např. volbacore-avx2
je zkrácena nacoreavx2
(viz. man gcc). Pokud nějaká volba bude chybět, lze použít volbu staršího procesoru (kód bude hůře optimalizován) a nebo ji doplnit do Makefile.
Poznamenejme, že soubor clusterAD2.ini
definuje klaster počítačů, na kterým se bude newAD2 instalovat.
Zatím tedy bude v klastru pouze jeden počítač.
Kompilace
Kompilaci částí potřebných na hlavním počítači provedeme příkazem:
make
Instalace
Instalaci všeho potřebného na hlavním počítači provedeme příkazem:
make local
Pokud vše proběhlo v pořádku danném stroji newAD2 nainstalováno v adresáři /usr/local/share/newAD2/bin
.
Na Ubuntu může mít make
problém s nalezením pvm knihovny. Asi nejjednoduší způsob nápravy je vytvořit očekávaný
adresář vyrobit v něm link k knihovně pvm:
sudo mkdir -p /usr/lib/pvm3/lib/LINUX64/
sudo ln -s /usr/lib/libpvm3.a /usr/lib/pvm3/lib/LINUX64/libpvm3.a
Dále se v adresáři /usr/local/share/newAD2
vygeneroval soubor hostfileAD2
, kde jsou informace
o klastru v následujícím formátu:
&hostname sp=corenumber ep=/usr/local/share/newAD2/bin
kde corenumber
je počet jader na daném počítači a je automaticky generován.
Nastavení cest
Abyste program nemuseli volat s celou cestou je vhodné, abyste vy i ostatní uživatelé přidali
adresář /usr/local/share/newAD2/bin
do systemové proměnné PATH
.
V domovském adresáři editujte .bashrc
soubor a na konec přidejte následující řádky:
export PATH=$PATH:/usr/local/share/newAD2/bin
Odhlašte se a přihlašte, aby se provedené změny provedly. Textovou konzoli newAD2 potom můžete spustit příkazem:
newAD2
nebo newAD2 můžete nastartovat s grafickým rozhraním pomocí:
newAD2gui
Instalace na podřízených počítačích (Slave) pro více uživatelů
Grupa newad a adresáře newAD2
Pro rozšíření klastru na jiný počítač potřebujeme požádat správce tohoto počítače, aby vytvořil uživatelské
účty, adresáře newAD2 a grupu newad
do které pridá pouze ty, kteří budou mít právo newAD2 instalovat
(stejné jako pro Master). Dále je nutné mít nainstalován balíček pvm. Ostatní vývojářské balíčky není nutné
instalovat, protože kompilace bude provedena na hlavním počítači.
Generování klíčů
Dále je nutné pro instalaci i spuštění newAD2 na podřízených počítačích vygenerovat soukromý a veřejný klíč pro všechny uživatele (toto si každý uživatel musí udělat sám), tak aby bylo možné se přihlašovat na podřízené počítače bez použití hesla. V domovském adresáři spusťte příkaz:
ssh-keygen -t rsa
Na dotazy příkazu třikrát odpovězte klávesou Enter, tím vygenerujete v adresáři .ssh
veřejný
id_rsa.pub
a neveřejný id_rsa
klíč, který bude použitelný bez hesla.
Pokud na na podřízeném počítači s jménem slavehostname
ještě žádné klíče nemáte můžete klíč z vašeho
hostname
nakopírovat do souboru authorized_keys
v adresáři .ssh
na Master i Slave počítači:
cp .ssh/id_rsa.pub .ssh/authorized_keys
scp .ssh/id_rsa.pub slavehostname:.ssh/authorized_keys
Na závěr ověřte jestli lze se připojit bez hesla a jakéhokoliv dotazování pomocí příkazu:
ssh slavehostname
Modifikace souboru clusterAD2.ini
V adresáři newAD2-1
je nutné přidat řádky s informacemi o podřízených počítačích, které slouží ke kompilaci
příslušných částí newAD2 a ke generaci hostfileAD2
souboru. Formát řádku pro podřízený počítač je stejný jako pro hlavní počítač,
ale na konci definičního řádku je přidaná cesta k pvmd na podřízeném počítači:
masterhostname:master_pvm_arch/master_proc_arch
slave1hostname:slave1_pvm_arch/slave1_proc_arch:slave1_pvmd_path
slave2hostname:slave2_pvm_arch/slave2_proc_arch:slave2_pvmd_path
slave3hostname:slave3_pvm_arch/slave3_proc_arch:slave3_pvmd_path
...
Hodnoty ..._proc_arch
se budou lišit podle typu procesoru a hodnoty ..._pvmd_path
budou závislé na konkrétní distribuci systému:
-
/usr/lib/pvm3/lib/pvmd
SuSe, Ubuntu -
/usr/share/pvm3/lib/pvmd
Fedora
Pro hodnoty ..._pvm_arch
platí to co jsme psali výše a tedy pro dnešní Linux na X86_64 platformě mohou nabývat hodnot LINUX64 nebo LINUXX86_64.
Kompilace
Kompilaci příslušných částí newAD2, které budou spuštěny na podřízených počítačích se provede opět příkazem:
make
Instalaci celého klastru provedeme příkazem:
make cluster
Ten nakopíruje potřebné soubory do adresářů na podřízených počítačích a vygeneruje aktuální hostfileAD2
,
kde jsou uvedené veškeré potřebné informace o klastru ve formátu:
&masterhostname sp=mastercorenumber dx= ep=/usr/local/pvm3/bin
&slave1hostname sp=slave1corenumber dx=slave1_pvmd_path ep=/usr/local/pvm3/bin
&slave2hostname sp=slave2corenumber dx=slave2_pvmd_path ep=/usr/local/pvm3/bin
&slave3hostname sp=slave3corenumber dx=slave3_pvmd_path ep=/usr/local/pvm3/bin
...
Poznamenejme, že dx=
v prvním řádku (cesta k pvmd na Master počítači) není nastavená, protože není potřebná.
Když ale nějakou hodnotu v clusterAD2.ini
nastavíme, bude ignorována, protože, když se tento soubor čte, tak už
pvmd na Master počítači už běží. Dále je nutno poznamenat, že kompilace a instalace celého
newAD2 může být provedená pouze příkazem make cluster
respektive make install
, což je synonymum.
V případě, že v slaveAD2.ini
je uveden pouze Master počítač,
potom make local
a příkaz make cluster
(make install
) jsou ekvivalentní příkazy, ale jestliže
je uvedeno v clusterAD2.ini
více počítačů, příkaz make local
vytvoří klastr jen s Master počítačem. Dále se tyto
příkazy liší metodou kopírování přeložených programů do cílových adresářů. Příkaz make local
používá příkaz install
,
který ke kopírování nepotřebuje autentizaci. Příkaz make cluster
(make install
) používá ke kopírování
souborů slaveAD2-OTF
a inspectorAD2
příkaz rsync
, který po vás bude vyžadovat heslo v případě,
že nebudete mít na Master počítači nastavenou autentizaci bez použití hesla (i když se jedná o kopírování z jednoho počítače na stejný počítač).
Shrňme si to. Příkaz make má nastaveno několik cílů:
-
make master
- kompiluje všechny části potřebné na Master počítači kroměslaveAD2-OTF
ainspectorAD2
-
make slave
- kompilujeslaveAD2-OTF
ainspectorAD2
pro Master počítač -
make slaves
- kompilujeslaveAD2-OTF
ainspectorAD2
pro všechny architektury potřebné v klusteru -
make
nebomake all
- kompiluje vše -
make local
- nainstaluje klastr pouze na Master počítači -
make cluster
nebomake install
- nainstaluje klastr na všechny počítače uvedené vclusterAD2.ini
Jestli pvm běží na podřízeném počítači (to lze ověřit příkazem echo halt | pvm
)
a je-li možné se z hlavního počítače na něj nalogovat bez hesla je nutné ověřit,
jestli pvm umí přidat do klasteru podřízený počítač (nastartovat na něm pvm démon). To lze následujícími příkazy:
pvm /usr/local/share/newAD2/hostfileAD2
pvm> add slavehostname
1 successful
HOST DTID
... ...
pvm> halt
Jestliže na příkaz add
v pvm kozoli neobdržíte souhlasnou hlášku odstraňte problém:
- Vypněte firewall nebo jinak zajistěte, aby firewall neblokoval porty pvm.
- Pokud vám vysí
pvm3d
na některém z počítačů, zabíjte ho a poté smažte soubor/tmp/pvmd.UID
, který by vám blokoval jeho následné spuštění. - Startujete-li pvm pomocí příkazu
add
z hlavního počítače, nesmí již na podřízeném počítači pvm běžet.
I když lze celý pvm klastr nastartovat pomocí příkazu add slavehostname
a pak
pvm konzoli opustit příkazem quit
a následně spustit newAD2, není to nutné. Nastartování klastru zajistí newAD2
například pomocí podobných příkazů:
newAD2
newAD2> add slavehostname
...
newAD2> quit
Instalace vývojáře modelů
V rámci newAD2 máme tři ůrovně uživatelů:
- Běžný uživatel - tento uživatel používá program newAD2 tak jak je nainstalovaný se stabilními dokumentovanými modely (není v grupě
newad
). - Vývojář modelů - tento uživatel používá program newAD2 tak jak je nainstalovaný, kromě části ve které jsou implementovány fyzikální modely
(procesy
slaveAD2-OTF...
). Je v grupěnewad
a sám si modely vyvíjí a kompiluje si svůj vlastní klastr (generuje souborhostfileAD2...
). - Vývojář newAD2 - tento uživatel vyvíjí zbývající části programu newAD2 a spolu s ostatními vývojáři newAD2 je v grupě
newad
a má přístup do verzovacího systému.
Jestliže máte zájem být vývojář modelů a budete si chtít kompilovat vlastní modely je nutné zajistit, aby vaše pokusy
s kompilací klusteru neovlivňovaly ostatní uživatele. To je zajištěno tím, že si definujete v .bashrc
proměnou CLUSTERNAME
například na hodnotu vašeho uživatelského jména:
export CLUSTERNAME=$USER
Proměnná CLUSTERNAME
definuje klastr (soubor hostfileAD2$CLUSTERNAME
)
a modely (procesy slaveAD2-OTF$CLUSTERNAME
), které se mají použít při spuštění newAD2.
V souboru Makefile
je definovaná proměná SUFFIX = $(CLUSTERNAME)
,
kterou volíme, který klastr a modely chceme kompilovat.
Tak si můžeme zkompilovat libovolný počet klastrů včetně nepojmenovaného, který může sloužit jako klastr se stabilními modely pro
běžného uživatele. Tedy máme-li nastavenou proměnou CLUSTERNAME
můžeme nepojmenovaný kluster kompilovat a spustit příkazy:
export CLUSTERNAME=
make install
newAD2gui