Difference between revisions of "¿Cómo correr trabajos?"

From Supercomputación y Cálculo Científico UIS
Line 1: Line 1:
<div class="thumbnail img-thumbnail">http://wiki.sc3.uis.edu.co/images/a/a8/Logo_sc33.png</div>
+
[[Imagen:Logo_sc33.png | 300 px]]
<p>&nbsp;</p>
+
=MANEJADORES DE TAREAS=
<div class="btn btn-primary"><em class="fa  fa-long-arrow-left">&nbsp;</em> [[Wiki SC3]]</div>
+
Esta sección describe el uso de los manejadores de tareas utilizados en el SC3, los cuales constituyen la herramienta obligatoria para la ejecución de trabajos
<p>&nbsp;</p>
+
==Ejecución de Programas Utilizando Slurm==
<div class="column clearfix">
+
===¿Cómo Ejecutar Trabajos Seriales?===
<div class="col-md-14">
+
Para ejecutar programas seriales pasivos, es decir, que no requieran de alguna entrada de parámetros de forma interactiva, ejecute un comando como el que sigue:
<div class="well well-midnight">
 
<h4>MANEJADORES DE TAREAS</h4>
 
<p class="bs">Esta secci&oacute;n describe el uso de los manejadores de tareas utilizados en el SC3, los cuales constituyen la herramienta obligatoria paa la ejecuci&oacute;n de trabajos</p>
 
<div style="width:50%">__TOC__</div>
 
</div>
 
</div>
 
</div>
 
  
 +
{{Command|srun ./programa &amp;amp;&amp;gt; salida &amp;amp;}}
  
 
+
Este comando ejecuta '''./programa''' en alguno de los nodos del cluster. El argumento <b>&amp;&gt; salida</b> indica que tanto la salida como los errores se almacenan en un archivo de nombre <b>salida</b> que se crear&#225; en el mismo directorio desde donde se ejecut&#243; el programa. Finalmente, el &#250;ltmo caracter <b>&amp;</b> es para liberar la c&#243;nsola desde donde se lanza la ejecuci&#243;n del programa.</p>
 
 
<div class="col-md-14">
 
<div class="panel panel-success-white">
 
<div class="panel-heading">
 
<h3 class="panel-title">Ejecuci&oacute;n de Programas Utilizando Slurm</h3>
 
</div>
 
<div class="panel-body">
 
<div class="col-md-14">
 
<div class="panel panel-neutral-white-border">
 
<div class="panel-heading">
 
<h3 class="panel-title">&iquest;C&oacute;mo Ejecutar Trabajos Seriales?</h3>
 
</div>
 
<div class="panel-body">Para ejecutar programas seriales pasivos, es decir, que no requieran de alguna entrada de par&aacute;metros de forma interactiva, ejecute un comando como el que sigue:  {{Command|srun ./programa &amp;&gt; salida &amp;}}
 
<p>Este comando ejecuta '''./programa''' en alguno de los nodos del cluster. El argumento '''&amp;&gt; salida''' indica que tanto la salida como los errores se almacenan en un archivo de nombre '''salida''' que se crear&aacute; en el mismo directorio desde donde se ejecut&oacute; el programa. Finalmente, el &uacute;ltmo caracter '''&amp;''' es para liberar la c&oacute;nsola desde donde se lanza la ejecuci&oacute;n del programa.</p>
 
 
</div>
 
</div>
 
</div>
 
</div>
Line 38: Line 18:
 
<div class="panel panel-neutral-white-border">
 
<div class="panel panel-neutral-white-border">
 
<div class="panel-heading">
 
<div class="panel-heading">
<h3 class="panel-title">&iquest;C&oacute;mo Ejecutar Trabajos Seriales Usando un Script Shell?</h3>
+
<h3 class="panel-title">&#191;C&#243;mo Ejecutar Trabajos Seriales Usando un Script Shell?</h3>
 
</div>
 
</div>
<div class="panel-body">Para ejecutar programas seriales pasivos utilizando un script shell,  que no requieran de alguna entrada de par&aacute;metros de forma interactiva, ejecute un comando como el que sigue:    {{Command|sbatch ./script.sh }}
+
<div class="panel-body">Para ejecutar programas seriales pasivos utilizando un script shell,  que no requieran de alguna entrada de par&#225;metros de forma interactiva, ejecute un comando como el que sigue:    <span class="fck_mw_template">{{Command|sbatch ./script.sh }}</span>
<p>Este comando ejecuta '''./script.sh''' en alguno de los nodos del cluster. .</p>
+
<p>Este comando ejecuta <b>./script.sh</b> en alguno de los nodos del cluster. .</p>
 
</div>
 
</div>
 
</div>
 
</div>
Line 51: Line 31:
 
<div class="panel panel-neutral-white-border">
 
<div class="panel panel-neutral-white-border">
 
<div class="panel-heading">
 
<div class="panel-heading">
<h3 class="panel-title">&iquest;C&oacute;mo Ejecutar Trabajos Paralelos con OpenMP? (Memoria Compartida)</h3>
+
<h3 class="panel-title">&#191;C&#243;mo Ejecutar Trabajos Paralelos con OpenMP? (Memoria Compartida)</h3>
 
</div>
 
</div>
<div class="panel-body">Para ejecutar programas paralelos con OpenMP  edite un script shell con el siguiente contenido:  {{File|openmp.sh|
+
<div class="panel-body">Para ejecutar programas paralelos con OpenMP  edite un script shell con el siguiente contenido:  <span class="fck_mw_template">{{File|openmp.sh|fckLR<pre>#!/bin/bash
<pre>#!/bin/bash
 
 
#export OMP_NUM_THREADS=`grep processor /proc/cpuinfo | wc -l`
 
#export OMP_NUM_THREADS=`grep processor /proc/cpuinfo | wc -l`
 
export OMP_NUM_THREADS=4
 
export OMP_NUM_THREADS=4
 
./programa_ejecutable &gt; salida
 
./programa_ejecutable &gt; salida
</pre>
+
</pre>fckLR}}</span> La l&#237;nea <b>export OMP_NUM_THREADS=4</b> indica que se utilizar&#225;n 4 hilos de ejecuci&#243;n. El valor de esta variable debe fijarse seg&#250;n las necesidades y caracter&#237;sticas de su programa ejecutable (<b>programa_ejecutable</b>). Recuerde que los nodos de guane tienen capacidad de 16 y 24 hilos. Si quiere utilizar la m&#225;xima capacidad de hilos de un nodo puede descomentar la segunda l&#237;nea simplemente eliminando el caracter # y coloc&#225;ndolo al principio de la tercera l&#237;nea.  Luego, ejecute siguiente comando:    <span class="fck_mw_template">{{Command|sbatch ./script.sh }}</span>
}}  La l&iacute;nea '''export OMP_NUM_THREADS=4''' indica que se utilizar&aacute;n 4 hilos de ejecuci&oacute;n. El valor de esta variable debe fijarse seg&uacute;n las necesidades y caracter&iacute;sticas de su programa ejecutable ('''programa_ejecutable'''). Recuerde que los nodos de guane tienen capacidad de 16 y 24 hilos. Si quiere utilizar la m&aacute;xima capacidad de hilos de un nodo puede descomentar la segunda l&iacute;nea simplemente eliminando el caracter # y coloc&aacute;ndolo al principio de la tercera l&iacute;nea.  Luego, ejecute siguiente comando:    {{Command|sbatch ./script.sh }}
+
<p>Este comando ejecuta el script <b>./openmp.sh</b> en alguno de los nodos del cluster.</p>
<p>Este comando ejecuta el script '''./openmp.sh''' en alguno de los nodos del cluster.</p>
 
 
</div>
 
</div>
 
</div>
 
</div>
Line 69: Line 47:
 
<div class="panel panel-neutral-white-border">
 
<div class="panel panel-neutral-white-border">
 
<div class="panel-heading">
 
<div class="panel-heading">
<h3 class="panel-title">&iquest;C&oacute;mo Ejecutar Trabajos Paralelos con OpenMPI? (Memoria Distribuida)</h3>
+
<h3 class="panel-title">&#191;C&#243;mo Ejecutar Trabajos Paralelos con OpenMPI? (Memoria Distribuida)</h3>
 
</div>
 
</div>
 
<div class="panel-body">Para ejecutar programas paralelos con OpenMPI  edite un script shell con el siguiente contenido:   
 
<div class="panel-body">Para ejecutar programas paralelos con OpenMPI  edite un script shell con el siguiente contenido:   
{{File|mpi.sh|
+
<pre class="_fck_mw_lspace"><span class="fck_mw_template">{{File|mpi.sh|fckLR<pre>
<pre>
 
 
#!/bin/bash
 
#!/bin/bash
 
#SBATCH --partition=all                #Seleccione los nodos para el trabajo de todos el conjunto de nodos de cómputo del cluster
 
#SBATCH --partition=all                #Seleccione los nodos para el trabajo de todos el conjunto de nodos de cómputo del cluster
Line 90: Line 67:
 
#Ejecuta el programa paralelo
 
#Ejecuta el programa paralelo
 
srun  --network=Devname=mlx4_0,Devtype=IB  ./programaMPIejecutable
 
srun  --network=Devname=mlx4_0,Devtype=IB  ./programaMPIejecutable
</pre>}}
+
</pre>}}</span>
 
+
</pre>
Las líneas que comienzan con la palabra reservada '''#SBATCH''' indican las opciones del trabajo paralelo.  La opci&oacute;n '''--partition=all''' indica que los nodos necesrios para ejecutar el trabajo se seleccionar&aacute;n de todo el conjunto de nodos del cluster. Guane cuenta con 5 nodos de 8 cores doble hebra (16 hilos de ejecuci&oacute;n) y el resto de 12 cores doble hebra (24 hilos de ejecuci&oacute;n). As&iacute;, usted puede seleccionar las siguientes particiones:</p>
+
<p>Las líneas que comienzan con la palabra reservada <b>#SBATCH</b> indican las opciones del trabajo paralelo.  La opci&#243;n <b>--partition=all</b> indica que los nodos necesrios para ejecutar el trabajo se seleccionar&#225;n de todo el conjunto de nodos del cluster. Guane cuenta con 5 nodos de 8 cores doble hebra (16 hilos de ejecuci&#243;n) y el resto de 12 cores doble hebra (24 hilos de ejecuci&#243;n). As&#237;, usted puede seleccionar las siguientes particiones:&lt;/p&gt;
 
+
</p>
 
<ul>
 
<ul>
 
<li>manycores16 </li>
 
<li>manycores16 </li>
Line 99: Line 76:
 
<li>all</li>
 
<li>all</li>
 
</ul>
 
</ul>
 +
<p>La opci&#243;n <b>--nodes=2</b>. solicita 2 nodos de c&#243;mputo para la tarea, la opción <b>--ntasks=20</b> indica que se ejecutar&#225;n 20 procesos.
 +
La opci&#243;n <b>--ntasks-per-node=10</b> indica que los 20 procesos se distribuir&#225;n de a 10 procesos por nodo.
 +
</p><p>Despues, el resto de las líneas preparan las variables de ambiente necesarias para el trabajo paralelo. Finalmente, en la &#250;ltima línea,  se especifica el programa ejecutable (<b>programaMPIejecutable</b>). Recuerde que los nodos de guane tienen capacidad de 16 y 24 hilos. 
 +
</p><p>Luego, ejecute siguiente comando:
 +
<span class="fck_mw_template">{{Command|<nowiki>sbatch  ./mpi.sh</nowiki>}}</span>
 +
</p>
 +
<p>Este comando ejecuta el script <b>./mpi.sh</b> en el conjunto de los nodos del cluster.
  
La opci&oacute;n '''--nodes=2'''. solicita 2 nodos de c&oacute;mputo para la tarea, la opción '''--ntasks=20''' indica que se ejecutar&aacute;n 20 procesos.
+
&lt;p&gt;&#160;</p>
La opci&oacute;n '''--ntasks-per-node=10''' indica que los 20 procesos se distribuir&aacute;n de a 10 procesos por nodo.
 
 
 
Despues, el resto de las líneas preparan las variables de ambiente necesarias para el trabajo paralelo. Finalmente, en la &uacute;ltima línea,  se especifica el programa ejecutable ('''programaMPIejecutable'''). Recuerde que los nodos de guane tienen capacidad de 16 y 24 hilos. 
 
 
 
Luego, ejecute siguiente comando:
 
{{Command|<nowiki>sbatch  ./mpi.sh</nowiki>}}
 
 
 
<p>Este comando ejecuta el script '''./mpi.sh''' en el conjunto de los nodos del cluster.
 
 
 
<p>&nbsp;</p>
 
 
</div>
 
</div>
 
</div>
 
</div>
Line 119: Line 93:
 
<div class="panel panel-neutral-white-border">
 
<div class="panel panel-neutral-white-border">
 
<div class="panel-heading">
 
<div class="panel-heading">
<h3 class="panel-title">&iquest;C&oacute;mo Eliminar un Trabajo?</h3>
+
<h3 class="panel-title">&#191;C&#243;mo Eliminar un Trabajo?</h3>
 
</div>
 
</div>
<div class="panel-body">Ejecute el siguiente comando:  {{Command|scancel ID }}
+
<div class="panel-body">Ejecute el siguiente comando:  <span class="fck_mw_template">{{Command|scancel ID }}</span>
<p>Donde '''ID''' es el identificador del trabajo. Este se puede visualizar con el comando squeue.</p>
+
<p>Donde <b>ID</b> es el identificador del trabajo. Este se puede visualizar con el comando squeue.</p>
 
</div>
 
</div>
 
</div>
 
</div>
Line 131: Line 105:
 
<div class="panel panel-neutral-white-border">
 
<div class="panel panel-neutral-white-border">
 
<div class="panel-heading">
 
<div class="panel-heading">
<h3 class="panel-title">&iquest;C&oacute;mo Crear una Sesi&oacute;n Interactiva?</h3>
+
<h3 class="panel-title">&#191;C&#243;mo Crear una Sesi&#243;n Interactiva?</h3>
 
</div>
 
</div>
<div class="panel-body">Ejecute los siguientes comandos:  {{Command|<nowiki>salloc --partition=all --nodes=1 --time=01:00:00  srun --pty bash </nowiki>}}
+
<div class="panel-body">Ejecute los siguientes comandos:  <span class="fck_mw_template">{{Command|<nowiki>salloc --partition=all --nodes=1 --time=01:00:00  srun --pty bash </nowiki>}}</span>
 
<p>Esto abre un shell a un nodo del cluster. .</p>
 
<p>Esto abre un shell a un nodo del cluster. .</p>
{{Note|Use este comando s&oacute;lo para pruebas. Todos los trabajos deben ser ejecutados en modo batch}}</div>
+
<span class="fck_mw_template">{{Note|Use este comando s&amp;oacute;lo para pruebas. Todos los trabajos deben ser ejecutados en modo batch}}</span></div>
 
</div>
 
</div>
 
</div>
 
</div>
Line 143: Line 117:
 
<div class="panel panel-neutral-white-border">
 
<div class="panel panel-neutral-white-border">
 
<div class="panel-heading">
 
<div class="panel-heading">
<h3 class="panel-title">&iquest;C&oacute;mo Ver la Cola de Trabajos?</h3>
+
<h3 class="panel-title">&#191;C&#243;mo Ver la Cola de Trabajos?</h3>
 
</div>
 
</div>
<div class="panel-body">Ejecute el siguiente comando:  {{Command|squeue }}
+
<div class="panel-body">Ejecute el siguiente comando:  <span class="fck_mw_template">{{Command|squeue }}</span>
 
<p>Este comando muestra las tareas que se encuentran en la cola. La primera columna muestra el identificador del trabajo. Cada tarea puede tener un estado diferente:</p>
 
<p>Este comando muestra las tareas que se encuentran en la cola. La primera columna muestra el identificador del trabajo. Cada tarea puede tener un estado diferente:</p>
 
<ul>
 
<ul>
<li>'''PD''' Pendiente o en espera </li>
+
<li><b>PD</b> Pendiente o en espera </li>
<li>'''R''' En ejecuci&oacute;n </li>
+
<li><b>R</b> En ejecuci&#243;n </li>
<li>'''CD''' El trabajo se ha completado en todos los nodos</li>
+
<li><b>CD</b> El trabajo se ha completado en todos los nodos</li>
 
</ul>
 
</ul>
Para m&aacute;s informaci&oacute;n ejecute el comando    {{Command|man squeue }}
+
<p>Para m&#225;s informaci&#243;n ejecute el comando    <span class="fck_mw_template">{{Command|man squeue }}</span>
<p>&nbsp;</p>
+
</p>
 +
<p>&#160;</p>
 
</div>
 
</div>
 
</div>
 
</div>
Line 162: Line 137:
 
<div class="panel panel-neutral-white-border">
 
<div class="panel panel-neutral-white-border">
 
<div class="panel-heading">
 
<div class="panel-heading">
<h3 class="panel-title">&iquest;C&oacute;mo Hacer Uso de GPUs?</h3>
+
<h3 class="panel-title">&#191;C&#243;mo Hacer Uso de GPUs?</h3>
 
</div>
 
</div>
<div class="panel-body">Agregue la opci&oacute;n '''--gres=gpu:N''' a los comandos '''srun''' o '''sbatch''' para especificar el uso de GPUs, done '''N''' es un n&uacute;mero entero que indica la cantidad de GPUs a utilizar. En el caso del cluster guane va de 1 a 8.</div>
+
<div class="panel-body">Agregue la opci&#243;n <b>--gres=gpu:N</b> a los comandos <b>srun</b> o <b>sbatch</b> para especificar el uso de GPUs, done <b>N</b> es un n&#250;mero entero que indica la cantidad de GPUs a utilizar. En el caso del cluster guane va de 1 a 8.</div>
 
<div class="panel-body"></div>
 
<div class="panel-body"></div>
 
</div>
 
</div>
Line 173: Line 148:
 
<div class="panel panel-neutral-white-border">
 
<div class="panel panel-neutral-white-border">
 
<div class="panel-heading">
 
<div class="panel-heading">
<h3 class="panel-title">&iquest;C&oacute;mo Correr VASP?</h3>
+
<h3 class="panel-title">&#191;C&#243;mo Correr VASP?</h3>
 
</div>
 
</div>
<div class="panel-body">En el directorio donde est&aacute;n los archivos de entrada de VASP cree un script de nombre vasp.sh con el siguiente contenido:</div>
+
<div class="panel-body">En el directorio donde est&#225;n los archivos de entrada de VASP cree un script de nombre vasp.sh con el siguiente contenido:</div>
 
<div class="panel-body">
 
<div class="panel-body">
 
+
<p><span class="fck_mw_template">{{File|vasp.sh|fckLR<pre>
{{File|vasp.sh|
 
<pre>
 
 
#!/bin/bash
 
#!/bin/bash
 
#SBATCH --partition=all  
 
#SBATCH --partition=all  
Line 193: Line 166:
 
export OMPI_MCA_btl=^openib
 
export OMPI_MCA_btl=^openib
 
srun  vasp
 
srun  vasp
</pre>}}   
+
</pre>}}</span>  
 
+
</p><p>Luego, ejecute el siguiente comando <span class="fck_mw_template">{{Command|sbatch ./vasp.sh}}</span>
Luego, ejecute el siguiente comando {{Command|sbatch ./vasp.sh}}
+
</p>
 
 
 
</div>
 
</div>
 
</div>
 
</div>
 
</div>
 
</div>
 
</div>
 
</div>
 
+
<p>
 
+
</p>
 
<div class="panel-body">
 
<div class="panel-body">
 
<div class="col-md-14">
 
<div class="col-md-14">
 
<div class="panel panel-neutral-white-border">
 
<div class="panel panel-neutral-white-border">
 
<div class="panel-heading">
 
<div class="panel-heading">
<h3 class="panel-title">&iquest;C&oacute;mo Correr Quantum Espresso?</h3>
+
<h3 class="panel-title">&#191;C&#243;mo Correr Quantum Espresso?</h3>
 
</div>
 
</div>
<div class="panel-body">En el directorio donde est&aacute;n los archivos de entrada de Quantum Espresso  cree un script de nombre run.sh con el siguiente contenido:</div>
+
<div class="panel-body">En el directorio donde est&#225;n los archivos de entrada de Quantum Espresso  cree un script de nombre run.sh con el siguiente contenido:</div>
 
<div class="panel-body">
 
<div class="panel-body">
 
+
<p><span class="fck_mw_template">{{File|run.sh|fckLR<pre>
{{File|run.sh|
 
<pre>
 
 
#!/bin/bash
 
#!/bin/bash
 
#SBATCH --partition=all  
 
#SBATCH --partition=all  
Line 227: Line 197:
 
export OMPI_MCA_btl=^openib
 
export OMPI_MCA_btl=^openib
 
srun  pw.x < archivo.in > salida
 
srun  pw.x < archivo.in > salida
</pre>}}   
+
</pre>}}</span>  
 
+
</p><p>Luego, ejecute el siguiente comando <span class="fck_mw_template">{{Command|sbatch ./run.sh}}</span>
Luego, ejecute el siguiente comando {{Command|sbatch ./run.sh}}
+
</p>
 
 
 
</div>
 
</div>
 
</div>
 
</div>
 
</div>
 
</div>
 
</div>
 
</div>
 
+
<p>
 
+
</p>
 
 
 
<div class="col-md-14">
 
<div class="col-md-14">
 
<div class="panel panel-success-white">
 
<div class="panel panel-success-white">
Line 247: Line 215:
 
<div class="panel panel-neutral-white-border">
 
<div class="panel panel-neutral-white-border">
 
<div class="panel-heading">
 
<div class="panel-heading">
<h3 class="panel-title">&iquest;C&oacute;mo Ejecutar Trabajos Seriales?</h3>
+
<h3 class="panel-title">&#191;C&#243;mo Ejecutar Trabajos Seriales?</h3>
 
</div>
 
</div>
 
<div class="panel-body">
 
<div class="panel-body">
 
<p>1) Editar un script shell, de nombre serial_job.sh,  con el siguiente contenido</p>
 
<p>1) Editar un script shell, de nombre serial_job.sh,  con el siguiente contenido</p>
{{File|serial_job.sh|
+
<p><span class="fck_mw_template">{{File|serial_job.sh|fckLR<pre>#!/bin/bash
<pre>#!/bin/bash
 
 
#OAR -n nombreDelTrabajo
 
#OAR -n nombreDelTrabajo
 
/camino/del/programa
 
/camino/del/programa
</pre>
+
</pre>fckLR}}</span>
}}
+
</p>
<p>Las primera l&iacute;nea indica que el archivo es un script shell. La segunda l&iacute;nea sirve para asignar un nombre al trabajo en el sistema de gesti&oacute;n de tareas. La &uacute;ltima l&iacute;nea es el camino absoluto del programa que se desea ejecutar.</p>
+
<p>Las primera l&#237;nea indica que el archivo es un script shell. La segunda l&#237;nea sirve para asignar un nombre al trabajo en el sistema de gesti&#243;n de tareas. La &#250;ltima l&#237;nea es el camino absoluto del programa que se desea ejecutar.</p>
<p>2) Luego, ub&iacute;quese en el mismo directorio donde cre&oacute; el scrip shell anterior y ejecute el siguiente comando</p>
+
<p>2) Luego, ub&#237;quese en el mismo directorio donde cre&#243; el scrip shell anterior y ejecute el siguiente comando</p>
{{Command|oarsub ./serial_job.sh}}</div>
+
<span class="fck_mw_template">{{Command|oarsub ./serial_job.sh}}</span></div>
 
</div>
 
</div>
 
</div>
 
</div>
Line 265: Line 232:
 
<div class="panel panel-neutral-white-border">
 
<div class="panel panel-neutral-white-border">
 
<div class="panel-heading">
 
<div class="panel-heading">
<h3 class="panel-title">&iquest;C&oacute;mo Ejecutar Trabajos Paralelos MPI?</h3>
+
<h3 class="panel-title">&#191;C&#243;mo Ejecutar Trabajos Paralelos MPI?</h3>
 
</div>
 
</div>
 
<div class="panel-body">
 
<div class="panel-body">
 
<p>1) Editar un script shell, de nombre parallel_job.sh,  con el siguiente contenido</p>
 
<p>1) Editar un script shell, de nombre parallel_job.sh,  con el siguiente contenido</p>
{{File|parallel_job.sh|
+
<p><span class="fck_mw_template">{{File|parallel_job.sh|fckLR<pre>#/bin/bash
<pre>#/bin/bash
 
 
#OAR -n mpitest
 
#OAR -n mpitest
 
# cat $OAR_FILE_NODES | sort | uniq &gt; nodos #Si descomenta esta l&iacute;nea podr&aacute; conocer cuales nodos le fueron asignados al trabajo
 
# cat $OAR_FILE_NODES | sort | uniq &gt; nodos #Si descomenta esta l&iacute;nea podr&aacute; conocer cuales nodos le fueron asignados al trabajo
 
mpirun -map-by node  -mca btl ^openib -machinefile $OAR_FILE_NODES -np 96 ./programaParaleloEjecutable
 
mpirun -map-by node  -mca btl ^openib -machinefile $OAR_FILE_NODES -np 96 ./programaParaleloEjecutable
</pre>
+
</pre>fckLR}}</span>
}}
+
</p>
<p>Las primera l&iacute;nea indica que el archivo es un script shell. La segunda l&iacute;nea sirve para asignar un nombre al trabajo en el sistema de gesti&oacute;n de tareas. La siguiente  l&iacute;nea est&aacute; comentada (comienza con #), si la descomenta generar&aacute; un archivo de nobre '''nodos''' que tendr&aacute; los nodos que le fueron asignados al trabajo. Finalmente, la &uacute;ltima l&iacute;nea ejecutar&aacute; el programa paralelo MPI. la opci&oacute;n '''-map-by node''' distribuye equitativamente los procesos entre los nodos asignados. La opci&oacute;n '''-machinefile $OAR_FILE_NODES''' indica en cuales nodos se ejecutar&aacute; el programa paralelo; estos son seleccionados autom&aacute;ticamente por OAR.. La opci&oacute;n '''-np 96''' indica cuantos procesos se generar&aacute;n (usted lo puede cambiar seg&uacute;n sus necesidades) y por &uacute;ltimo, '''./programaParaleloEjecutable''' es el programa que se desea ejecutar.</p>
+
<p>Las primera l&#237;nea indica que el archivo es un script shell. La segunda l&#237;nea sirve para asignar un nombre al trabajo en el sistema de gesti&#243;n de tareas. La siguiente  l&#237;nea est&#225; comentada (comienza con #), si la descomenta generar&#225; un archivo de nobre <b>nodos</b> que tendr&#225; los nodos que le fueron asignados al trabajo. Finalmente, la &#250;ltima l&#237;nea ejecutar&#225; el programa paralelo MPI. la opci&#243;n <b>-map-by node</b> distribuye equitativamente los procesos entre los nodos asignados. La opci&#243;n <b>-machinefile $OAR_FILE_NODES</b> indica en cuales nodos se ejecutar&#225; el programa paralelo; estos son seleccionados autom&#225;ticamente por OAR.. La opci&#243;n <b>-np 96</b> indica cuantos procesos se generar&#225;n (usted lo puede cambiar seg&#250;n sus necesidades) y por &#250;ltimo, <b>./programaParaleloEjecutable</b> es el programa que se desea ejecutar.</p>
<p>2) Luego, ub&iacute;quese en el mismo directorio donde cre&oacute; el scrip shell anterior y ejecute el siguiente comando</p>
+
<p>2) Luego, ub&#237;quese en el mismo directorio donde cre&#243; el scrip shell anterior y ejecute el siguiente comando</p>
{{Command|<nowiki> oarsub -l nodes=2 ./parallel_job.sh </nowiki>}}
+
<p><span class="fck_mw_template">{{Command|<nowiki> oarsub -l nodes=2 ./parallel_job.sh </nowiki>}}</span>
<p>La opci&oacute;n '''-l nodes=2''' indica que el trabajo se ejecutar&aacute; en 2 nodos del cluster. Usted puede cambiar este valor a conveniencia.</p>
+
</p>
<p>&nbsp;</p>
+
<p>La opci&#243;n <b>-l nodes=2</b> indica que el trabajo se ejecutar&#225; en 2 nodos del cluster. Usted puede cambiar este valor a conveniencia.</p>
<p>&nbsp;</p>
+
<p>&#160;</p>
 +
<p>&#160;</p>
 
</div>
 
</div>
 
</div>
 
</div>

Revision as of 14:46, 25 May 2016

300 px

MANEJADORES DE TAREAS

Esta sección describe el uso de los manejadores de tareas utilizados en el SC3, los cuales constituyen la herramienta obligatoria para la ejecución de trabajos

Ejecución de Programas Utilizando Slurm

¿Cómo Ejecutar Trabajos Seriales?

Para ejecutar programas seriales pasivos, es decir, que no requieran de alguna entrada de parámetros de forma interactiva, ejecute un comando como el que sigue:

srun ./programa &amp;&gt; salida &amp;


Este comando ejecuta ./programa en alguno de los nodos del cluster. El argumento &> salida indica que tanto la salida como los errores se almacenan en un archivo de nombre salida que se creará en el mismo directorio desde donde se ejecutó el programa. Finalmente, el últmo caracter & es para liberar la cónsola desde donde se lanza la ejecución del programa.

¿Cómo Ejecutar Trabajos Seriales Usando un Script Shell?

Para ejecutar programas seriales pasivos utilizando un script shell, que no requieran de alguna entrada de parámetros de forma interactiva, ejecute un comando como el que sigue:
sbatch ./script.sh

Este comando ejecuta ./script.sh en alguno de los nodos del cluster. .

¿Cómo Ejecutar Trabajos Paralelos con OpenMP? (Memoria Compartida)

Para ejecutar programas paralelos con OpenMP edite un script shell con el siguiente contenido:
File: openmp.sh
fckLR
#!/bin/bash
#export OMP_NUM_THREADS=`grep processor /proc/cpuinfo | wc -l`
export OMP_NUM_THREADS=4
./programa_ejecutable > salida
fckLR
La línea export OMP_NUM_THREADS=4 indica que se utilizarán 4 hilos de ejecución. El valor de esta variable debe fijarse según las necesidades y características de su programa ejecutable (programa_ejecutable). Recuerde que los nodos de guane tienen capacidad de 16 y 24 hilos. Si quiere utilizar la máxima capacidad de hilos de un nodo puede descomentar la segunda línea simplemente eliminando el caracter # y colocándolo al principio de la tercera línea. Luego, ejecute siguiente comando:
sbatch ./script.sh

Este comando ejecuta el script ./openmp.sh en alguno de los nodos del cluster.

¿Cómo Ejecutar Trabajos Paralelos con OpenMPI? (Memoria Distribuida)

Para ejecutar programas paralelos con OpenMPI edite un script shell con el siguiente contenido:
<span class="fck_mw_template">{{File|mpi.sh|fckLR<pre>
#!/bin/bash
#SBATCH --partition=all                 #Seleccione los nodos para el trabajo de todos el conjunto de nodos de cómputo del cluster
#SBATCH -o mpi.%j.out                    #Nombre del archivo de salida
#SBATCH -J mpiJob                          #Nombre del trabajo
#SBATCH --nodes=2                        #Numero de nodos para correr el trabajo
#SBATCH --ntasks=20                     #Numero de procesos
#SBATCH --tasks-per-node=10   #Numero de trabajos por nodo

#Prepara el ambiente de trabajo
export I_MPI_PMI_LIBRARY=/usr/local/slurm/lib/libpmi.so
source /usr/local/intel/parallel_studio_xe_2015/bin/psxevars.sh intel64 2> /dev/null
ulimit -s unlimited -c unlimited
export OMPI_MCA_btl=^openib

#Ejecuta el programa paralelo
srun  --network=Devname=mlx4_0,Devtype=IB  ./programaMPIejecutable
}}

Las líneas que comienzan con la palabra reservada #SBATCH indican las opciones del trabajo paralelo. La opción --partition=all indica que los nodos necesrios para ejecutar el trabajo se seleccionarán de todo el conjunto de nodos del cluster. Guane cuenta con 5 nodos de 8 cores doble hebra (16 hilos de ejecución) y el resto de 12 cores doble hebra (24 hilos de ejecución). Así, usted puede seleccionar las siguientes particiones:</p>

  • manycores16
  • manycores24
  • all

La opción --nodes=2. solicita 2 nodos de cómputo para la tarea, la opción --ntasks=20 indica que se ejecutarán 20 procesos. La opción --ntasks-per-node=10 indica que los 20 procesos se distribuirán de a 10 procesos por nodo.

Despues, el resto de las líneas preparan las variables de ambiente necesarias para el trabajo paralelo. Finalmente, en la última línea, se especifica el programa ejecutable (programaMPIejecutable). Recuerde que los nodos de guane tienen capacidad de 16 y 24 hilos.

Luego, ejecute siguiente comando:

sbatch ./mpi.sh

Este comando ejecuta el script ./mpi.sh en el conjunto de los nodos del cluster. <p> 

¿Cómo Eliminar un Trabajo?

Ejecute el siguiente comando:
scancel ID

Donde ID es el identificador del trabajo. Este se puede visualizar con el comando squeue.

¿Cómo Crear una Sesión Interactiva?

Ejecute los siguientes comandos:
salloc --partition=all --nodes=1 --time=01:00:00 srun --pty bash

Esto abre un shell a un nodo del cluster. .

NOTE: Use este comando s&oacute;lo para pruebas. Todos los trabajos deben ser ejecutados en modo batch

¿Cómo Ver la Cola de Trabajos?

Ejecute el siguiente comando:
squeue

Este comando muestra las tareas que se encuentran en la cola. La primera columna muestra el identificador del trabajo. Cada tarea puede tener un estado diferente:

  • PD Pendiente o en espera
  • R En ejecución
  • CD El trabajo se ha completado en todos los nodos

Para más información ejecute el comando

man squeue

 

¿Cómo Hacer Uso de GPUs?

Agregue la opción --gres=gpu:N a los comandos srun o sbatch para especificar el uso de GPUs, done N es un número entero que indica la cantidad de GPUs a utilizar. En el caso del cluster guane va de 1 a 8.

¿Cómo Correr VASP?

En el directorio donde están los archivos de entrada de VASP cree un script de nombre vasp.sh con el siguiente contenido:

File: vasp.sh
fckLR
#!/bin/bash
#SBATCH --partition=all 
#SBATCH -o vasp.%j.out 
#SBATCH -J vasp:test 
#SBATCH --nodes=1 
#SBATCH --ntasks=48
#SBATCH --tasks-per-node=24 
# set I_MPI_PMI_LIBRARY to link with SLURM 
export I_MPI_PMI_LIBRARY=/usr/local/slurm/lib/libpmi.so 
source /usr/local/intel/parallel_studio_xe_2015/bin/psxevars.sh intel64 2> /dev/null 
ulimit -s unlimited -c unlimited 
export OMPI_MCA_btl=^openib
srun  vasp

Luego, ejecute el siguiente comando

sbatch ./vasp.sh

¿Cómo Correr Quantum Espresso?

En el directorio donde están los archivos de entrada de Quantum Espresso cree un script de nombre run.sh con el siguiente contenido:

File: run.sh
fckLR
#!/bin/bash
#SBATCH --partition=all 
#SBATCH -o qe.%j.out                     #Nombre del archivo de salida
#SBATCH -J qe:test                           #Nombre del trabajo
#SBATCH --nodes=2                        #Numero de nodos para correr el trabajo
#SBATCH --ntasks=20                     #Numero de procesos
#SBATCH --tasks-per-node=10   #Numero de trabajos por nodo
# set I_MPI_PMI_LIBRARY to link with SLURM 
export I_MPI_PMI_LIBRARY=/usr/local/slurm/lib/libpmi.so 
source /usr/local/intel/parallel_studio_xe_2015/bin/psxevars.sh intel64 2> /dev/null 
ulimit -s unlimited -c unlimited
export OMPI_MCA_btl=^openib
srun  pw.x < archivo.in > salida

Luego, ejecute el siguiente comando

sbatch ./run.sh

Ejecutar Programas Utilizando OAR

¿Cómo Ejecutar Trabajos Seriales?

1) Editar un script shell, de nombre serial_job.sh, con el siguiente contenido

File: serial_job.sh
fckLR
#!/bin/bash
#OAR -n nombreDelTrabajo
/camino/del/programa
fckLR

Las primera línea indica que el archivo es un script shell. La segunda línea sirve para asignar un nombre al trabajo en el sistema de gestión de tareas. La última línea es el camino absoluto del programa que se desea ejecutar.

2) Luego, ubíquese en el mismo directorio donde creó el scrip shell anterior y ejecute el siguiente comando

oarsub ./serial_job.sh

¿Cómo Ejecutar Trabajos Paralelos MPI?

1) Editar un script shell, de nombre parallel_job.sh, con el siguiente contenido

File: parallel_job.sh
fckLR
#/bin/bash
#OAR -n mpitest
# cat $OAR_FILE_NODES | sort | uniq > nodos #Si descomenta esta línea podrá conocer cuales nodos le fueron asignados al trabajo
mpirun -map-by node  -mca btl ^openib -machinefile $OAR_FILE_NODES -np 96 ./programaParaleloEjecutable
fckLR

Las primera línea indica que el archivo es un script shell. La segunda línea sirve para asignar un nombre al trabajo en el sistema de gestión de tareas. La siguiente línea está comentada (comienza con #), si la descomenta generará un archivo de nobre nodos que tendrá los nodos que le fueron asignados al trabajo. Finalmente, la última línea ejecutará el programa paralelo MPI. la opción -map-by node distribuye equitativamente los procesos entre los nodos asignados. La opción -machinefile $OAR_FILE_NODES indica en cuales nodos se ejecutará el programa paralelo; estos son seleccionados automáticamente por OAR.. La opción -np 96 indica cuantos procesos se generarán (usted lo puede cambiar según sus necesidades) y por último, ./programaParaleloEjecutable es el programa que se desea ejecutar.

2) Luego, ubíquese en el mismo directorio donde creó el scrip shell anterior y ejecute el siguiente comando

oarsub -l nodes=2 ./parallel_job.sh

La opción -l nodes=2 indica que el trabajo se ejecutará en 2 nodos del cluster. Usted puede cambiar este valor a conveniencia.