¿Cómo correr trabajos?
Esta sección describe el uso de los recursos del SC3
Contents
- 1 ¿Cómo Compilar Programas?
- 2 Ejecución de Trabajos
- 2.1 ¿Cómo Ejecutar Trabajos Seriales?
- 2.2 ¿Cómo Ejecutar Trabajos Seriales Usando un Script Shell?
- 2.3 ¿Cómo Ejecutar Trabajos Paralelos con OpenMP? (Memoria Compartida)
- 2.4 ¿Cómo Ejecutar Trabajos Paralelos con OpenMPI? (Memoria Distribuida)
- 2.5 ¿Cómo Eliminar un Trabajo?
- 2.6 ¿Cómo Crear una Sesión Interactiva?
- 2.7 ¿Cómo Ver la Cola de Trabajos?
- 2.8 ¿Cómo Hacer Uso de GPUs?
- 2.9 ¿Cómo Correr VASP?
- 2.10 ¿Cómo Correr Quantum Espresso?
- 2.11 Ejecutar Python Notebooks
- 2.12 ¿Cómo Ejecutar Matlab?
¿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
#!/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:
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:
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:
#!/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:
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?
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:
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:
#!/bin/bash #SBATCH --partition=all #SBATCH -o vasp.%j.out #SBATCH -J vasp:test #SBATCH --nodes=1 #SBATCH --ntasks=16 #SBATCH --tasks-per-node=16 # set I_MPI_PMI_LIBRARY to link with SLURM export I_MPI_PMI_LIBRARY=/usr/local/slurm/lib/libpmi.so source /usr/local/intel2018/parallel_studio_xe_2019/bin/psxevars.sh intel64 2> /dev/null ulimit -s unlimited -c unlimited export OMPI_MCA_btl=^openib srun vasp_std
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:
#!/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
Ejecutar Python Notebooks
Edite un archivo de nombre jupiter.batch y agregue el siguiente contenido
#!/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
Tome nota del nodo de Guane donde se ejecuta la tarea. Puede ver el nombre del nodo con el comando
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:
#!/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:
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:
#!/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: