Changes between Version 3 and Version 4 of ColasPBS
- Timestamp:
- Dec 13, 2010 6:13:32 PM (12 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
ColasPBS
v3 v4 29 29 La infraestructura del ''Grupo de Meteorología de Santander'' (GMS) es la siguiente (diciembre 2010). 30 30 31 '''NOTA IMPORTANTE:''' la ejecución de jobs se hace sólo desde la máquina llamada ''mar'' 31 '''NOTA IMPORTANTE:''' la ejecución de jobs se hace sólo desde la máquina llamada ''mar'' ({{{ssh mar}}}) 32 32 33 33 * '''nodos''': … … 40 40 * {{{/oceano/gmeteo/DATA}}}: almacenamiento de todos los datos (observaciones, GCMs, RCMs, ...) 41 41 * {{{/oceano/gmeteo/WORK}}}: directorio de trabajo 42 * {{{/software}}}: directorio con todas las aplicaciones 42 * {{{/software}}}: directorio con todas las aplicaciones. Por ejemplo: 43 * /software/Matlab_R2009a/bin/matlab 44 * /software/CentOS/5.2/R/2.11.1/bin/R 45 * meditendo {{{source /software/ScientificLinux/4.6/etc/bashrc}}} se exporta en memoria el acceso a muchas aplicaciones instaladas en {{{/software}}} 43 46 44 47 * '''colas''' (no accesibles para tod@s): … … 55 58 Las peticiones se hacen por un conjunto de ''flags''. El envio del job al gestor de la cola se puede hacer añadiendo todas las directrices en la línea de comandos de la aplicación, o por medio de una script (archivo de texto con instrucciones de sistema). En según que circumstancias nos va interesar hacerlo de una manera u otra, pero las dos son equivalentes. La estructura tipo de un script (llamado por ejemplo {{{job.pbs}}}) de colas tiene la siguiente estructura (se añaden todas las opciones a modo de ejemplo): 56 59 57 {{{#!/bin/bash 60 {{{ 61 #!/bin/bash 58 62 ### Job name 59 63 #PBS -N [jobname] … … 69 73 #PBS -o [rutaArchivo] 70 74 ### Dependecy 71 #PBS -W afterany:[jobid]75 #PBS -W depend=afterany:[jobid] 72 76 ### Number of nodes and processors per node 73 77 #PBS -l nodes=[N]:ppn=[M] 74 78 75 cd ${PBS_O_WORKDIR 76 77 [aplicacion]}}}} 79 cd ${PBS_O_WORKDIR} 80 81 [aplicacion] 82 }}}} 78 83 79 84 En esta plantilla se muestra la sintaxis de los siguientes requerimientos/especificaciones: … … 85 90 * ''-e [rutaArchivo]:'' ruta del archivo en donde se quiere almacenar la salida estandard del error del job (si no se indica se construye en el directorio donde está el script el archivo ${PBS_JOBNAME}.e${PBS_JOBID}) 86 91 * ''-o [rutaArchivo]:'' ruta del archivo en donde se quiere almacenar la salida estandard del job (si no se indica se construye en el directorio donde está el script el archivo ${PBS_JOBNAME}.o${PBS_JOBID}) 87 * ''-W afterany:[jobid]:'' el job se mandará a la cola cuando otro job anterior (el número [jobid]) termine su ejecución (no importa como termine)92 * ''-W depend=afterany:[jobid]:'' el job se mandará a la cola cuando otro job anterior (el número [jobid]) termine su ejecución (no importa como termine) 88 93 * ''-l nodes=[N]:ppn:[M] :'' número de nodos ({{{[N]}}}) y número de cores a coger de cada nodo ({{{[M]}}}), al cual se quiere mandar el job 89 94 90 95 El job se mandaría a la cola con la instrucción: 91 {{{qsub job.pbs}}} 96 {{{ 97 qsub job.pbs 98 }}} 92 99 93 100 o bien por la línea de comandos en una línea como sigue: 94 {{{qsub -N [jobname] -l walltime=[HH]:[MM]:[SS] -q [queueNAME] -M [emailCOUNT] -e [rutaArchivo] -o [rutaArchivo] -W afterany:[jobid] -l nodes=[N]:ppn=[M] [aplicacion] 95 }}} 101 {{{ 102 qsub -N [jobname] -l walltime=[HH]:[MM]:[SS] -q [queueNAME] -M [emailCOUNT] -e [rutaArchivo] -o [rutaArchivo] -W afterany:[jobid] -l nodes=[N]:ppn=[M] [aplicacion] 103 }}} 104 105 Para editar un archivo de colas se puede utilizar los programas: nano, vi, vim,... 96 106 97 107 Todos los jobs tienen un número que los identifica que se llama [jobid]. En el clúster del GMS tiene el siguiente formato: [jobid].ce01.macc.unican.es. Cada job tiene associado los siguientes valores PBS: … … 113 123 * ''-u [usuario]'' muestra todos los jobs de [usuario] 114 124 Por lo general mestra en lista los trabajos que concidan con los criterios escogidos con la siguiente estructura: 115 {{{[jobid] [usuario] [queue] [jobname] [SessID] [NDS] [TSK] [Req' Memory] [Req' time] [S] [Time] 125 {{{ 126 [jobid] [usuario] [queue] [jobname] [SessID] [NDS] [TSK] [Req' Memory] [Req' time] [S] [Time] 116 127 }}} 117 128 Los estados [S] que puede tener un job en la cola son: … … 127 138 128 139 === Wall time insuficiente === 129 Tomamos un job sencillo de ejemplo escrito en un fichero llamado {{{prueba.pbs}}}. Este job deja una espera de 60 segundos. 130 {{{#!/bin/bash 140 Tomamos un job sencillo de ejemplo escrito en un fichero llamado {{{prueba.pbs}}}. Este job lanza el script {{{espera.bash}}} el cual se espera los segundos dados por el primer argumento y escribe por pantalla el mensaje "Hola mundo". 141 {{{ 142 #!/bin/bash 131 143 ### Job name 132 144 #PBS -N prueba … … 143 155 rm ${PBS_JOBNAME}.o* 144 156 145 sleep 60}}} 157 ./espera.bash 60 158 }}} 146 159 147 160 Lanzando el job obtendríamos: 148 {{{[lluis@mar CursilloPBS]$ qsub prueba.pbs 161 {{{ 162 [lluis@mar CursilloPBS]$ qsub prueba.pbs 149 163 307065.ce01.macc.unican.es 150 164 [lluis@mar CursilloPBS]$ qstat | grep prueba … … 153 167 307065.ce01.macc.uni lluis grid prueba 23057 1 -- -- 48:00 R -- wn001 154 168 [lluis@mar CursilloPBS]$ ls 155 prueba.pbs}}} 169 prueba.pbs 170 }}} 156 171 Pasados los 60 segundos... 157 {{{[lluis@mar CursilloPBS]$ ls 158 prueba.e307065 prueba.o307065 prueba.pbs}}} 172 {{{ 173 [lluis@mar CursilloPBS]$ ls 174 prueba.e307065 prueba.o307065 prueba.pbs 175 }}} 159 176 Al mirar el contenido de los ficheros: 160 {{{[lluis@mar CursilloPBS]$ cat prueba.o307065 177 {{{ 178 [lluis@mar CursilloPBS]$ cat prueba.o307065 161 179 [lluis@mar CursilloPBS]$ cat prueba.e307065 162 =>> PBS: job killed: walltime 43 exceeded limit 10}}} 180 =>> PBS: job killed: walltime 43 exceeded limit 10 181 }}} 163 182 El tiempo dado al job es insuficiente. 164 183 165 184 === Mandar el job a un nodo en concreto === 166 185 Si se quiere mandar el job a un nodo en concreto se substituye la línea {{{PBS -l nodes=1:ppn=1}}} por: 167 {{{#PBS -l nodes=wn[nnn].macc.unican.es 186 {{{ 187 #PBS -l nodes=wn[nnn].macc.unican.es 168 188 }}} 169 189 Donde [nnn] es el nodo requerido … … 171 191 === Ocupar toda la memória de un nodo con un único job === 172 192 Para ocupar toda la memória de un nodo con un único job, bastará con pedit todos los cores de un nodo de la cola. Así, si queremos toda la memória de los nodos de la cola {{{dinamica}}}, requeriríamos: 173 {{{#PBS -l nodes=1:ppn=8 193 {{{ 194 #PBS -l nodes=1:ppn=8 174 195 }}} 175 196 176 197 === Lanzar un job interactivo === 177 198 A la hora de hacer pruebas es muy útil abrir una sessión interactiva en un nodo del clúster. Esto se hace mandando un job interactivo. La sessión que se habra durará todo el tiempo que se quiera hasta que no se le mande la instrucción de salida {{{exit}}}. La sintaxis es: 178 {{{qsub -I -l nodes=1 -q [queue] 199 {{{ 200 qsub -I -l nodes=1 -q [queue] 179 201 }}} 180 202 '''NOTA:''' A la hora de lanzar este tipo de jobs se tiene que ser muy consciente de que se está ocupando un nodo del clúster. Tendría que utilizarse sólo para realizar pruebas que no sean muy largas. Para lanzar jobs muy largos mejor prepararse una script de shell. 203 204 === Lanzar un job con dependencias === 205 En este caso, no se lanzará una script {{{listar.bash}}} hasta que no termine la espera de 60 segundos (una vez corregido el walltime) 206 {{{ 207 [lluis@mar CursilloPBS]$ date 208 Mon Dec 13 17:53:57 CET 2010 209 [lluis@mar CursilloPBS]$ qsub prueba.pbs 210 307079.ce01.macc.unican.es 211 [lluis@mar CursilloPBS]$ qsub -N listado -q grid -W depend=afterany:307079 -l nodes=1 ./listar.bash 212 307080.ce01.macc.unican.es 213 }}} 214 La script 'listar.bash' no se ejecutará hasta que termine 'prueba.pbs' con pid 307079. Se sigue: 215 {{{ 216 [lluis@mar CursilloPBS]$ ls 217 espera.bash listar.bash prueba.pbs 218 [lluis@mar CursilloPBS]$ date 219 Mon Dec 13 17:54:30 CET 2010 220 [lluis@mar CursilloPBS]$ ls 221 espera.bash listar.bash prueba.pbs 222 [lluis@mar CursilloPBS]$ date 223 Mon Dec 13 17:54:43 CET 2010 224 [lluis@mar CursilloPBS]$ ls 225 espera.bash listar.bash prueba.pbs 226 [lluis@mar CursilloPBS]$ date 227 Mon Dec 13 17:54:54 CET 2010 228 [lluis@mar CursilloPBS]$ ls 229 espera.bash listar.bash prueba.pbs 230 [lluis@mar CursilloPBS]$ date 231 Mon Dec 13 17:55:02 CET 2010 232 [lluis@mar CursilloPBS]$ ls 233 espera.bash prueba.pbs listar.bash prueba.e307079 prueba.o307079 234 [lluis@mar CursilloPBS]$ date 235 Mon Dec 13 17:55:12 CET 2010 236 [lluis@mar CursilloPBS]$ ls 237 espera.bash listado.e307080 listado.o307080 listar.bash prueba.e307079 prueba.o307079 prueba.pbs 238 }}} 239 240 == Monitorización del clúster == 241 Hay dos maneras de observar la activada del clúster. Por línea de comandos se tiene la instrucción {{{pbs_nodes}}} 242 Por entorno web está instalado el [http://www.meteo.unican.es/ganglia/ ganglia]. En este entorno se muestra toda la actividad de los nodos (consumo de cpu, memoria, disocs duros, etc...) con una interfaz gráfica. 243 244 == Recomendaciones == 245 * Cualquier trabajo que implique manejo de datos, archivos, etc... se tiene que hacer mediante un job de colas. 246 * '''mar SOLO sirve para mandar trabajos a la cola''' 247 * No utilizar jobs interactivos para tareas muy largas. Cuanto mas larga mas peligro que se termine por algún problema del nodo 248 * Realizar jobs con ''checking points'', que en caso de caída del nodo no se tenga que volver a empezar desdel principio 249 * Ajustar el ''walltime'' de los trabajos 250 * Hay una wiki de las colas para el [http://www.meteo.unican.es/wiki/waimet/ColaPbs envia_matlab.sh]