Difference between revisions of "¿Cómo correr trabajos?"
Line 1: | Line 1: | ||
− | [[ | + | [[Image:Logo_sc33.png | 300 px]] |
+ | |||
=MANEJADORES DE TAREAS= | =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 | + | |
+ | 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== | ==Ejecución de Programas Utilizando Slurm== | ||
+ | |||
+ | |||
===¿Cómo Ejecutar Trabajos Seriales?=== | ===¿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: | 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: | ||
− | {{Command|srun ./programa & | + | {{Command|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: | ||
− | + | {{Command|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|<pre><nowiki> | |
− | + | #!/bin/bash | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
export OMP_NUM_THREADS=4 | export OMP_NUM_THREADS=4 | ||
− | ./programa_ejecutable | + | ./programa_ejecutable > salida |
− | </pre> | + | </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|<nowiki><pre> | ||
#!/bin/bash | #!/bin/bash | ||
− | #SBATCH --partition=all | + | #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 | + | #SBATCH -o mpi.%j.out #Nombre del archivo de salida |
− | #SBATCH -J mpiJob | + | #SBATCH -J mpiJob #Nombre del trabajo |
− | #SBATCH --nodes=2 | + | #SBATCH --nodes=2 #Numero de nodos para correr el trabajo |
− | #SBATCH --ntasks=20 | + | #SBATCH --ntasks=20 #Numero de procesos |
#SBATCH --tasks-per-node=10 #Numero de trabajos por nodo | #SBATCH --tasks-per-node=10 #Numero de trabajos por nodo | ||
Line 67: | Line 72: | ||
#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></nowiki>}} |
− | + | ||
− | + | 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: | ||
+ | |||
<ul> | <ul> | ||
<li>manycores16 </li> | <li>manycores16 </li> | ||
Line 76: | Line 85: | ||
<li>all</li> | <li>all</li> | ||
</ul> | </ul> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | 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: | |
− | + | ||
− | + | {{Command|<nowiki>sbatch ./mpi.sh</nowiki>}} | |
− | + | ||
− | + | ||
− | + | Este comando ejecuta el script '''./mpi.sh''' en el conjunto de los nodos del cluster. | |
− | + | ||
− | + | ||
− | + | ===¿Cómo Eliminar un Trabajo?=== | |
− | + | ||
− | + | Ejecute el siguiente comando: | |
− | + | ||
− | + | {{Command|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: | |
− | + | ||
− | + | {{Command|<nowiki>salloc --partition=all --nodes=1 --time=01:00:00 srun --pty bash </nowiki>}} | |
− | + | ||
− | + | 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: | ||
+ | |||
+ | {{Command|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: | ||
+ | |||
<ul> | <ul> | ||
− | <li> | + | <li>'''PD''' Pendiente o en espera </li> |
− | <li> | + | <li>'''R''' En ejecución </li> |
− | <li> | + | <li>'''CD''' El trabajo se ha completado en todos los nodos</li> |
</ul> | </ul> | ||
− | + | ||
− | + | Para más información ejecute el comando | |
− | + | ||
− | + | {{Command|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|<nowiki><pre> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
#!/bin/bash | #!/bin/bash | ||
#SBATCH --partition=all | #SBATCH --partition=all | ||
Line 162: | Line 165: | ||
# set I_MPI_PMI_LIBRARY to link with SLURM | # set I_MPI_PMI_LIBRARY to link with SLURM | ||
export I_MPI_PMI_LIBRARY=/usr/local/slurm/lib/libpmi.so | export I_MPI_PMI_LIBRARY=/usr/local/slurm/lib/libpmi.so | ||
− | source /usr/local/intel/parallel_studio_xe_2015/bin/psxevars.sh intel64 2 | + | source /usr/local/intel/parallel_studio_xe_2015/bin/psxevars.sh intel64 2> /dev/null |
ulimit -s unlimited -c unlimited | ulimit -s unlimited -c unlimited | ||
export OMPI_MCA_btl=^openib | export OMPI_MCA_btl=^openib | ||
srun vasp | srun vasp | ||
− | </pre> | + | </pre></nowiki>}} |
− | + | ||
− | + | 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|<nowiki><pre> | |
− | |||
− | |||
− | |||
− | |||
#!/bin/bash | #!/bin/bash | ||
#SBATCH --partition=all | #SBATCH --partition=all | ||
#SBATCH -o qe.%j.out #Nombre del archivo de salida | #SBATCH -o qe.%j.out #Nombre del archivo de salida | ||
− | #SBATCH -J qe:test | + | #SBATCH -J qe:test #Nombre del trabajo |
#SBATCH --nodes=2 #Numero de nodos para correr el trabajo | #SBATCH --nodes=2 #Numero de nodos para correr el trabajo | ||
− | #SBATCH --ntasks=20 | + | #SBATCH --ntasks=20 #Numero de procesos |
− | #SBATCH --tasks-per-node=10 | + | #SBATCH --tasks-per-node=10 #Numero de trabajos por nodo |
# set I_MPI_PMI_LIBRARY to link with SLURM | # set I_MPI_PMI_LIBRARY to link with SLURM | ||
export I_MPI_PMI_LIBRARY=/usr/local/slurm/lib/libpmi.so | export I_MPI_PMI_LIBRARY=/usr/local/slurm/lib/libpmi.so | ||
− | source /usr/local/intel/parallel_studio_xe_2015/bin/psxevars.sh intel64 2 | + | source /usr/local/intel/parallel_studio_xe_2015/bin/psxevars.sh intel64 2> /dev/null |
ulimit -s unlimited -c unlimited | ulimit -s unlimited -c unlimited | ||
export OMPI_MCA_btl=^openib | export OMPI_MCA_btl=^openib | ||
srun pw.x < archivo.in > salida | srun pw.x < archivo.in > salida | ||
− | </pre> | + | </pre></nowiki>}} |
− | + | ||
− | + | Luego, ejecute el siguiente comando | |
− | + | ||
− | + | {{Command|sbatch ./run.sh}} | |
− | + | ||
− | + | ||
− | + | ==Ejecutar Programas Utilizando OAR== | |
− | + | ||
− | + | ||
− | + | ===¿Cómo Ejecutar Trabajos Seriales?=== | |
− | + | ||
− | + | ||
− | + | Edite un script shell, de nombre '''serial_job.sh''', con el siguiente contenido | |
− | + | ||
− | + | {{File|serial_job.sh|</nowiki><pre> | |
− | + | #!/bin/bash | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
#OAR -n nombreDelTrabajo | #OAR -n nombreDelTrabajo | ||
/camino/del/programa | /camino/del/programa | ||
− | </pre> | + | </pre></nowiki>}} |
− | + | ||
− | + | 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. | |
− | + | ||
− | + | Luego, ubíquese en el mismo directorio donde creó el scrip shell anterior y ejecute el siguiente comando | |
− | + | ||
− | + | {{Command|oarsub ./serial_job.sh}} | |
− | + | ||
− | + | ||
− | + | ===¿Cómo Ejecutar Trabajos Paralelos MPI?=== | |
− | + | ||
− | + | ||
− | + | Edite un script shell, de nombre '''parallel_job.sh''', con el siguiente contenido | |
+ | |||
+ | {{File|parallel_job.sh|<nowiki><pre> | ||
+ | #/bin/bash | ||
#OAR -n mpitest | #OAR -n mpitest | ||
− | # cat $OAR_FILE_NODES | sort | uniq | + | # 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 | mpirun -map-by node -mca btl ^openib -machinefile $OAR_FILE_NODES -np 96 ./programaParaleloEjecutable | ||
− | </pre> | + | </pre></nowiki>}} |
− | + | ||
− | + | 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. | |
− | + | ||
− | + | Luego, ubíquese en el mismo directorio donde creó el scrip shell anterior y ejecute el siguiente comando | |
− | + | ||
− | + | {{Command|<nowiki> oarsub -l nodes=2 ./parallel_job.sh </nowiki>}} | |
− | + | ||
+ | La opción '''-l nodes=2''' indica que el trabajo se ejecutará en 2 nodos del cluster. Usted puede cambiar este | ||
+ | valor a conveniencia. |
Revision as of 16:12, 25 May 2016
Contents
- 1 MANEJADORES DE TAREAS
- 1.1 Ejecución de Programas Utilizando Slurm
- 1.1.1 ¿Cómo Ejecutar Trabajos Seriales?
- 1.1.2 ¿Cómo Ejecutar Trabajos Seriales Usando un Script Shell?
- 1.1.3 ¿Cómo Ejecutar Trabajos Paralelos con OpenMP? (Memoria Compartida)
- 1.1.4 ¿Cómo Ejecutar Trabajos Paralelos con OpenMPI? (Memoria Distribuida)
- 1.1.5 ¿Cómo Eliminar un Trabajo?
- 1.1.6 ¿Cómo Crear una Sesión Interactiva?
- 1.1.7 ¿Cómo Ver la Cola de Trabajos?
- 1.1.8 ¿Cómo Hacer Uso de GPUs?
- 1.1.9 ¿Cómo Correr VASP?
- 1.1.10 ¿Cómo Correr Quantum Espresso?
- 1.2 Ejecutar Programas Utilizando OAR
- 1.1 Ejecución de Programas Utilizando Slurm
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:
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:
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:
#!/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:
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:
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:
Este comando ejecuta el script ./mpi.sh en el conjunto de los nodos del cluster.
¿Cómo Eliminar un Trabajo?
Ejecute el siguiente comando:
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:
Esto abre un shell a un nodo del cluster. .
¿Cómo Ver la Cola de Trabajos?
Ejecute el siguiente comando:
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
¿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:
Luego, ejecute el siguiente comando
¿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:
Luego, ejecute el siguiente comando
Ejecutar Programas Utilizando OAR
¿Cómo Ejecutar Trabajos Seriales?
Edite un script shell, de nombre serial_job.sh, con el siguiente contenido
#!/bin/bash #OAR -n nombreDelTrabajo /camino/del/programa</nowiki>
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.
Luego, ubíquese en el mismo directorio donde creó el scrip shell anterior y ejecute el siguiente comando
¿Cómo Ejecutar Trabajos Paralelos MPI?
Edite un script shell, de nombre parallel_job.sh, con el siguiente contenido
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.
Luego, ubíquese en el mismo directorio donde creó el scrip shell anterior y ejecute el siguiente comando
La opción -l nodes=2 indica que el trabajo se ejecutará en 2 nodos del cluster. Usted puede cambiar este
valor a conveniencia.