Escalamiento

De NLHPC

Concepto de Escalamiento

Cuando nos referimos al Escalamiento de un programa, debemos apuntar al comportamiento del programa a medida que se ejecuta de manera paralela al tener mayor cantidad de procesadores para utilizar. De ser así, podemos considerar que el programa a utilizar permite ser escalable y podremos calcular su eficiencia.

Entonces, el escalamiento de un programa será calculado a razón de un determinado rango de procesadores a utilizar, pero pasado ciertos niveles -según el programa-, no importará la cantidad de procesadores que podamos asignar, ya que su eficiencia no será la óptima, e incluso puede verse afectada de manera negativa.

Importancia del Escalamiento de Programas

La importancia respecto a cómo escalan los programas se debe al uso óptimo de recursos disponibles, permitiendo que cada usuario obtenga los resultados esperados en un mejor tiempo en comparación a trabajos secuenciales, como también sabiendo que una incorrecta asignación de recursos puede hacer que los resultados deseados se obtengan un mayor período de tiempo como también que la tarea falle.

Además, una incorrecta asignación de recursos no solo afectará al usuario que intenta ejecutar una tarea, ya que también afectará a los otros usuarios del Cluster que requieren poder de cómputo.

Un escalamiento adecuado permitirá un uso eficiente de los recursos para la ejecución de nuestras tareas y las de todos.

Calculando el Speedup y Eficiencia de mi programa

Para realizar el escalamiento de un programa, utilizaremos dos métricas: Speedup y Eficiencia.

El Speedup se obtiene calculando el cociente entre el tiempo de ejecución secuencial (1 proceso) y el tiempo de ejecución aumentando la cantidad de procesos asignados a la misma tarea.

speedup = tiempo 1 proceso / tiempo N procesos


La Eficiencia se obtiene calculando el cociente entre el Speedup y el Número de Procesos asignados a la tarea.

eficiencia = speedup / Número de Procesos

La realización de este ejercicio consta en modificar la cantidad de procesadores a utilizar y comparar sus tiempos de ejecución. Cada tarea ejecutada debe ser planeada según los recursos disponibles en las particiones que necesitamos utilizar, como también considerar la agrupación de tareas.

En nuestro siguiente ejemplo hemos ejecutado una tarea en la partición Slims y utilizado el software LAMMPS. Al ejecutarlo por primera vez, asignando un solo proceso( #SBATCH -n 1 ), el tiempo de ejecución alcanzó a 1 hora con 27 segundos.

El script utilizado fue:

#!/bin/bash
#SBATCH -J escalamiento
#SBATCH -p slims
#SBATCH -n 1
#SBATCH --ntasks-per-node=1
#SBATCH --mail-user=$USER@nlhpc.cl
#SBATCH --mail-type=FAIL
#SBATCH -o escalamiento_%j.out
#SBATCH -e escalamiento_%j.err

ml purge
ml intel
ml impi
ml icc
ml LAMMPS/20Nov19

srun lmp_intel_cpu_intelmpi -in input-file/in.poly-bench

En las siguientes iteraciones, en donde aumentamos el número de procesos, los tiempos de ejecución fueron bajando. Los parámetros que fueron siendo modificados fueron:

  • Número de procesos (tareas en paralelo): -n X
  • Número de tareas por nodo (aumentando según los límetes de la partición Slims): --ntasks-per-node=X

Por ejemplo, el script usado para la prueba con 128 procesos fue:

#!/bin/bash
#SBATCH -J escalamiento
#SBATCH -p slims
#SBATCH -n 128
#SBATCH --ntasks-per-node=16
#SBATCH --mail-user=$USER@nlhpc.cl
#SBATCH --mail-type=FAIL
#SBATCH -o escalamiento_%j.out
#SBATCH -e escalamiento_%j.err

ml purge
ml intel
ml impi
ml icc
ml LAMMPS/20Nov19

srun lmp_intel_cpu_intelmpi -in input-file/in.poly-bench

La siguiente es la tabla de comparación en relación a número de procesos, tiempo de ejecución, Speedup y Eficiencia:

Procesos
-n
Tareas por Nodo
--ntasks-per-node
Tiempo Speedup Eficiencia
1 1 01:00:27 1 1
2 2 00:33:47 1,8 0,9
4 4 00:18:02 3,4 0,8
8 8 00:09:13 6,6 0,8
16 16 00:05:06 11,9 0,7
32 16 00:02:31 24,0 0,8
64 16 00:01:18 46,5 0,7
128 16 00:00:48 75,6 0,6
256 16 00:00:34 106,7 0,4
500 20 00:00:31 117,0 0,2
600 20 00:00:35 103,6 0,2
700 20 00:00:35 103,6 0,1

Una vez que hemos obtenido resultados suficientes, podemos graficar el comportamiento de nuestra tarea, obteniendo una comparativa entre Speedup v/s Eficiencia:


Escalamiento-2022.png Es recomendable que la eficiencia que se busque siempre sea superior a 0,5 (con un décimal), por lo que el uso de más de 128 procesos o más, según nuestro ejemplo, serán descartados. Incluso podemos agregar que el uso de más de 256 procesos y más no representa una verdadera mejora, e incluso afectará la cola de trabajo evitando que otras tareas entren en ejecución.

Ante esto, es recomendable seleccionar 128 o 64 procesadores para optar a un tiempo menor de ejecución y a una mejor eficacia.

Cuentas de Pruebas

El NLHPC pone a disposición cuentas para la realización de Pruebas de Escalamiento.

Estas cuentas tienen las siguientes características:

  • 500 cores
  • 6 horas de tiempo de ejecución
  • 100Gb de Almacenamiento
  • 1 semana de duración

Pueden ser solicitadas desde nuestra página de SOLICITUD DE CUENTAS indicar que realizará la prueba de escalamiento.

Estudio de Escalamiento

Es importante que si va a solicitar una cuenta en el Cluster del NLHPC, realice una prueba de escalamiento como la indicada anteriormente en donde se pueda medir el Speedup y la Eficiencia.

Puede descargar la siguiente plantilla para ver un ejemplo y editarla con los datos de su aplicación.

Ejecución de varias instancias de mi programa

Una vez concluido tu estudio de escalamiento, podrás considerar una mayor cantidad de procesadores/cores a solicitar.

Siguiendo nuestro ejemplo anterior, si el valor máximo para una tarea es de 128 procesos en paralelo y teniendo la necesidad de ejecutar LAMMPS con 3 archivos distintos de entrada, podré solicitar 384 cores al momento de requerir mi cuenta.

Ejecución de distintos programas que escalen

En el caso de que sea necesario ejecutar distintos programas que puedan ser paralelizables, lo ideal es que el cálculo de escalamiento sea realizado en el programa que más recursos requiera.

Siempre considera realizar pruebas que sean un reflejo a las tareas reales que ejecutarás de esta manera existirá una correlación con lo que reportes y el comportamiento en producción de tus tareas.

Programas secuenciales

Si utilizará programas secuenciales que no soporten paralelización, no es necesario realizar el estudio de escalamiento.

En el caso de que reserve recursos a modo de intentar paralelizar una tarea secuencial, solo generará una reserva de recursos incorrecta, generando estados ociosos, los que son considerados subutilización y su tarea será cancelada.

Y por último si necesita ejecutar varias tareas secuenciales, estas se podrán lanzar de manera simultanea aprovechando los recursos disponibles.

Pasos a seguir

Ya hemos visto el proceso de calcular el escalamiento de un programa, requerido para cuando soliciten cuentas en el Cluster del NLHPC.

Recuerda que las tareas de los usuarios son monitoreadas para dar un uso adecueado a los recursos. Si quieres saber más visita nuestra sección sobre Monitoreo De Tareas.

Enlaces de Interés