IR A LA VERSIÓN EN CASTELLANO

Introducció

El Servei d’Informàtica (SI) de la Universitat Jaume I (UJI) de Castelló és conscient de la criticitat dels seus productes i serveis per a la producció de la Universitat. Per a no defraudar les expectatives, l'UJI ha de disposar d'una infraestructura TIC corporativa (infoestructura) escalable (i.e., que s'adapte als increments de la demanda) que suport els processos de l'UJI en cicle de producció contínua (24x7x365), per al que és necessari afermar els atributs de la garantia de funcionament RAS de les TIC. Això s'ha convertit en una prioritat per al SI, responent a la demanda dels usuaris i a la criticitat dels processos de producció de l'UJI que les usen. L'estratègia triada pel SI per a aconseguir-ho continua passant per dotar-se de la millor infraestructura TIC possible [a la capacitat econòmica de l'UJI] que assegure la qualitat del servei oferit.

Infraestructura

Maquinari

La facilitat corporativa actual de càlcul científic, adquirida en el marc de diferents ampliacions, està formada per un clúster PBS compost actualment pels següents elements:

Addicionalment es disposa d'un espai d'emmagatzematge en una cabina EMC2 CX3-40c accessible per iSCSI que aporta uns recursos d'emmagatzematge addicional de 3 volums de 2 TB destinats al HOME i directoris d'escratx en els nodes centrals. Es realitza còpia de seguretat del directori *HOME però no dels escratx.

Tots els nodes disposen de targeta de xarxa Ethernet a 1Gb/s i estan connectats a switches a 1Gb/s. En el cas dels nodes n3xx, els switches estan enllaçats entre ells a una velocitat de 10 Gb/s.

Programari

Des del SI s'aposta per l'ús de programari lliure en tots els àmbits i, per això, es tendeix a utilitzar aquest tipus de programari sempre que és possible. Per això, el node central Api i els nodes n1xx i n2xx comptes amb un sistema operatiu CentOS 4 de 64 bits i el següent programari:

En el cas del node central Solvay i els nodes n3xx s'ha instal·lat un sistema operatiu CentOS 6 de 64 bits amb el següent programari:

Des del Servei d’Informàtica (SI) estem oberts a la possibilitat d'instal·lar nou programari sempre que siga de tipus lliure o que les persones o grups interessats aporten el programari, les llicències necessàries i les instruccions d'instal·lació.

Començant a utilitzar el sistema de cues

Concepte

En el clúster de càlcul científic de l'UJI s'utilitza un sistema de cues per a poder organitzar el treball de càlcul en els diferents nodes. Un sistema de cues permet que els usuaris definisquen els treballs que volen realitzar per a aconseguir un càlcul i els envien al sistema. Llavors el sistema revisa tots els treballs pendents, els nodes lliures i els recursos que cada treball requereix per a organitzar l'ordre en el qual s'executaran els diferents treballs de tots els usuaris atenent criteris d'ús compartit, eficiència, recursos sol·licitats, etc.

El sistema de cues que s'utilitza en els nodes centrals està basat en Torque i utilitza el planificador maui, tots dos programes de programari lliure. En l'actualitat, comptem amb dos serveis de gestió de cues independents i no connectats:

Ordres bàsiques

qsub mitrabajo.sh

qsub -q longq mitrabajo.sh

qstat

Job id                    Name             User            Time Use S Queue

5886.solvay             job.17            usuari          68:44:09  R shortq         

5892.solvay             job.21            usuari          68:44:09  R shortq         

5896.solvay             job.23            usuari          68:44:09  Q shortq         

5898.solvay             job.24            usuari          68:43:37  Q shortq       

5948.solvay             job.13            usuari          68:07:40  R qfaq          

qdel 5898

Enviament de treballs

Paràmetres dels treballs

Existeixen diferents paràmetres que condicionen el tipus de nodes i la cua a la qual es enruten automàticament els treballs. Els paràmetres més habituals són el número de cpus, el temps de càlcul i la memòria RAM requerida.

Per a sol·licitar un paràmetre en concret es pot especificar en la línia d'ordres on es mana el treball al sistema de cues mitjançant qsub o dins del propi treball amb un a sintaxi especial.

Els paràmetres s'indiquen així:

Un exemple de treball que requerisca 24 hores de cpu, 2 cores i 4 GBytes de memòria RAM seria així:

qsub -l cput=24:00:00 -l mem=4GB -l ncpus=2 mitrabajo.sh

També es pot incloure al principi del fitxer del treball amb una sintaxi especial:

#PBS -l cput=24:00:00

#PBS -l mem=4GB

#PBS -l ncpus=2

i llançar-ho amb:

qsub mitrabajo.sh

Les cues del sistema

El sistema compta amb diverses cues, que podran ser utilitzades o no pels usuaris en funció de la seua vinculació amb l'UJI o departament. Les cues actualment són les següents:

shortq: treballs de fins a dos cores, amb un màxim de temps d'execució de 72 hores. Cada usuari pot executar fins a 50 treballs simultàniament. Disposa de 480 cores.
longq: treballs de fins a dos cores amb un mínim de 72 hores d'execució. Cada usuari pot executar fins a 20 treballs simultàniament. Disposa de 144 cores.
paralq: treballs d'un  mínim de 4 cores en un únic node. Cada usuari pot executar fins a 6 treballs simultàniament. Disposa de 144 cores compartits amb la cua multiq.
multiq: treballs d'un mínim de 2 nodes. Cada usuari pot executar fins a 2 treballs simultàniament. Disposa de 144 *cores compartits amb la cua paralq.
guestq: treballs d'usuaris convidats (grup guest). Cada usuari pot executar fins a 20 treballs simultàniament. Disposa de 96 cores.
qfaq: treballs d'usuaris del departament qfa. Disposa de 120 cores.

A més existeix una cua de enrutat especial que s'encarrega d'enviar cada treball a la cua corresponent (shortq, longq, paralq o guestq) en funció dels recursos sol·licitats i el tipus d'usuari.

Exemple de treball simple

Ací es pot vore un exemple concret de com llançar un treball amb fitxers d'entrada i eixida. És un treball d'un core, 1 GB de memòria RAM i 24 hores de cpu.

Donat un executable anomenat "prueba.sh" que està en el HOME de solvay.uji.es, dins del directori "prova", amb el següent codi:#!/bin/bash #!/bin/bash

wc -l datos1 > datos2 if [ $? -eq 0 ] ; then echo "Todo ha ido bien" else echo "Revisa la salida de error" fi

i l'arxiu "datos1" amb el següent contingut

Línea 1 Línea 2

Per a enviar el treball al sistema de cues, utilitzarem el script "mitrabajo.sh", amb el següent codi:

#!/bin/bash #PBS -l cput=24:00:00 #PBS -l mem=1GB #PBS -l ncpus=1 ## ID del trabajo ID="$(echo $PBS_JOBID | cut -d . -f 1)" ## Directorio de solvay.uji.es que contiene el programa (script, ejecutable...) y los archivos de entrada MAIN="solvay:prueba" ## Lista de archivos de entrada (separados por espacios en blanco) IN="prueba.sh datos1" ## Lista de archivos de salida (separados por espacios en blanco) OUT="salida datos2" ## Directorio de trabajo en el nodo de ejecucion SCR="/scratch1/$USER/scr-$ID" ## Cambiamos al directorio de trabajo mkdir -p $SCR && cd $SCR if [ $? -ne 0 ] ; then     echo "No he podido cambiar al directorio '${SCR}'"     exit 1 fi ## Copiamos los archivos de entrada for archivo in $IN ; do     scp -p "$MAIN/$archivo" .     if [ $? -ne 0 ] ; then         echo "No se ha podido copiar el archivo de entrada '$archivo'"         exit 1     fi done ## Ejecutar programa ./prueba.sh > salida ## Copiamos archivos de salida for archivo in $OUT ; do     scp -p "$archivo" "$MAIN/$archivo-$ID"     if [ $? -ne 0 ] ; then         echo "No se ha podido copiar el archivo de salida '$archivo'"         exit 1     fi done ## Eliminar directorio de trabajo rm $IN $OUT && cd && rmdir $SCR if [ $? -ne 0 ] ; then     echo "No se ha podido eliminar el directorio de trabajo"     echo     ls -la $SCR     exit 1 fi exit 0

Finalment, ho enviarem al sistema de cues mitjançant la següent ordre:

$ qsub mitrabajo.sh 2544244.solvay.uji.es

Una vegada finalitzada l'execució del treball, comprovarem el contingut dels arxius "mitrabajo.sh.*e2544244" i "mitrabajo.sh.*o2544244". Aquests arxius els genera el sistema de cues.

En els arxius "eixida-2544244" i "datos2-2544244", tindrem el resultat generat per el executable "prueba.sh".

Treballs multicore i multinode

En aquelles ocasions en les quals es desitja obtindre un millor rendiment dels treballs cal aplicar tècniques de càlcul en paral·lel. El sistema de cues permet sol·licitar diversos cores en un node amb el recurs anomenat "ncpus". No obstant això, és difícil trobar nodes amb molts cores lliures o, a vegades, es desitja utilitzar més cores dels quals un node pot tindre i s'ha d'aplicar una tècnica de treball en paral·lel entre diversos nodes.  Per a sol·licitar diversos cores en diferents nodes s'utilitza la següent nomenclatura "nodes=X:ppn=I" on se sol·liciten X nodes amb I cores cada node. Per exemple, per a demanar 2 nodes amb quatre cores cadascun (8 en total) es pot sol·licitar així:

#PBS -l nodes=2:ppn=4

Quan se sol·liciten diversos nodes existeix una variable d'entorn en els nodes assignats anomenada PBS_NODEFILE que indica la ubicació d'un fitxer que conté la informació, per cada línia, d'un core en un node dels assignats. Per exemple, una assignació de dos nodes amb tres cores cadascun podria tindre un fitxer PBS_NODEFILE com el següent, indicant que s'assignen tres cores del node n301 i tres cores del node n302, sent el n301 el node principal on llançar el programa paral·lel (el primer de la llista):

cat  $PBS_NODEFILE

n301

n301

n301

n302

n302

n302

Exemple de treball paral·lel amb MPI

En aquest exemple se sol·liciten 4 nodes amb quatre cores cadascun i s'executa, mitjançant MPI, el programa "hostname"

#!/bin/bash

#PBS -l cput=20:00:00
#PBS -l mem=1GB
#PBS -l ncpus=1
#PBS -l nodes=4:ppn=4

## ID del treball
ID="$(echo $PBS_JOBID | cut -d . -f 1)"

## Arxius d'entrada, d'eixida i temporals
## Servidor central:directori on es troben els arxius a copiar
MAIN="solvay:test_solvay"
## Arxius a copiar en format "arxiu1 arxiu2 arxiu3 .. arxiuN"
IN="prova.sh"
OUT="salida"

## Definicio del directori de scratch
SCR="/scratch1/$USER/scr-$ID"

## Ens possicionem en el directori de SCRATCH
mkdir -p $SCR && cd $SCR
if [ $? -ne 0 ] ; then
    echo "No puc situar-me en el directori de scratch"
    exit 1
fi

## Transferim els arxius d'entrada
for arxiu in $IN ; do
    scp -p $MAIN/$arxiu .
    if [ $? -ne 0 ] ; then
        echo "No he pogut copiar l'arxiu d'entrada '$arxiu'"
        exit 1
    fi
done

## Executar programa

mpiexec -wdir /scratch1/traverj -f $PBS_NODEFILE -n $( cat $PBS_NODEFILE | wc -l ) "hostname" > salida

## Transferim arxius eixida
for arxiu in $OUT ; do
    scp -p $arxiu $MAIN/$arxiu-$ID
    if [ $? -ne 0 ] ; then
        echo "No he pogut copiar l'arxiu d'eixida '$arxiu'"
        exit 1
    fi
done

## Eliminar directori temporal
rm $IN $OUT $TMP && cd && rmdir $SCR
if [ $? -ne 0 ] ; then
    echo "No he pogut eliminar el directori de scratch"
    echo
    ls -la $SCR
    exit 1
fi

exit 0