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
fiexit 0