Clúster Quickstart

RDlab@lsi.upc.edu
Febrer 2015

català Benvinguts a LSI.

El següent manual té com a objectiu servir d'introducció a l'ús del Clúster de Computació del Departament de Llenguatges i Sistemes Informàtics (LSI) de la Universitat Politècnica de Catalunya (UPC), gestionat pel Laboratori de Recerca i Desenvolupament (RDlab).

Introducció

Quan parlem de clústers en l'àmbit de la computació ens referim al conjunt de maquinari i programari que aglutina grups d'ordinadors que, units mitjançant xarxes d'alta velocitat, treballen de manera conjunta en la resolució de problemes.

El clúster del departament d'LSI de la Universitat Politècnica de Catalunya es presenta com una potent eina de computació, mitjançant el seu elevat nombre de processadors, memòria i el seu extens espai de disc. Els nodes d'execució, s'agrupen en grups, anomenats cues, que recullen els treballs dels usuaris i gestionen la seva assignació.

Indicacions

És necessari tenir en compte alguns paràmetres per defecte a l'hora d'enviar treballs a les cues del clúster.

El clúster es divideix en 4 cues d'execució. Cada cua ve determinada per un temps màxim d'execució dels processos que s'hi executen

Short Cua dedicada a treballs de durada d'un dia (24h) com a màxim.
Cua per defecte si no se n'especifica una altra.
Medium Cua dedicada a treballs de durada d'una setmana com a màxim.
Long Cua dedicada a treballs que requereixen una durada il·limitada.

Si no s'especifica la durada del treball, aquest anirà a la cua Short. Si un treball excedeix el temps màxim que permet la cua, aquest serà finalitzat automàticament.

IMPORTANT: S'aconsella especificar la durada del treball (qsub -l h_rt=hores:minuts:segons) per evitar que el sistema n'aturi l'execució prematurament.

Els usuaris també tenen disponible la cua Test que serveix per executar proves de concepte de manera immediata. Aquesta cua té els nodes menys potents, i per tant, només s'ha de fer servir per comprovar la correctesa del jobs, i no per a execucions.

La memòria màxima per defecte que pot usar el treball és de 2 Gigabytes. Aquest valor és modificable per l'usuari.

El nombre màxim de processos en execució simultània ve determinat per la quantitat d'slots i la memòria, que varien segons el tipus d'usuari. En cas de dubte, contacti amb l'RDlab.

La configuració per defecte del clúster fa ús de la propietat core binding. Aquesta propietat fixa ("bind") cada treball a un nucli del processador. Això garantitza que en cap moment el treball serà migrat a un altre nucli o processador, estalviant així el cost del canvi de context. Si es tracta d'un treball paral·lel, el core binding el fixarà a tants processadors com s'hagin reservat, amb les mateixes garanties.

Finalment, la configuració del clúster defineix que a cada treball li correspon exactament un nucli de processador, el que garanteix la exclusivitat d'ús del processador per part del procés.

Connexió al clúster de computació en mode text

Per a connectar-nos en mode text (terminal o línia de comandes) en sistemes Unix necessitarem un client de Secure Shell (SSH) instal·lat.
Des del terminal, executarem la següent comanda on <username> és el nom d'usuari del departament d'LSI:

ssh <username>@logincluster.lsi.upc.edu

El sistema ens demanarà la nostra contrasenya d'usuari, i un cop introduïda, ja serem dins del sistema.

Per entorns Windows, hem de disposar d'un client SSH com Putty o altres:
http://en.wikipedia.org/wiki/Comparison_of_SSH_clients

Connexió al clúster de computació en mode gràfic

En cas de voler fer servir un entorn gràfic en un sistema Unix i voler redireccionar-lo podem fer servir el flag -X:

ssh -X <username>@logincluster.lsi.upc.edu

O bé executant la següent comanda en el nostre ordinador:

xhost +logincluster.lsi.upc.edu

Llavors, un cop oberta la connexió remota al clúster, executem:

setenv DISPLAY <la_nostra_ip>

En sistemes Windows, si volem suport visual, cal redireccionar servidor d'X mitjançant un programa com Xwin32 o alternatives similars.

Configuració de l'entorn d'usuari (path)

Certes aplicacions de Open Grid - el gestor de cues de treball - són dependents de l'arquitectura i requereixen redefinir el path del sistema. Per fer-ho, modificarem el fitxer .tcshrc situat al nostre home modificant la variable PATH:

set ARCH=`/usr/local/sge/util/arch`
set path=( /usr/local/sge/bin/${ARCH} $path)

Hem de tenir en compte que si tenim alguna menció explícita als executables d'un tipus concret, haurem d'eliminar l'entrada del path

setenv PATH /usr/local/sge/bin/lx24-x86

Per a fer efectiu el canvi, cal tancar la sessió i tornar a logar-se en el sistema.

Enviar treball en batch

Generalment es poden enviar a les cues tots els treballs que puguin ser executats manualment des de la línia de comandes, sempre i quan no requereixin intervenció interactiva. Farem servir el següent script, que s'executa durant 20 segons, a mode d'exemple:

simple.sh

You can find the following job in the file /sge-root/examples/jobs/simple.sh.
#!/bin/sh
#
#
# (c) 2004 Sun Microsystems, Inc. Use is subject to license terms.
# This is a simple example of a SGE batch script
# request Bourne shell as shell for job
#$ -S /bin/sh
#
# print date and time
date
# Sleep for 20 seconds
sleep 20
# print date and time again
date

Per a poder executar l'script cal canviar el permís perquè sigui un executable (755 o només tenir permís +x)

chmod +x simple.sh

Enviant el treball a la cua: qsub

Enviem el treball a la cua mitjançant la comanda:

qsub simple.sh

Si el treball ha estat enviat correctament, veurem el següent per pantalla:

your job 1 (“simple.sh”)
has been submitted

Alguns flags importants

La crida qsub, així com el propi cos de l'script, permeten especificar flags (propietats) que es tindran en compte a l'hora d'executar el treball. En cas de voler especificar-les en fer la crida, les afegirem com a parámetres de la crida. Per exemple:

qsub -m bea -o output.txt simple.sh

Altrament, si els volem especificar, de forma permanent, ho farem afegint-los en el cos de script del nostre treball, de la següent manera:

#$ -m bea
#$ -o output.txt

Alguns dels flags més importants són:

-e : Especifica on es deixarà el fitxer amb la sortida en cas d'error.

qsub -e error.txt simple.sh

-l: Permet indicar requisits especials pel treball (durada, memòria, etc.)
Per especificar la durada diferent a la definició per defecte:

qsub -l h_rt=hores:minuts:segons

Si executem un treball que sabem que durarà menys que el temps per defecte, especificar-ho en el moment de la crida pot fer que la prioritat del treball augmenti respecte d'altres amb el valor per defecte; és a dir, que sigui executat abans que els altres treballs en espera amb el valor per defecte.

Per especificar la quantitat de memòria diferent a la definició per defecte (actualment 4Gb.):

qsub -l h_vmem=1G

NOTA: Si coneixes la quantitat màxima de memòria que consumirà el treball, es recomana especificar-ho en el moment de la crida per tal d'agilitzar l'assignació de treballs als nodes.

-m : Permet especificar quan volem rebre un correu:  'n'(none), 'a' (aborted), 'b' (begin),'e' (end) , 's' (supended).

qsub -m bea simple.sh

Per a fer servir aquest flag cal especificar l'adreça on volem rebre el mail amb el flag -M:

qsub -M <email-address>

-o : Especifica on es deixarà la sortida de l'script

qsub -o output.txt simple.sh

-q : Indica la cua d'execució.
Enviar el treball "simple.sh" a la cua short:

qsub -q short simple.sh

També permet enviar el treball a un o varis nodes concrets.

qsub -q short@node112,short@node113 simple.sh

Indica que volem que el treball s'executi en la cua short en un dels dos nodes indicats: node112 o node113.

-S : Especifica el shell intèrpret a fer servir en l'execució.

qsub -S /bin/sh simple.sh

Per a més informació:

man qsub

Consulta l'estat del treball en la cua: qstat

Quan enviem un treball a una de les cues de nodes, és possible que aquest no s'executi immediatament. El planificador analitza l'estat del sistema per tal d'executar-lo en les millors condicions. Podem consultar el seu estat mitjançant la següent comanda:

qstat

El programa ens retorna la següent informació:

job-ID prior name user state submit/start at queue slots ja-task-ID
------------------------------------- ------------------------------------------------------
000001 0.55000 simple.sh gabriel qw 10/14/2010 11:16:56 short@node112 1

Podem veure només els nostres treballs amb el flag -u i indicant el nostre username:

qstat -u <username>

Podem obtenir informació extra d'un treball amb el flag -j i indicant el número de treball:

qstat -j <#job>

Obtindríem una sortida similar

qstat -j 000001
==============================================================
job_number:000001
exec_file:job_scripts/000001
submission_time:Fri Oct 15 13:42:05 2010
owner:gabriel
uid:64
group:staff
gid:50
sge_o_home:/home/usuarios/gabriel
sge_o_log_name:gabriel
sge_o_path:/usr/local/sge/bin/lx24-amd64:/usr/local/bin:/usr/bin:/bin
sge_o_shell:/bin/tcsh
sge_o_workdir:/home/usuarios/gabriel/prueba
sge_o_host:loginclúster2
account:sge
hard resource_list:h_rt=604800,h_vmem=4G
mail_list:gabriel@loginclúster2
notify:FALSE
job_name:simple.sh
jobshare:0
shell_list:NONE:/bin/sh
env_list:
script_file:simple.sh
usage 1:cpu=00:00:00, mem=0.00000 GBs, io=0.00000, vmem=N/A, maxvmem=N/A
scheduling info:queue instance "short@node112" dropped because it is disabled
queue instance "short@node113" dropped because it is disabled
queue instance "short@node114" dropped because it is disabled

A més, si el treball no s'està executant i roman a l'espera, addicionalment informa del motiu pel qual encara és a la cua. Si qstat no mostra cap sortida, vol dir que no hi ha treballs en espera ni en execució al sistema, el que pot voler dir que la execució del nostre treball ha finalitzat.

Eliminar el treball de la cua: qdel

Si volem eliminar un treball que hem enviat a una de les cues, ho podem fer mitjançant la següent comanda:

qdel <#job>
gabriel has deleted job 000001

NOTA: Per obtenir l'identificador del treball (#job) podem executar la comanda qstat

Suspendre i reiniciar un treball: qmod

Si volem deixar la execució d'un treball en suspensió fins que decidim reiniciar-ne l'execució, executarem:

qmod -sj <#job>

Quan el volguem reiniciar, executarem

qmod -usj <#job>

Arxius de sortida del procés executat

Com que els treballs que enviem no s'executen de forma interactiva la sortida estàndard i la sortida d'error es redireccionen cap a fitxers.Un cop el treball es troba en execució, per defecte ens deixa la sortida estàndard i la sortida d'error en llurs fitxers al nostre home d'usuari, identificats per:

<nom_del_treball>.o<id_del_treball>
<nom_del_treball>.e<id_del_treball>

simple.sh.e000001  simple.sh.o000001

Tanmateix, si volem redirigir una (o ambdues) sortida/es a alguna altra ubicació, ho podem fer, com ja hem vist, mitjançant els flags següents:

-e : error
-o : output

Com debugar un treball

Si volem saber si el nostre treball ha acabat correctament, mirarem la informació d'accounting del treball i ens fixarem en els camps exit status i failed. Per a obtenir la informació d'accounting d'un treball cal executar la següent comanda:

qacct -g <job_id>

==============================================================
qnameshort
hostnamenode119
grouplsi
owner fgalindo
project NONE
department sistemas
jobnamesimple.sh
jobnumber3221295
taskidundefined
accountsge
priority0
qsub_timeFri Mar 14 12:13:07 2014
start_timeFri Mar 14 12:13:22 2014
end_time Fri Mar 14 12:13:22 2014
granted_peNONE
slots1
failed0
exit_status1
ru_wallclock0
ru_utime0.001
ru_stime0.008
ru_maxrss4244
ru_ixrss0
ru_ismrss0
ru_idrss0
ru_isrss0
ru_minflt1860
ru_majflt0
ru_nswap0
ru_inblock0
ru_oublock16
ru_msgsnd 0
ru_msgrcv 0
ru_nsignals0
ru_nvcsw15
ru_nivcsw1
cpu0.009
mem0.000
io0.000
iow0.000
maxvmem0.000
aridundefined

El camp failed indica el motiu pel qual un treball no ha pogut ser executat. D'altra banda, el camp exit_status indica el codi de sortida del treball, seguint la convenció normal d'un shell.

En cas d'error, el sistema suma 128 al codi de sortida. Per exemple, un treball mort amb un SIGKILL (codi 9), mostraria el codi d'error 137.

Si demanem que el sistema ens envii un correu quan el treball ha acabat o ha estat abortat, també veurem informació rellevant:

Job 3240728 (simple.sh) Aborted
Exit Status      = 137
Signal           = KILL
User             = fgalindo
Queue            = short@node112
Host             = node112
Start Time       = 03/19/2014 12:32:33
End Time         = 03/19/2014 12:32:35
CPU              = 00:00:00
Max vmem         = 14.855M
failed assumedly after job because:
job 3240728.1 died through signal KILL (9)
			

Qmon

Qmon és un programa per entorn gràfic que ofereix una finestra de diàleg per a enviar treballs a les cues d'execució i consultar aspectes del sistema. Podem invocar Qmon amb la següent comanda:

qmon

Després de la pantalla de presentació, accedirem a la finestra de diàleg que ens permetrà escollir una de les opcions del programa.

qmon_main

Podem trobar més informació de Qmon a:

Enllaços d'interès

Informació dels nodes i les seves característiques: http://mastercluster1.lsi.upc.edu/info_nodes
Software de monitorització Ganglia: http://mastercluster1.lsi.upc.edu/ganglia