Envío de Trabajos al Clúster
Cada usuario ingresará a mazinger.ing.puc.cl vía SSH, el cual procesará todas las peticiones que le sean enviadas. Este servidor es para que los usuarios prueben su código y luego envíen sus trabajos a los nodos de computo, no es para ejecutar trabajos.
Al enviar un trabajo, este es recibido por un servidor de cabecera, el cual se encarga de distribuir el trabajo en los nodos para que sea resuelto. Posteriormente se podrá ver los resultados dependiendo del tipo de salida que haya definido el usuario.
El clúster usa el gestor de tareas SLURM, por lo que recomendamos leer la documentación básica para el uso de este sistema.
SSH es un protocolo para una conexión remota segura. En Linux, que es el sistema operativo que usa el clúster, se usa este protocolo para conectarse al servidor de “Login”. La interfaz que se usa es “línea de comando” y hay diferentes clientes SSH según el sistema operativo, en Linux y MAC el cliente es nativo, en el caso de Windows también puede encontrar el comando “ssh” en la terminal del sistema, pero sí requiere algo gráfico puede usar Putty.
Los trabajos deben ser enviados a una cierta cola de trabajo, esto hace que se pueda ordenar mejor la ejecución de los trabajos de los usuarios. Las colas de trabajo habilitadas para el uso son:
Cola de trabajo “full”
Esta cola cuenta con 6 nodos de cómputo y esta disponible para todos los usuarios.
- Procesadores INTEL
- 132 núcleos de dos hilos cada uno.
- 412 GB RAM
Cola de trabajo “512×1024”
Esta cola cuenta con 3 nodos de cómputo y esta disponible para todos los usuarios.
- Procesadores AMD
- 352 núcleos de dos hilos cada uno.
- 1280 GB RAM.
Cola de trabajo “gpus”
Esta cola cuenta con 1 nodo de cómputo y esta disponible para todos los usuarios pero con prioridad para el equipo de trabajo de los profesores que aportaron este nodo.
- Procesadores INTEL
- 48 núcleos de dos hilos cada uno.
- 1536 GB RAM.
- 7 GPUS (Nvidia Quadro RTX 8000)
Antes de enviar un trabajo al clúster se deben verificar los recursos disponibles para configurar correctamente el script, para eso se debe ejecutar:
squeue
El comando para enviar un trabajo es sbatch, el cual permite colocar un trabajo en una cola. Si bien a sbatch se le pueden pasar todos los parámetros directamente, se recomienda crear un script que permita definir los parámetros para el trabajo, hay ejemplos mas abajo. Posteriormente se podrá enviar el trabajo como:
sbatch submit.sh
Este es un ejemplo del archivo que se le puede pasar a sbatch. Dentro de él se indican las CPUs que requiere su trabajo. Debe comprender que no por solicitar mas CPUs su trabajo se ejecutara mas rápido, para que un programa use varias CPUs al mismo tiempo debe codificar su programa para que use todos los recursos solicitados, por ejemplo en Python puede usar Multiprocessing, o para C, C++ o Fortran puede usar OpenMP.
Este es un ejemplo para un programa que no esta creado para usar multiproceso.
#!/bin/bash # Nombre del trabajo #SBATCH --job-name=Prueba1 # Archivo de salida #SBATCH --output=salida.txt # Cola de trabajo #SBATCH --partition=full # Reporte por correo #SBATCH --mail-type=ALL #SBATCH --mail-user=usuario@ing.puc.cl # Solicitud de cpus #SBATCH --ntasks=1 #SBATCH --cpus-per-task=1 python calculo.py
Si su programa puede usar mas de una CPU en el parámetro “–cpus-per-task” debe indicar la cantidad de CPUs que requiere.
Si su programa puede ejecutarse en mas de un nodo de computo en el parámetro “–ntasks” debe indicar la cantidad de instancias que requiere.
Este es un ejemplo del archivo que se le puede pasar a sbatch para usar una GPU. Al igual que para usar múltiples CPUs, para usar GPUs su programa debe estar codificado para usar este recurso. La cola de trabajo “gpus” cuenta con un nodo el cual tiene 5 GPUs.
#!/bin/bash # Nombre del trabajo #SBATCH --job-name=Prueba1 # Archivo de salida #SBATCH --output=salida.txt # Cola de trabajo #SBATCH --partition=gpus # Solicitud de gpus #SBATCH --gres=gpu:quadro_rtx_8000:1 # Reporte por correo #SBATCH --mail-type=ALL #SBATCH --mail-user=usuario@ing.puc.cl python calculo.py
Si su programa esta creado para usar todas las CPUs que dispone un nodo de computo, este ejemplo solicita dos nodos.
#!/bin/bash # Nombre del trabajo #SBATCH --job-name=Prueba1 # Archivo de salida #SBATCH --output=salida.txt # Cola de trabajo) #SBATCH --partition=full # Reporte por correo #SBATCH --mail-type=ALL #SBATCH --mail-user=usuario@ing.puc.cl # Solicitud de cpus #SBATCH --nodes=2 python calculo.py
Para monitorear se puede utilizar el comando squeue o sinfo.
El comando squeue entrega información de los trabajos que hay en ese momento en el clúster. Uno de los campos importantes es “ST”, en ese campo se indica el estado del trabajo, si esta en “R” quiere decir que se esta ejecutando, pero si hay trabajos en estado “PD”, que es pendiente, quiere decir que el clúster tiene utilizados todos sus recursos y que los trabajos que se envíen quedaran esperando. Para estos trabajos en estado pendiente o en espera se comienza a aplicar la priorización multifactor que se explica en las “Políticas de Uso“. La salida estándar del comando squeue es la siguiente:
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) 30070 full Trabajo1 usuario1 R 1:07:37 1 n10 30062 full Trabajo2 usuario1 R 3:00:36 1 n10 30061 full Trabajo3 usuario1 R 3:00:39 1 n8 30037 full Trabajo4 usuario1 R 7:41:46 1 n6 30029 full Trabajo5 usuario1 R 7:42:06 1 n12 30016 full T24 usuario4 R 14:59:06 1 n4 29941 full Trabajo8 usuario2 R 19:43:42 1 n2 29746 full T12.1 usuario3 R 1-23:27:50 1 n8 29657 full T12.1 usuario3 R 3-00:05:19 1 n9 29411 full J123-1 usuario8 R 6-02:49:29 1 n2 29193 full J123-2 usuario8 R 8-00:13:19 1 n15
También se puede formatear la salida para que entregue la información de la forma que se requiera:
squeue -o "%.10u %.10i %.10P %.20j %.11M %.10T %.4C %N" -S -t
USER JOBID PARTITION NAME TIME STATE CPUS NODELIST usuario1 30063 full Trabajo1 1:43:09 RUNNING 32 n9 usuario5 30062 full Trabajo5 3:10:53 RUNNING 16 n10 usuario5 30018 full Trabajo5.1 7:52:53 RUNNING 24 n15 usuario3 30017 full Trabajo3 13:53:33 RUNNING 8 n8 usuario8 29403 full Trabajo8 6-03:00:23 RUNNING 16 n15 usuario8 29193 full Trabajo8.1 8-00:23:36 RUNNING 16 n15
El comando sinfo entrega información de los nodos de computo, su salida estándar es la siguiente:
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST full* up infinite 8 mix n[2-4,6,8-10,12] full* up infinite 1 alloc n15 512x1024 up infinite 2 idle n[1,11] gpus up infinite 1 idle n7
También se puede formatear la salida para que entregue la información de la forma que se requiera:
sinfo -N -o "%.10N %.10O %.10e %.20C"
NODELIST CPU_LOAD FREE_MEM CPUS(A/I/O/T) n1 0.01 463832 0/256/0/256 n2 20.28 77392 14/18/0/32 n3 24.94 27538 6/26/0/32 n4 5.26 36229 20/12/0/32 n6 2.93 17183 4/28/0/32 n7 0.09 194103 0/96/0/96 n8 139.47 10430 57/7/0/64 n9 82.33 16673 38/2/0/40 n10 23.81 7659 22/10/0/32 n11 0.01 492040 0/256/0/256 n12 20.69 11915 24/8/0/32 n15 49.76 63109 32/0/0/32
Si por algún motivo desea eliminar un trabajo, lo puede realizar con el comando scancel. Por ejemplo para eliminar el trabajo que aparece en el ejemplo anterior se debe ejecutar:
scancel 23
Las salidas de los trabajos se almacenaran en el archivo que se indique con el parámetro “–output”, además en los ejemplos se indican los parámetros para que llegue información por correo.