Tutorial d'ús Solvay

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:

  • Api: node central *biprocesador adquirit en 2006 en la compra LA SEUA/30/06. (HP ProLiant DL360 G5, 2 Intel Xeon 5160 3 *GHz, 14GB RAM, 5x60GB *SATA). Aquest node central serà substituït per solvay en breu espai de temps, encara que en aquests moments convisquen els dos.

  • Solvay: node central biprocesador adquirit en 2011 en la compra LA SEUA/06/11 (Dell R710 amb 2 Intel Xeon E5649 2.53GHz, 48 GB de RAM i 6x300 Gb SAS).

  • n1xx: 27 nodes biprocesador de doble nucli x86_64 adquirits en 2006 en la compra LA SEUA/30/06 (HP ProLiant DL360 G5, 2 Intel Xeon 5160 3 GHz, 14GB RAM, 5x60GB SATA).

  • n2xx: 11 nodes biprocesador amb quàdruple nucli x86_64 adquirit en 2009 en la compra LA SEUA/31/08. (xassís Blade HP c7000 que alberga 11 ProLiant BL460c amb 2 Intel Xeon E5450 a 3 GHz quad core (huit cores en total). Disposen de 32 GB de RAM i un espai d'escratx de 250 GB).

  • n301-n372: 72 nodes biprocesador ultradensos adquirits en 2011 en la compra LA SEUA/06/11 (18 xassís Dell C6100 amb 4 nodes cadascun, que disposen de 2 Intel Xeon E5649 2.*53GHz, 48 GB de RAM i 2x500 Gb SATA).

  • n385-n399: 15 nodes biprocesador en 2 xassís HP SL6500. Nodes ProLiant SL170S G6 amb 2 Intel Xeon X5670 a 2,93 GHz hexa core (12 cores en total per node). Disposen de 26 GB de RAM i un espai d'escratx d'1 TB.

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:

  • adf2009.01

  • charmm33b1

  • crystal98

  • crystal03

  • crystal06

  • crystal09

  • ekopath 4.0.10

  • Gaussian03

  • Gaussian09.b01

  • NAMD2.6

  • openmpi 1.4.2

  • orca 2.6

  • Python 2.5.5

  • R 2.9.0

  • ruby 1.9.1-p431

  • SNNS 4.3

  • spartan 08.131_26_int9e

  • vasp 5.2

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:

  • arpack

  • charmm29b1

  • charmm33b1

  • crystal09

  • FiPy 2.1.1

  • Gaussian03

  • Gaussian09.b01

  • gamess_us-2011R1

  • mpi4py 1.3

  • mpich2 1.4.1p1

  • namd 2.8

  • numpy 1.6.1

  • nwchem 6.0

  • orca 2.9

  • pysparse 1.1.1

  • R 2.14.1

  • ruby 1.9.3-p125

  • scipy 0.10.1

  • trilinos 10.10.1

  • vasp_5.2

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:

  • Api, com a node central, que gestiona els nodes n1xx i n2xx. Aquest clúster s'extingirà a poc a poc i els nodes aniran migrant-se al nou clúster de Solvay.

  • Solvay, com a node central, que gestiona els nodes n3xx i, gradualment, els nodes n1xx i n2xx a mesura que es vagen canviant del clúster antic al nou.

Ordres bàsiques

  • Per a llançar treballs al sistema de cues l'ordre bàsica és qsub.

qsub mitrabajo.sh

  • El sistema de cues identifica el tipus de cua automàticament a partir dels requisits sol·licitats i redirigeix el treball a la cua genèrica adequada. En cas de voler llançar el treball a una de les cues específicament es pot usar el paràmetre -q

qsub -q longq mitrabajo.sh

  • Per a vore l'estat dels treballs en la cua i saber si estan en execució (R, running)  o en espera (Q, queued) s'utilitza l'ordre qstat. A continuació es pot vore un exemple d'informació retornada per qstat

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          

  • Per a eliminar un treball enviat al sistema de cues s'usa l'ordre qdel i l'identificador numèric del treball a cancel·lar

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í:

  • cput = XX:XX:XX     --> Indica el temps de càlcul que necessitem

  • mem = XXMB o XXGB    --> Indica la quantitat de memòria total que requereix el treball

  • ncpus = X  --> Indica quants cores es requereixen en un node per a fer el treball

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