Informace Fórum Stav sítě ČVUT IDS Hledání Přihlášení Mapa stránek

Portable Batch System (PBS)

poslední aktualizace: říjen 2012

V několika následujících řádcích je příklad jednoduchého scriptu popis.cmd, sloužícího ke spuštění úlohy, kterou zavedeme příkazem qsub.

------------------------------
#!/bin/bash
#PBS -S /bin/bash
#PBS -N myjob.pbs
#PBS -j oe
#PBS -M pepa.novak@cvut.cz
#PBS -m bae
#PBS -l walltime=01:00:00
#PBS -l select=1:ncpus=32:host=altix
#PBS -l place=pack:shared
echo "Starting run at: `date`"
/home/pepa/muj_program
echo "Job finished at: `date`"
------------------------------

#PBS -S /bin/bashUrčuje typ shellu pro zpracování úlohy.
Pro zpracování této úlohy bude použit shell bash.
#PBS -N myjob.pbs Jméno úlohy je "myjob.pbs". Pokud vynecháme tento parametr, úloha se implicitně pojmenuje podle názvu scriptu.
#PBS -j oe Standardní výstup a chybový výstup bude sloučen do jednoho souboru v pracovním adresáři. Ke jménu úlohy se připojí ".onnn", kde "nnn" je pořadové číslo úlohy v systému PBS.
#PBS -M pepa.novak@cvut.cz Určuje adresu uživatele, kam budou zaslány případné zprávy. V tomto případě bude zpráva zaslána na adresu pepa.novak@cvut.cz .
#PBS -m bae Zpráva bude zaslána při startu úlohy (b-begin), při přerušení úlohy (a-abort) a při ukončení úlohy (e-end).
#PBS -l Pomocí klíčových slov zde můžeme nastavit požadavky na počet procesorů "ncpus=2", velikost fyzické paměti "mem=1gb" a maximální čas pro běh úlohy "walltime=1:00:00".
Dále zde specifikujete na kterém počítači má být úloha spuštěna - parametr host. Možné hodnoty jsou: altix, rex, hal, fox, ferret5, ferret6.
Pokud uvádíme více parametrů na jednu řádku, musí být odděleny čárkou.

Lze uvést více údajů oddělených mezerou na jeden řádek, který začíná #PBS .
Např.: #PBS -S /bin/csh -N pokus -m a

Hlavní příkazy pro práci s PBS:

qsub "popis_ulohy": zadá úlohu do fronty, např.: qsub popis.cmd Jeli v popisu úlohy chyba, úloha se nezařadí a PBS vypíše druh chyby.
qstat [-a | -s]: ukáže stav jednotlivých úloh ve frontě uživateli, který je zadal, v našem případě pouze pro uživatele "pepa". Parametr -s vypíše o úloze více informací.
qdel "nnn": smaže úlohu z fronty, eventuelně jí (pokud již běží) ukončí. Číslo "nnn" je pořadové číslo úlohy v systému PBS.

Existují ještě další příkazy, které umožňují měnit status úlohy.

Podrobnější informace o jednotlivých příkazech systému PBS může uživatel získat pomocí příkazu man (např.: man qdel).

Informace o frontách:

qstat -q: ukáže časové omezení jednotlivých front a počet úloh ve frontách.
qstat -Q: ukáže počet úloh ve frontách.
qmgr: spustí qmanager.
print server: vytiskne popis k jednotlivým frontám.
quit: opustí qmanager.

Interaktivní spouštění úloh

Pro ladění úloh je výhodné si nechat vypisovat výsledky na obrazovku a tak opticky kontrolovat výpis programu nebo hodnoty některých proměnných, o kterých máme představu, jakých hodnot mají nabývat. Pro takové spouštění použijeme funkci qsub s parametrem -I. Úlohu tedy spustíme následovně: qsub -I pbs_skript. Tím jsme přesměrováni na shell, ve kterém ale musíme ručně zadat veškeré uživatelské příkazy uvedené ve skriptu. Výsledky si můžeme nechat vypisovat na obrazovku a program můžeme ukončit standardně pomocí CTRL-C a PBS shell ukončíme příkazem exit(CTRL-D). Interaktivní úloha nám poběží samozřejmě i mimo PBS, ale může dojít ke kolizi s úlohami spouštěných pomocí PBS a k problémům s během počítače kvůli špatně využitým zdrojům. Naše úloha se objeví i ve výpisu fronty úloh pomocí qstat, nebo podrobněji qstat -f číslo_úlohy.

Pokud bychom potřebovali ladit v grafickém režimu nějaké aplikace, použijeme taktéž qsub. Máme například ladit na 4 jádrech po dobu 30 min na počítači rex, zadáme:

qsub -I -l select=1:ncpus=4:host=rex -l walltime=00:30:00 -v DISPLAY

Kontrolu funkčnosti grafického výstupu si provedeme např. spuštěním xterm, xclock nebo xeyes a CTRL-C. Pak si nastavíme prostředí exportem potřebných proměnných a spustíme si aplikaci.

Ukázkový PBS skript využívající MPI

Skript spouští 8 vláken na počítači altix, zdrojový kód v C++ je nejprve preložen kompilátorem Intel. Dále se používá proprietární knihovna MPI, a to SGI mpt. (viz module avail)

#!/bin/bash
#PBS -S /bin/bash
#PBS -M pospisil@vc.cvut.cz
#PBS -j oe
#PBS -N run_altix
#PBS -m bae
#PBS -l walltime=01:00:00
#PBS -l select=1:ncpus=8:host=altix
#PBS -l place=pack:shared
echo "Pocitano na pocitaci `uname -a`"
echo "Pracovni adresar `echo $PBS_O_WORKDIR`"
echo "Uloha spustena z pocitace `echo $PBS_O_HOST`"
cd $PBS_O_WORKDIR
. /usr/share/modules/init/bash
module load icc-11-1
module load mpt
icpc -o PI PI.cpp -lmpi
echo "Starting run at: `date`"
mpirun -np 8 dplace -s1 -c0-7 ./PI
echo "Job finished at: `date`"

Ukázkový PBS skript využívající OpenMP

Skript spouští 8 vláken na počítači altix, zdrojový kód ve Fortranu je nejprve přeložen kompilátorem Intel verze 11.1.

#!/bin/bash
#PBS -S /bin/bash
#PBS -M pospisil@vc.cvut.cz
#PBS -j oe
#PBS -N run
#PBS -m bae
#PBS -l walltime=01:00:00
#PBS -l select=1:ncpus=8:host=altix
#PBS -l place=pack:shared
echo "Pocitano na pocitaci `uname -a`"
echo "Pracovni adresar `echo $PBS_O_WORKDIR`"
echo "Uloha spustena z pocitace `echo $PBS_O_HOST`"
cd $PBS_O_WORKDIR
. /etc/profile.d/modules.sh
# Compile and execute a program:
module load ifort-11-1
echo "Starting run at: `date`"
export KMP_AFFINITY=disabled
export OMP_NUM_THREADS=8
ifort -c -O3 -openmp main.cpp
ifort -o main.exe main.o -openmp
dplace -x2 -c0-7 main.exe
echo "Job finished at: `date`"

Spouštění úloh