Sun Grid Engine

Zde najdete stručný návod pro práci se SGE pod Linuxem. Pokud vám něco chybí nebo není jasné, ozvěte se mailem.

Co je SGE?

SGE - Sun Grid Engine je systém pro správu dávkového zpracování úloh. Hlavní myšlenka těchto systémů spočívá v tom, že vámi požadovaný výpočet zapíšete do skriptu a ten předáte do SGE. Ten se na základě aktuálního stavu rozhodne kdy a na kterém z dostupných uzlů vaši úlohu spustí. Na každém výpočetním uzlu je definována fronta s kapacitou 1-32 úlohy podle počtu procesorů. Do těchto front jsou zasílány k vykonání jednotlivé úlohy z centrálního plánovače.

Sun Grid Engine - oficiální dokumentace

Sun Grid Engine - wiki

Základní příkazy

Ke všem příkazům jsou k dispozici podrobné manuálové stránky. Základní použití je:

  • qstat - informace o využití klastru
    • -f kompletní výpis i pro nevyužité uzly
    • -U user informace pouze o úlohách pro uživatele user
    • -j JID informace pouze o konkrétní úloze (např. proč se nesubmituje)
  • qhost - informace o vytížení jednotlivých front
    • -j - detailnější informace o čekajících/běžících úlohách
    • -q - detailnější informace o jednotlivých frontách
  • qsub - zadání nové úlohy ke spuštěné
    • skript - shell skript obsahující úlohu. Pokud chybí čte standardní vstup
    • -v VAR - exportuje do skriptu proměnnou VAR z aktuálního shellu
    • -j y/n - spojí standadní výstup a std. chybový výstup
    • -o - přesměruj standardní výstup do souboru
    • -e - přesměruj standardní chyb. výstup do souboru
    • -N name - jméno úlohy jiné než jméno skriptu (pro výpisy qstat,qhost)
    • -S shell - použij jiný než implicitní shell (/bin/bash) pro spuštění úlohy (např pro perl apod)
    • -q queue[,queue] - použij pouze [některou] z uvedených front (např. jen blady je -q all.q@@blade)
    • -p PRI - nastavení priority (-1023 malá až 1024 velká) pro plánovač, více na wiki (neprojeví se při běhu úlohy, tam je vždy nice 15)
    • -js NUM - nastavení rozdelování ticketů, více na wiki (neprojeví se při běhu úlohy, tam je vždy nice 15)
  • qdel - smazání úlohy ve frontě
    • NUM - smazat úlohu číslo NUM - zjistit se dá např. pomocí qstat nebo při zadávání přes qsub
    • -f - force - smaž úlohu i když počítač na němž je spuštěna nereaguje - použijte v případě, že vám někdo patřičný výpočetní uzel vypne.
  • qalter,qlogin - další užitečné příkazy, změní nastavení již zaslané úlohy, interaktivní přihlášení v rámci SGE. detaily jsou v man. stránkách

Jednoduchá úloha

Jednoduchá úloha může vypadat například takto:

kasparek@pckasparek:~$ cat myjob.sh
#!/bin/bash
#
#$ -S /bin/bash
#$ -N Name_of_job
#$ -o /homes/kazi/kasparek/sge.out
#$ -e /homes/kazi/kasparek/sge.err
#$ -q all.q@svatava.q,all.q@@blade
#
date
sleep 10
date
Ve skriptu je možno pomocí konstrukce #$ definovat všechny parametry tak jako pro qsub. Zadání úlohy do systému se provede pomocí (parametry by bylo možno definovat ve skriptu všechny, rozdělěno je to na ukázání obou možností):
qsub -v SOME_VAR -p -10 myjob.sh

Parametrizovaná úloha

Pokud použijeme (jako parametr qsub nebo ve skriptu) -t lower-upper:interval, je možno ve vlastním skriptu použít proměnnou $SGE_TASK_ID. Takováto úloha je potom spuštěna jednou pro každou možnou hodnotu $SGE_TASK_ID a tato hodnota je dosazena do této proměnné. V případě že je to možné doporučuji vždy rozbít úlohu na měnší části a pustit ji touto metodou, umožní to využít všechny dostupné výpočetní prostředky a výsledek bude rychleji hotov.

#!/bin/sh
echo "Task id is $SGE_TASK_ID"
if [ -e $HOME/JOBARRAY/data$SGE_TASK_ID.in ]; then
  # zpracuj data v souboru $HOME/JOBARRAY/data$SGE_TASK_ID.in
fi

Pozastavení úlohy

Pokud potřebujete pozastavit bežící nebo čekající úlohu (tak abu nebyla zaslána k provedení do žádné fronty) je možno použít příkaz qalter -h u JOB_ID například pozastavit úlohu (job) s id 1300 pro procesy (tasks) 100-200 lze s qalter -h u 1300.100-200. Znovuspuštění úlohy se provede použitím parametru -h U. Pro náš příklad: qalter -h U 1300.100-200. Více viz. man qalter

Sun Grid Engine a MPI (MPICH)

Pro zadávání úloh pro MPI (OpenMPI) je nutno použít PE (Parallell Environment) openmpi. Ukázková úloha je v /usr/local/share/SGE/mpi/mpi_cpi.sh. Je možno ji přímo spustit pomocí qsub ./mpi_cpi.sh po skopírování skriptu a binárky cpi do vlastního adresáře a úpravě cesty ve skriptu na tento adresář. Uvnitř skriptu je potřebné nastavení s komentáři. Nejdůležitějsí je volba -pe openmpi MIN-MAX, kterou nastavíte minimální a maximální počet procesorů (uzlů), které chcete využít. Počítače, kde bude vlastní výpočet proveden se vyberou automaticky.


Zpět

Your IPv4 address: 54.162.250.227
Switch to IPv6 connection

DNSSEC [dnssec]