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

From Supercomputación y Cálculo Científico UIS
(41 intermediate revisions by 2 users not shown)
Line 1: Line 1:
<p>__NOTOC__</p>
+
[[Image:Logo_sc33.png | 300 px]]
<div class="thumbnail img-thumbnail">http://wiki.sc3.uis.edu.co/images/a/a8/Logo_sc33.png</div>
+
 
<p>&nbsp;</p>
+
Esta sección describe el uso de los recursos del SC3
<div class="btn btn-primary"><em class="fa  fa-long-arrow-left">&nbsp;</em> [[Wiki SC3]]</div>
+
 
<p>&nbsp;</p>
+
=¿Cómo Compilar Programas?=
<div class="column clearfix">
+
 
<div class="col-md-14">
+
Para compilar un programa es necesario hacerlo en uno de los nodos de cálculo para evitar la sobre carga del nodo de entrada al cluster. Si la compilación es un proceso corto puede abrir una sesión interactiva y compilar manualmente su programa (ver la sección ¿Cómo crear una Sesión Interactiva?.
<div class="well well-midnight">
+
 
<h4>MANEJADORES DE TAREAS</h4>
+
Si el proceso de compilación toma un tiempo considerable es necesario que creen un trabajo (job) para este fin.
<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>
+
Edite un archivo de nombre '''compilar.sh''' con el siguiente contenido
</div>
+
 
</div>
+
{{File|openmp.sh|<pre><nowiki>
<div class="col-md-14">
+
#!/bin/bash
<div class="panel panel-success-white">
+
#SBATCH --nodes=1      #Numero de nodos para correr el trabajo
<div class="panel-heading">
+
#SBATCH --ntasks=1      #Numero de procesos
<h3 class="panel-title">Ejecuci&oacute;n de Programas Utilizando Slurm</h3>
+
 
</div>
+
comando_para_compilar
<div class="panel-body">
+
</nowiki></pre>}}
<div class="col-md-14">
+
 
<div class="panel panel-neutral-white-border">
+
Donde las opciones '''--nodes=''' y '''--ntasks''' indican la solicitud de recursos para realizar la compilación. Luego, ejecute el siguiente comando para lanzar el trabajo:
<div class="panel-heading">
+
 
<h3 class="panel-title">&iquest;C&oacute;mo Ejecutar Trabajos Seriales?</h3>
+
{{Command|sbatch ./compilar.sh }}
</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;}}
+
=Ejecución de Trabajos=
<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>
+
Esta sección describe el uso del planificador de tareas SLURM el cual constituye la
</div>
+
herramienta obligatoria para la ejecución de trabajos
</div>
+
 
</div>
+
==¿Cómo Ejecutar Trabajos Seriales?==
</div>
+
 
<div class="panel-body">
+
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="col-md-14">
+
 
<div class="panel panel-neutral-white-border">
+
{{Command|srun ./programa &> salida &}}
<div class="panel-heading">
+
 
<h3 class="panel-title">&iquest;C&oacute;mo Ejecutar Trabajos Seriales Usando un Script Shell?</h3>
+
Este comando ejecuta '''./programa''' en alguno de los nodos del cluster. El argumento '''&> salida''' indica que  
</div>
+
tanto la salida como los errores se almacenan en un archivo de nombre '''salida''' que se creará en el mismo  
<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 }}
+
directorio desde donde se ejecutó el programa. Finalmente, el últmo caracter '''&''' es para liberar la cónsola
<p>Este comando ejecuta '''./script.sh''' en alguno de los nodos del cluster. .</p>
+
desde donde se lanza la ejecución del programa.
</div>
+
 
</div>
+
 
</div>
+
==¿Cómo Ejecutar Trabajos Seriales Usando un Script Shell?==
</div>
+
 
</div>
+
Para ejecutar programas seriales pasivos utilizando un script shell,  que no requieran de alguna entrada de  
<div class="panel-body">
+
parámetros de forma interactiva, ejecute un comando como el que sigue:
<div class="col-md-14">
+
 
<div class="panel panel-neutral-white-border">
+
{{Command|sbatch ./script.sh }}
<div class="panel-heading">
+
 
<h3 class="panel-title">&iquest;C&oacute;mo Ejecutar Trabajos Paralelos con OpenMP? (Memoria Compartida)</h3>
+
Este comando ejecuta '''./script.sh''' en alguno de los nodos del cluster. .
</div>
+
 
<div class="panel-body">Para ejecutar programas paralelos con OpenMP  edite un script shell con el siguiente contenido: {{File|openmp.sh|
+
 
<pre>#!/bin/bash
+
==¿Cómo Ejecutar Trabajos Paralelos con OpenMP? (Memoria Compartida)==
#export OMP_NUM_THREADS=`grep processor /proc/cpuinfo | wc -l`
+
 
 +
Para ejecutar programas paralelos con OpenMP  edite un script shell con el siguiente contenido:
 +
 
 +
{{File|openmp.sh|<pre><nowiki>
 +
#!/bin/bash
 
export OMP_NUM_THREADS=4
 
export OMP_NUM_THREADS=4
./programa_ejecutable &gt; salida
+
./programa_ejecutable > salida
 +
</nowiki></pre>}}
 +
 
 +
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:
 +
 
 +
{{Command|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:
 +
{{File|mpi.sh|
 +
<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
 +
ulimit -l unlimited
 +
export OMPI_MCA_btl=^openib
 +
 
 +
#Ejecuta el programa paralelo
 +
srun  --network=Devname=mlx4_0,Devtype=IB  ./programaMPIejecutable
 
</pre>
 
</pre>
}} 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 '''./openmp.sh''' en alguno de los nodos del cluster.</p>
+
 
</div>
+
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:
</div>
+
 
</div>
+
*manycores16
</div>
+
*manycores24
<div class="panel-body">
+
*all
<div class="col-md-14">
+
 
<div class="panel panel-neutral-white-border">
+
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:
<div class="panel-heading">
+
 
<h3 class="panel-title">&iquest;C&oacute;mo Ejecutar Trabajos Paralelos con OpenMPI? (Memoria Distribuida)</h3>
+
{{Command|sbatch ./mpi.sh}}
</div>
+
 
<div class="panel-body">Para ejecutar programas paralelos con OpenMPI  edite un script shell con el siguiente contenido:   {{File|mpi.sh|
+
Este comando ejecuta el script '''./mpi.sh''' en el conjunto de los nodos del cluster.
<pre>#!/bin/bash
+
 
#echo $SLURM_NODELIST | sort | uniq &gt; nodos
+
==¿Cómo Eliminar un Trabajo?==
mpirun --map-by node -mca btl ^openib -np 20 ./programaMPIejecutable
+
 
</pre>
+
Ejecute el siguiente comando:
}}  Descomente la l&iacute;nea '''#echo $SLURM_NODELIST | sort | uniq &gt; nodos''' si desea conocer los nodos asignados a la tarea. La opci&oacute;n '''--map-by node''' balancea el n&uacute;mero de procesos de MPI en todos los nodos solicitados. La opci&oacute;n '''-mca btl ^openib''' obligan el uso de la red de alta velocidad infiniband. La opci&oacute;n '''-np 20''' indica que se crear&aacute;n 20 procesos de MPI, puede cambiar este valor de acuerdo a sus necesidades. Finalmente 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 --partition=all --nodes=2 --ntasks-per-node=10 ./mpi.sh</nowiki>}}
+
 
<p>Este comando ejecuta el script '''./mpi.sh''' en el conjunto de los nodos del cluster. seleccionados con la opci&oacute;n '''--nodes=2'''. 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>
+
{{Command|scancel ID }}
<ul>
+
 
<li>manycores16 </li>
+
Donde '''ID''' es el identificador del trabajo. Este se puede visualizar con el comando '''squeue'''.
<li>manycores24 </li>
+
 
<li>all</li>
+
 
</ul>
+
 
Finalmente, la opci&oacute;n '''--ntasks-per-node=10''' indica que se ejecutar&aacute;n 10 procesos por nodo.
+
==¿Cómo Crear una Sesión Interactiva?==
<p>&nbsp;</p>
+
Las secciones interactivas se utilizan para conectarse directamente a uno de los nodos de cálculo para fines de pruebas cortas o compilación de programas.
</div>
+
 
</div>
+
Ejecute los siguientes comandos:
</div>
+
 
</div>
+
{{Command|<nowiki>salloc --partition=all --nodes=1 --time=01:00:00 srun --pty bash </nowiki>}}
<div class="panel-body">
+
 
<div class="col-md-14">
+
Esto abre un shell a un nodo del cluster. .
<div class="panel panel-neutral-white-border">
+
 
<div class="panel-heading">
+
{{Note|Use este comando sólo para pruebas. Todos los trabajos deben ser ejecutados en modo batch}}
<h3 class="panel-title">&iquest;C&oacute;mo Eliminar un Trabajo?</h3>
+
 
</div>
+
 
<div class="panel-body">Ejecute el siguiente comando: {{Command|scancel ID }}
+
 
<p>Donde '''ID''' es el identificador del trabajo. Este se puede visualizar con el comando squeue.</p>
+
==¿Cómo Ver la Cola de Trabajos?==
</div>
+
 
</div>
+
Ejecute el siguiente comando:
</div>
+
 
</div>
+
{{Command|squeue }}
<div class="panel-body">
+
 
<div class="col-md-14">
+
Este comando muestra las tareas que se encuentran en la cola. La primera columna muestra el identificador del  
<div class="panel panel-neutral-white-border">
+
trabajo. Cada tarea puede tener un estado diferente:
<div class="panel-heading">
+
 
<h3 class="panel-title">&iquest;C&oacute;mo Crear una Sesi&oacute;n Interactiva?</h3>
 
</div>
 
<div class="panel-body">Ejecute los siguientes comandos:   {{Command|salloc --partition=all --nodes=1 --time=01:00:00 }} {{Command| srun -u bash -i}}
 
<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>
 
</div>
 
</div>
 
</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 Ver la Cola de Trabajos?</h3>
 
</div>
 
<div class="panel-body">Ejecute el siguiente comando: {{Command|squeue }}
 
<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>'''PD''' Pendiente o en espera </li>
<li>'''R''' En ejecuci&oacute;n </li>
+
<li>'''R''' En ejecución </li>
 
<li>'''CD''' El trabajo se ha completado en todos los nodos</li>
 
<li>'''CD''' 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>&nbsp;</p>
+
Para más información ejecute el comando
</div>
+
 
</div>
+
{{Command|man squeue }}
</div>
+
 
</div>
+
 
<div class="panel-body">
+
 
<div class="col-md-14">
+
==¿Cómo Hacer Uso de GPUs?==
<div class="panel panel-neutral-white-border">
+
 
<div class="panel-heading">
+
Agregue la opción '''--gres=gpu:N''' a los comandos '''srun''' o '''sbatch''' para especificar el uso de GPUs,  
<h3 class="panel-title">&iquest;C&oacute;mo Hacer Uso de GPUs?</h3>
+
done '''N''' es un número entero que indica la cantidad de GPUs a utilizar. En el caso del cluster guane va  
</div>
+
de 1 a 8.
<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"></div>
+
 
</div>
+
 
</div>
+
==¿Cómo Correr VASP?==
</div>
+
 
<div class="panel-body">
+
En el directorio donde están los archivos de entrada de VASP cree un script de nombre vasp.sh con el siguiente
<div class="col-md-14">
+
contenido:
<div class="panel panel-neutral-white-border">
+
 
<div class="panel-heading">
+
{{File|vasp.sh|<pre><nowiki>
<h3 class="panel-title">&iquest;C&oacute;mo Correr VASP?</h3>
+
#!/bin/bash
</div>
+
#SBATCH --partition=all
<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>
+
#SBATCH -o vasp.%j.out
<div class="panel-body">
+
#SBATCH -J vasp:test
{{File|vasp.sh|
+
#SBATCH --nodes=1
<nowiki>
+
#SBATCH --ntasks=48
#!/bin/bash #SBATCH --partition=all #SBATCH -o vasp.%j.out #SBATCH -J vasp:test #SBATCH --nodes=1 #SBATCH --ntasks=24 #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&gt; /dev/null ulimit -s unlimited -c unlimited srun -n $SLURM_TASKS_PER_NODE vasp }} Luego, ejecute el siguiente comando {{Command|sbatch ./vasp.sh
+
#SBATCH --tasks-per-node=24
</nowiki>
+
# 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
 +
</nowiki></pre>}} 
 +
 
 +
Luego, ejecute el siguiente comando
 +
 
 +
{{Command|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|
 +
<pre>
 +
#!/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_2016.3.067/psxevars.sh intel64 2> /dev/null  
 +
ulimit -s unlimited -c unlimited
 +
export OMPI_MCA_btl=^openib
 +
srun pw.x < archivo.in > salida
 +
</pre>
 +
}}
 +
 
 +
Luego, ejecute el siguiente comando
 +
 
 +
{{Command|sbatch ./run.sh}}
 +
 
 +
== Ejecutar Python Notebooks ==
 +
 
 +
Edite un archivo de nombre '''jupiter.batch''' y agregue el siguiente contenido
 +
 
 +
{{File|jupyter.batch|
 +
 
 +
<pre>
 +
#!/bin/sh
 +
#SBATCH --partition=all
 +
#SBATCH --time=24:00:00
 +
#SBATCH --nodes=1
 +
#SBATCH --job-name="Jupyterhub_test"
 +
#SBATCH --output=jupyterhub.out
 +
#SBATCH --ntasks-per-node=1
 +
#SBATCH --gres=gpu:3
 +
cp /opt/jupyterhub/jupyterhub_config.py .
 +
sudo jupyterhub
 +
</pre>
 +
 
 
}}
 
}}
</div>
+
 
</div>
+
Luego, ejecute el siguiente comando
</div>
+
 
</div>
+
{{Command| sbatch jupyter.batch}}
<div class="col-md-14">
+
 
<div class="panel panel-success-white">
+
Tome nota del nodo de Guane donde se ejecuta la tarea. Puede ver el nombre del nodo con el comando
<div class="panel-heading">
+
 
<h3 class="panel-title">Ejecutar Programas Utilizando OAR</h3>
+
{{Command| squeue}}
</div>
+
 
<div class="panel-body">
+
Este comando le mostrará una salida parecida a la siguiente
<div class="col-md-14">
+
 
<div class="panel panel-neutral-white-border">
+
8788      all  jupyter  rramosp  R 16-05:10:23      1 guane10
<div class="panel-heading">
+
 
<h3 class="panel-title">&iquest;C&oacute;mo Ejecutar Trabajos Seriales?</h3>
+
En este ejemplo el programa '''jupyter''', que permite la ejecución de los notebooks, se ejecuta
</div>
+
en el nodo '''guane10'''
<div class="panel-body">
+
 
<p>1) Editar un script shell, de nombre serial_job.sh,  con el siguiente contenido</p>
+
Despues, abra el siguiente URL en un navegador
{{File|serial_job.sh|
+
 
<pre>#!/bin/bash
+
www.sc3.uis.edu.co/guaneJ10
#OAR -n nombreDelTrabajo
+
 
/camino/del/programa
+
Ingrese su '''login''' y contraseña, navegue por sus archivos y abra el notebook.
 +
 
 +
==¿Cómo Ejecutar Matlab?==
 +
 
 +
Antes de correr su trabajo de matlab debe transferir el código de matlab al súper computador (Vea la sección: [http://wiki.sc3.uis.edu.co/index.php/%C2%BFC%C3%B3mo_Acceder_a_los_Recursos%3F ¿Cómo Acceder a los Recursos?])
 +
 
 +
===Trabajo Serial de Matlab===
 +
Edite un script shell de nombre '''matlabSerial.sh''' para especificar los recursos necesarios para correr su trabajo de matlab. Ejemplo:
 +
 
 +
{{File|matlabSerial.sh|
 +
 
 +
<pre>
 +
#!/bin/bash
 +
 
 +
#Nombre del trabajo
 +
#SBATCH --job-name=MatlabSerial
 +
 
 +
#Nombre del archivo de salida
 +
#SBATCH -o matlabSerial.%j.out
 +
 
 +
#Grupo de nodos a utilizar
 +
#SBATCH --partition=all
 +
 
 +
#Numero de procesos
 +
#SBATCH --ntasks=1
 +
 
 +
#Tiempo máximo de ejecución
 +
#SBATCH --time=24:00:00
 +
 
 +
#Numero de nodos para correr el trabajo
 +
#SBATCH -N 1
 +
 
 +
#Ejecutar Matlab
 +
matlab -nodisplay < programaSerialMatlab.m
 
</pre>
 
</pre>
 
}}
 
}}
<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>2) Luego, ub&iacute;quese en el mismo directorio donde cre&oacute; el scrip shell anterior y ejecute el siguiente comando</p>
+
Luego, ejecute el siguiente comando:
{{Command|oarsub ./serial_job.sh}}</div>
+
 
</div>
+
{{Command| sbatch matlabSerial.sh}}
</div>
+
 
<div class="col-md-14">
+
===Trabajo Paralelo de Matlab===
<div class="panel panel-neutral-white-border">
+
Para aprender como paralelizar un programa de matlab vaya al siguiente enlace [https://la.mathworks.com/help/distcomp/ parallel toolbox]
<div class="panel-heading">
+
 
<h3 class="panel-title">&iquest;C&oacute;mo Ejecutar Trabajos Paralelos MPI?</h3>
+
Edite un script shell de nombre '''matlabParalelo.sh''' para especificar los recursos necesarios para correr su trabajo de matlab. Ejemplo:
</div>
+
 
<div class="panel-body">
+
{{File|matlabParalelo.sh|
<p>1) Editar un script shell, de nombre parallel_job.sh,  con el siguiente contenido</p>
+
 
{{File|parallel_job.sh|
+
<pre>
<pre>#/bin/bash
+
#!/bin/bash
#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
+
#Nombre del trabajo
mpirun -map-by node  -mca btl ^openib -machinefile $OAR_FILE_NODES -np 96 ./programaParaleloEjecutable
+
#SBATCH --job-name=Matlab
 +
 
 +
#Nombre del archivo de salida
 +
#SBATCH -o simulacion1.%j.out
 +
 
 +
#Grupo de nodos a utilizar
 +
#SBATCH --partition=all
 +
 
 +
#Numero de procesos
 +
#SBATCH --ntasks=4
 +
 
 +
#Tiempo máximo de ejecución
 +
#SBATCH --time=24:00:00
 +
 
 +
#Numero de nodos para correr el trabajo
 +
#SBATCH -N 1
 +
 
 +
#Ejecutar Matlab
 +
matlab -nodisplay < programaMatlabParalelo.m
 +
 
 
</pre>
 
</pre>
 
}}
 
}}
<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>2) Luego, ub&iacute;quese en el mismo directorio donde cre&oacute; el scrip shell anterior y ejecute el siguiente comando</p>
+
Luego, ejecute el siguiente comando:
{{Command|<nowiki> oarsub -l nodes=2 ./parallel_job.sh </nowiki>}}
+
 
<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>
+
{{Command| sbatch matlabParalelo.sh}}
<p>&nbsp;</p>
 
<p>&nbsp;</p>
 
<p>Probando el toche editor</p>
 
</div>
 
</div>
 
</div>
 
</div>
 
</div>
 
</div>
 

Revision as of 14:37, 23 October 2018

Logo sc33.png

Esta sección describe el uso de los recursos del SC3

¿Cómo Compilar Programas?

Para compilar un programa es necesario hacerlo en uno de los nodos de cálculo para evitar la sobre carga del nodo de entrada al cluster. Si la compilación es un proceso corto puede abrir una sesión interactiva y compilar manualmente su programa (ver la sección ¿Cómo crear una Sesión Interactiva?.

Si el proceso de compilación toma un tiempo considerable es necesario que creen un trabajo (job) para este fin.

Edite un archivo de nombre compilar.sh con el siguiente contenido

File: openmp.sh
#!/bin/bash
#SBATCH --nodes=1       #Numero de nodos para correr el trabajo
#SBATCH --ntasks=1      #Numero de procesos

comando_para_compilar

Donde las opciones --nodes= y --ntasks indican la solicitud de recursos para realizar la compilación. Luego, ejecute el siguiente comando para lanzar el trabajo:

sbatch ./compilar.sh


Ejecución de Trabajos

Esta sección describe el uso del planificador de tareas SLURM el cual constituye la herramienta obligatoria para la ejecución de trabajos

¿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 &> salida &


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
#!/bin/bash
export OMP_NUM_THREADS=4
./programa_ejecutable > salida

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:

File: mpi.sh
#!/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
ulimit -l 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:

  • 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.

¿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?

Las secciones interactivas se utilizan para conectarse directamente a uno de los nodos de cálculo para fines de pruebas cortas o compilación de programas.

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ó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
#!/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
#!/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_2016.3.067/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 Python Notebooks

Edite un archivo de nombre jupiter.batch y agregue el siguiente contenido

File: jupyter.batch
#!/bin/sh
#SBATCH --partition=all
#SBATCH --time=24:00:00
#SBATCH --nodes=1
#SBATCH --job-name="Jupyterhub_test"
#SBATCH --output=jupyterhub.out
#SBATCH --ntasks-per-node=1
#SBATCH --gres=gpu:3
cp /opt/jupyterhub/jupyterhub_config.py .
sudo jupyterhub

Luego, ejecute el siguiente comando

sbatch jupyter.batch


Tome nota del nodo de Guane donde se ejecuta la tarea. Puede ver el nombre del nodo con el comando

squeue


Este comando le mostrará una salida parecida a la siguiente

8788       all  jupyter  rramosp  R 16-05:10:23      1 guane10

En este ejemplo el programa jupyter, que permite la ejecución de los notebooks, se ejecuta en el nodo guane10

Despues, abra el siguiente URL en un navegador

www.sc3.uis.edu.co/guaneJ10

Ingrese su login y contraseña, navegue por sus archivos y abra el notebook.

¿Cómo Ejecutar Matlab?

Antes de correr su trabajo de matlab debe transferir el código de matlab al súper computador (Vea la sección: ¿Cómo Acceder a los Recursos?)

Trabajo Serial de Matlab

Edite un script shell de nombre matlabSerial.sh para especificar los recursos necesarios para correr su trabajo de matlab. Ejemplo:

File: matlabSerial.sh
#!/bin/bash

#Nombre del trabajo
#SBATCH --job-name=MatlabSerial

#Nombre del archivo de salida
#SBATCH -o matlabSerial.%j.out

#Grupo de nodos a utilizar
#SBATCH --partition=all

#Numero de procesos
#SBATCH --ntasks=1

#Tiempo máximo de ejecución
#SBATCH --time=24:00:00

#Numero de nodos para correr el trabajo
#SBATCH -N 1

#Ejecutar Matlab
matlab -nodisplay < programaSerialMatlab.m

Luego, ejecute el siguiente comando:

sbatch matlabSerial.sh


Trabajo Paralelo de Matlab

Para aprender como paralelizar un programa de matlab vaya al siguiente enlace parallel toolbox

Edite un script shell de nombre matlabParalelo.sh para especificar los recursos necesarios para correr su trabajo de matlab. Ejemplo:

File: matlabParalelo.sh
#!/bin/bash

#Nombre del trabajo
#SBATCH --job-name=Matlab

#Nombre del archivo de salida
#SBATCH -o simulacion1.%j.out

#Grupo de nodos a utilizar
#SBATCH --partition=all

#Numero de procesos
#SBATCH --ntasks=4

#Tiempo máximo de ejecución
#SBATCH --time=24:00:00

#Numero de nodos para correr el trabajo
#SBATCH -N 1

#Ejecutar Matlab
matlab -nodisplay < programaMatlabParalelo.m

Luego, ejecute el siguiente comando:

sbatch matlabParalelo.sh