Diferencia entre las páginas «Escalamiento» y «Archivo:Cpu subutilizacion.png»

De NLHPC
(Diferencia entre las páginas)
Sin resumen de edición
 
Sin resumen de edición
 
Línea 1: Línea 1:
== Concepto de Escalamiento ==
a
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.
<pre>speedup = tiempo 1 proceso / tiempo N procesos</pre>
 
 
La Eficiencia se obtiene calculando el cociente entre el Speedup y el Número de Procesos asignados a la tarea.
<pre>eficiencia = speedup / Número de Procesos</pre>
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:
<pre>
#!/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
</pre>
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:
 
<pre>
#!/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
</pre>
 
La siguiente es la tabla de comparación en relación a número de procesos, tiempo de ejecución, Speedup y Eficiencia:
 
<table class="wikitable">
 
<tr>
<th>Procesos <br> <code>-n</code></th>
<th>Tareas por Nodo<br><code>--ntasks-per-node</code></th>
<th>Tiempo</th>
<th>Speedup</th>
<th>Eficiencia
</th></tr>
<tr>
<td>1</td>
<td>1</td>
<td>01:00:27</td>
<td>1</td>
<td>1
</td></tr>
<tr>
<td>2</td>
<td>2</td>
<td>00:33:47</td>
<td>1,8</td>
<td>0,9
</td></tr>
<tr>
<td>4</td>
<td>4</td>
<td>00:18:02</td>
<td>3,4</td>
<td>0,8
</td></tr>
<tr>
<td>8</td>
<td>8</td>
<td>00:09:13</td>
<td>6,6</td>
<td>0,8
</td></tr>
<tr>
<td>16</td>
<td>16</td>
<td>00:05:06</td>
<td>11,9</td>
<td>0,7
</td></tr>
<tr>
<td>32</td>
<td>16</td>
<td>00:02:31</td>
<td>24,0</td>
<td>0,8
</td></tr>
<tr>
<td>64</td>
<td>16</td>
<td>00:01:18</td>
<td>46,5</td>
<td>0,7
</td></tr>
<tr>
<td>128</td>
<td>16</td>
<td>00:00:48</td>
<td>75,6</td>
<td>0,6
</td></tr>
<tr>
<td>256</td>
<td>16</td>
<td>00:00:34</td>
<td>106,7</td>
<td>0,4
</td></tr>
<tr>
<td>500</td>
<td>20</td>
<td>00:00:31</td>
<td>117,0</td>
<td>0,2
</td></tr>
<tr>
<td>600</td>
<td>20</td>
<td>00:00:35</td>
<td>103,6</td>
<td>0,2
</td></tr>
<tr>
<td>700</td>
<td>20</td>
<td>00:00:35</td>
<td>103,6</td>
<td>0,1
</td></tr></table>
 
Una vez que hemos obtenido resultados suficientes, podemos graficar el comportamiento de nuestra tarea, obteniendo una comparativa entre Speedup v/s Eficiencia:
 
 
<gallery widths=600px heights=400px >
Escalamiento-2022.png
</gallery>
 
 
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 ==
* [https://www.uv.es/varnau/OC_T4.pdf Introducción al paralelismo y al rendimiento]
* [http://www.shodor.org/media/content/petascale/materials/UPModules/beginnersGuideHPC/moduleDocument_pdf.pdf A Begginer's Guide to High-Performance Computing]

Revisión actual - 15:36 6 sep 2022

a