Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
grid [2008/10/20 15:07] novak |
grid [2017/09/27 14:01] popel [Rules] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== | + | ====== |
- | Cluster | + | LRC (Linguistic Research Cluster) is a name of ÚFAL' |
- | * lrc.ufal.hide.ms.mff.cuni.cz: | + | If you need GPU processing, see a special page about our [[:gpu|GPU cluster called DLL]] (which is actually |
- | * fireball1 až 10 (4xcore, 16 GB RAM, Fedora 7, 2 procesory Intel Xeon 3 GHz) | + | |
- | * tauri1 až 10 (4xcore, 16 GB RAM, Fedora 7, 2 procesory Intel Xeon 3 GHz) | + | |
- | * orion1 až 10 (4xcore, 16 GB RAM, Fedora 7, 2 procesory Intel Xeon 2 GHz) | + | |
- | * sol1 až 13 (4xcore, 16 GB RAM, Fedora 7, 2 procesory AMD Opteron Dual Core 2 GHz) | + | |
- | Frontovací systém umožňuje: | + | ===== List of Machines ===== |
+ | Last update: 2017/09. All machines have Ubuntu 14.04. | ||
+ | Some machines are at Malá Strana (ground floor, new server room built from Lindat budget), some are at Troja (5 km north-east). | ||
+ | If you need to quickly distinguish which machine is located where, you can use your knowledge of [[https:// | ||
- | | + | ==== Troja (troja-all.q) ==== |
- | | + | ^ Name ^ CPU type ^ GHz ^cores ^RAM(GB)^ note ^ |
- | | + | | achilles[1-8] |
+ | | hector[1-8] | ||
+ | | helena[1-8] | ||
+ | | paris[1-8] | ||
- | ===== Jak začít ===== | + | ==== MS = Malá Strana (ms-all.q) |
- | Jednou za život musíte provést | + | ^ Name ^ CPU type ^ GHz ^cores ^RAM(GB)^ note ^ |
+ | | andromeda[1-13] | AMD 2xCore4 Opteron | 2.8 | 8 | 32 | | | ||
+ | | hydra[1-4] | AMD | 2.6 | 16 | 128 | | | ||
+ | | fireball[1-10] | ||
+ | | hyperion[1-9] | ||
+ | | lucifer[1-10] | ||
+ | | orion[1-6] | ||
+ | | orion[7-10] | ||
+ | | tauri[1-10] | ||
+ | | cosmos | ||
+ | | belzebub | ||
+ | | iridium | ||
+ | | twister[1,2] | Intel 2xCore4 Xeon | 2.4 | 8 | 48 | also in '' | ||
+ | === Outside LRC cluster (but located as MS) === | ||
+ | ^ Name ^ CPU type ^ GHz ^cores ^ RAM(GB)^ note ^ | ||
+ | | lrc[1, | ||
+ | | pandora[1-10] | ||
+ | | sol[1-5] | ||
+ | | sol[6-8] | ||
+ | The two **lrc machines** are so called heads of the cluster. **No computation is allowed here**, i.e. no CPU-intensive, | ||
- | ===== Ukázka užití SGE ===== | + | Alternatively, |
- | Tato posloupnost příkazů ukazuje, jak užít | + | The **pandora machines** are in a special cluster (not accessible from lrc) and queue **ms-guests.q** available for our colleagues from KSVI and for students of [[http:// |
+ | |||
+ | ===== Installation ===== | ||
+ | |||
+ | Add the following line into your ' | ||
+ | |||
+ | source / | ||
+ | |||
+ | This detects if you are on one of the cluster machines (including lrc and sol) and sets env variables accordingly. It also prints a status message. | ||
+ | Usually, this is the first line of your ' | ||
+ | |||
+ | [ -f ~/.bashrc ] && source ~/.bashrc | ||
+ | |||
+ | ===== Basic usage ===== | ||
+ | |||
+ | First, you need to ssh to the cluster head (lrc1 or lrc2) or to one of the sol machines. The full address is '' | ||
< | < | ||
- | ssh lrc | + | ssh lrc1 |
- | # přihlašte se na hlavu clusteru | + | echo 'hostname; pwd; echo The second parameter is $2' |
- | echo "hostname; pwd" | + | # prepare a shell script describing your task |
- | # vyrobte skript, který popisuje, co má úloha udělat | + | qsub -cwd -j y script.sh Hello World |
- | qsub -cwd -j y skript.sh | + | # This submits your job to the default queue, which is currently '' |
- | # zařaďte úlohu do fronty. | + | # Usually, there is a free slot, so the job will be scheduled within few seconds. |
- | # Vlastně stačilo zavolat: qsub skript.sh | + | # We have used two handy qsub parameters: |
- | # Ale dodatečné parametry zařídily: | + | # -cwd ... the script is executed in the current directory |
- | # -cwd ... skript bude spuštěn v aktuálním adresáři | + | # -j y ... stdout and stderr outputs are merged and redirected to a file ('' |
- | # -V ... proměnné z vašeho prostředí budou zkopírovány do prostředí skriptu | + | # We have also provided two parameters for our script " |
- | # -j y ... standardní | + | # The qsub prints something like |
- | # Pořadí parametrů **je** důležité, | + | # Your job 121144 (" |
qstat | qstat | ||
- | # Podívejme se, jaké úlohy běží. | + | # This way we inspect all our jobs (both waiting in queue and scheduled, i.e. running). |
- | # SGE chvíli čeká, než skript opravdu spustí. Pro malinké úlohy tedy SGE může představovat | + | qstat -u ' |
- | # zbytečné zpoždění. | + | # This shows jobs of all users. |
- | cat skript.sh.oXXXXX | + | qstat -j 121144 |
- | # vypište si výstup skriptu. XXXXX je ID jobu, které bylo přiděleno | + | # This shows detailed info about the job with this number (if it is still running). |
- | # qsubem. Čili druhé poslání do fronty starší log typicky nepřepíše. | + | less script.sh.o* |
+ | # We can inspect the job's output (in our case stored in script.sh.o121144). | ||
+ | # Hint: if the job is still running, press F in ' | ||
</ | </ | ||
- | A takto dopadl výstup našeho skriptu: | + | The output of our job should look like: |
< | < | ||
- | Warning: no access to tty (Bad file descriptor). | + | LRC:ubuntu 14.04: 8.1.7a Son of Grid Engine variables set... |
- | Thus no job control in this shell. | + | lucifer5 |
- | sol2.ufal.hide.ms.mff.cuni.cz | + | /home/popel/tmp |
- | /export/home/bojar | + | The second parameter is World |
+ | ======= EPILOG: Tue Sep 26 19:49:05 CEST 2017 | ||
+ | == Limits: | ||
+ | == Usage: | ||
+ | == Duration: 00:00:02 (2 s) | ||
</ | </ | ||
- | Další užitečné příkazy a parametry: | + | Our admins configured the SGE to print some extra info on stderr: the first line and then the epilog. |
+ | The '' | ||
+ | The '' | ||
< | < | ||
- | qsub -o LOG.stdout -e LOG.stderr skript.sh | + | qdel 121144 |
- | # když chcete přesměrovat výstup skriptu do určených souborů | + | # This way you can delete (" |
- | qsub -S /bin/bash | + | qdel \* |
- | # když chcete, aby skript běžel v bashi | + | # This way you can delete all your jobs. Don't be afraid - you cannot delete others jobs. |
- | qsub -V | + | |
- | # když chcete předat proměnné prostředí | + | |
- | qdel all | + | |
- | # když chcete zrušit všechny své joby (rušit cizí nesmíte) | + | |
</ | </ | ||
- | ** V.N.: "qdel all" mi nefunguje, nahradil jsem za:** | + | ===== Rules ===== |
- | qdel " | + | The purpose of these rules is to prevent your jobs to damage the work of your colleagues and to divide the resources among users in a fair way. |
+ | * Read about our [[internal: | ||
+ | * While your jobs are running (or queued), check your jobs (esp. previously untested setups) and your email (esp. [[internal: | ||
+ | * You can ssh to any cluster machine, which can be useful e.g. to diagnose what's happening there (using '' | ||
+ | * However, **never execute any computing manually** on a cluster machine where you are sshed (i.e. not via '' | ||
+ | * For interactive work, you can use '' | ||
+ | * **Specify the memory and CPU requirements** (if higher than the defaults) and **don' | ||
+ | * If your job needs more than one CPU (on a single machine) for most of the time, reserve the given number of CPU cores (and SGE slots) with < | ||
+ | * If you are sure your job needs less than 1GB RAM, then you can skip this. Otherwise, if you need e.g. 8 GiB, you must always use '' | ||
+ | * Be kind to your colleagues. If you are going to submit jobs that effectively take more than one fifth of our cluster for more than several hours, check if it is free (with '' | ||
+ | | ||
+ | Další doporučení: | ||
+ | * Uklízet po sobě lokální data, protože jinak si tam už nikdo nic užitečného nepustí. | ||
+ | * Vyhnout se hodně divokému paralelnímu přístupu ke sdíleným diskům. NFS server to pak nepěkně zpomalí pro všechny. Distribuujte tedy i data. | ||
+ | * Pokud chci spouštět úlohy, které poběží dlouhou dobu (hodiny, dny), nepustím je všechny najednou, aby cluster mohli využívat i ostatní. | ||
+ | === Memory === | ||
+ | mem_free (or mf): this is a ' | ||
+ | It affects job scheduling. Every machine as an initial value assigned. | ||
+ | When you specify | ||
+ | qsub -l mem_free=4G | ||
+ | SGE finds a machine with mem_free >= 4GB, and subtracts 4GB from it. | ||
- | ===== Pravidla pro správné používání clusteru ===== | + | This limit is not enforced, so if a job exceeds this limit, the |
+ | SGE value of mem_free may not represent the real free memory. | ||
- | Základní pravidlo, které musíme všichni ctít, aby SGE plnilo svou úlohu dobře: | + | Default value is 1GB. |
- | * Nespouštět úlohy ručně. (O ručně spuštěných úlohách SGE nemá informaci, klidně na daný uzel pošle ještě další úlohy z fronty.) | + | ===== Advanced usage ===== |
- | Další doporučení: | + | Other useful commands: |
- | * Pokud možno používat '' | + | |
- | * Dotaz: jak se kombinuje '' | + | |
- | * Uklízet po sobě lokální data, protože jinak si tam už nikdo nic užitečného nepustí. | + | |
- | * Vyhnout se hodně divokému paralelnímu přístupu ke sdíleným diskům. NFS server to pak nepěkně zpomalí pro všechny. Distribuujte tedy i data. | + | |
- | * Informovat SGE, kolik paměti úloha žere, aby na strojích nedošla paměť: < | + | |
+ | < | ||
+ | qsub -o LOG.stdout -e LOG.stderr skript.sh | ||
+ | # když chcete přesměrovat výstup skriptu do určených souborů | ||
+ | qsub -S /bin/bash | ||
+ | # když chcete, aby skript běžel v bashi | ||
+ | qsub -V | ||
+ | # když chcete předat proměnné prostředí | ||
+ | qdel \* | ||
+ | # když chcete zrušit všechny své joby (rušit cizí nesmíte) | ||
+ | </ | ||
- | Víc pravidel není. | ||
- | |||
- | ===== Slušné chování ===== | ||
- | |||
- | Pokud chci spouštět úlohy, které poběží dlouhou dobu (hodiny, dny), nepustím je všechny najednou, aby cluster mohli využívat i ostatní. | ||
- | ===== Triky a opentlení ===== | ||
==== ~bojar/ | ==== ~bojar/ | ||
Line 109: | Line 169: | ||
</ | </ | ||
+ | lépe funguje '' | ||
- | ==== ~zeman/ | + | ===== Monitorování úloh ===== |
- | Podobná věc pro '' | + | * '' |
+ | * '' | ||
+ | * ''/ | ||
+ | * '' | ||
+ | * ''/ | ||
+ | * mem_total: celkova pamet uzlu | ||
+ | * mem_free: tedy kolik je jeste volne pameti z pametove quoty uzlu | ||
+ | * act_mem_free: | ||
+ | * mem_used: kolik je pameti skutecne pouzito | ||
+ | * ''/ | ||
+ | * celkovy pocet jader, pocet vyuzitych jader | ||
+ | * celkova velikost RAM, kolik je ji fyzicky nepouzite, kolik je ji jeste nerezervovane | ||
+ | * po jednotlivych uzivatelich (zrovna pocitajicich) -- kolik jim bezi uloh, kolik jich maji ve fronte | ||
+ | * '' | ||
+ | * [[https:// | ||
- | <code tcsh> | + | ===== Časté a záludné problémy ===== |
- | echo $* > $SCRIPTFILE | + | |
- | echo $* | + | |
- | echo qsub -cwd -V -S /bin/tcsh -m e $SCRIPTFILE | + | |
- | qsub -cwd -V -S /bin/tcsh -m e $SCRIPTFILE | + | |
- | qstat -u ' | + | |
- | rm $SCRIPTFILE</ | + | |
- | Příklad spuštění: | ||
- | < | + | ==== Submitnutý job může znovu submitovat ==== |
- | (Kdybych místo uvozovek použil apostrofy, nerozbalily by se mi proměnné. První argument (název skriptu) klidně mohl být v uvozovkách spolu s přesměrováním. Dal jsem ho ven jen proto, že potom '' | + | Danovy starší zkušenosti s clusterem PBS (nikoli SGE) říkaly, že tohle nejde. Ale jde to, aspoň u nás. Příkazy |
- | + | ||
- | ===== Časté a záludné problémy ===== | + | |
- | + | ||
- | ==== Submitnutý job nesmí znovu submitovat ==== | + | |
- | + | ||
- | Pokud se nemýlím, není dovoleno použít | + | |
Line 193: | Line 255: | ||
</ | </ | ||
+ | ==== Jak zjistit, jaké zdroje jsem pro svou úlohu požadoval ==== | ||
+ | < | ||
+ | hard resource_list: | ||
+ | hard resource_list: | ||
+ | hard resource_list: | ||
+ | hard resource_list: | ||
+ | hard resource_list: | ||
+ | hard resource_list: | ||
+ | ==== Jak rezervovat více jader na stejném stroji pro 1 job ==== | ||
- | + | < | |
- | ===== Synchronizace úloh (v Perlu) ===== | + | qsub -pe smp <pocet jader> |
- | + | ||
- | Pokud chci paralelizovat část úlohy (zde '' | + | |
- | + | ||
- | * Obalím svůj skript pro běh na gridu – vytvořím '' | + | |
- | | + | |
- | # | + | |
- | . / | + | |
- | + | ||
- | qrsh -cwd -V -p -50 -l mf=5g -now no ' | + | |
</ | </ | ||
- | * Ve svém hlavním skriptu ho pak zavolám a posbírám výsledky: | ||
- | < | ||
- | use FileHandle; | ||
- | use IPC::Open2; | ||
- | use threads; | ||
- | use threads:: | ||
- | my @threads; | ||
- | my @results; | ||
- | share(@results); | ||
- | for (@inputs) | ||
- | my $t = async { | ||
- | my $reader; my $writer; | ||
- | my $pid = open2($reader, | ||
- | die " | ||
- | $writer-> | ||
- | print $writer " | ||
- | $writer-> | ||
- | for (< | ||
- | chomp; | ||
- | { | ||
- | lock @results; | ||
- | push @results, $_; | ||
- | } | ||
- | } | ||
- | waitpid $pid, 0; # Pockame s ukoncenim vlakna na ukonceni ulohy v gridu | ||
- | return $? >> 8; # Pokusime se ziskat navratovou hodnotu (netestoval jsem) | ||
- | }; | ||
- | push @threads, $t; | ||
- | } | ||
- | for (@threads) | ||
- | die "Child exited with non-zero exit code" if $_-> | ||
- | } | ||
- | </ | ||
- | |||
- | Poznámky: | ||
- | * Pokud lze všechno předat parametry, nemusí se otevírat obousměrná roura a situace bude jednodušší | ||
- | * Pokud '' | ||
- | * Celý příklad je k vidění v Czengu od V.N. | ||