Diferencia entre las páginas «Descripción General del Sistema» y «Escalamiento»

De NLHPC
(Diferencia entre las páginas)
Sin resumen de edición
 
 
Línea 1: Línea 1:
== National Laboratory for High Performance Computing ==
== Concepto de Escalamiento ==
El NLHPC en Chile está dirigido a la instalación en Chile de una capacidad computacional que pueda satisfacer la demanda científica nacional de computación de alto rendimiento (HPC), ofreciendo servicios de alta calidad y promoviendo su uso en las problemáticas de Investigación tanto básica como también aplicada, con énfasis en aplicaciones industriales. En años recientes, el desarrollo de las ciencias aplicadas y la industria ha sido dirigido por el uso sofisticado de las tecnologías de la información y las comunicaciones (ICT), proceso en el cual HPC ha jugado un rol fundamental.
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.


Nuestros servicios están diseñados para ofrecer soporte al ciclo de vida completo de la investigación e innovación basada en HPC.
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.


== Misión del NLHPC ==
== Importancia del Escalamiento de Programas ==
La consolidación de una facilidad a nivel nacional de HPC al ofrecer servicios de alta calidad y training avanzado para así responder a la alta demanda de computación científica, desarrollando lazos entre grupos de investigación, la industria y el sector público.
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.


== Visión del NLHPC ==
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.
Visionamos al NLHPC como un centro altamente competitivo con una gama de servicios para la investigación en computación de alto rendimiento de calidad de clase mundial.


== Objetivo General ==
Un escalamiento adecuado permitirá un uso eficiente de los recursos para la ejecución de nuestras tareas y las de todos.
El NLHPC servirá como socio IT clave para los proyectos de investigación basados en HPC a gran escala.


=== Objetivos específicos ===
== Calculando el Speedup y Eficiencia de mi programa ==
Desarrollar y dar soporte a recursos computacionales y de redes eficaces y confiables permitiendo a investigadores nacionales tener acceso a capacidad HPC para así resolver intensos problemas científicos de computación y data. Estimular y participar en la creación de una red nacional de alta velocidad para la transmisión de data de investigación Usar y explorar arquitecturas y técnicas innovadoras para acelerar la computación científica. Gatillar nuevas iniciativas industriales en HPC. Ayudar a educar a las próximas generaciones de científicos e ingenieros en HPC. Incrementar la conciencia social sobre el rol de HPC en la sociedad contemporánea y el desarrollo tecnológico.
Para realizar el escalamiento de un programa, utilizaremos dos métricas: Speedup y Eficiencia.


Infraestructura Guacolda-Leftraru
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.
Infraestructura Leftraru
<pre>speedup = tiempo 1 proceso / tiempo N procesos</pre>
44 TFlops
2640 cores
132 nodos slims
12 Xeon Phi
Infiniband FDR 56 Gbps
Red servicio 1 Gpbs
Red iLO para administracion de hardware
Racks enfriados por agua
Enfriamiento in-row respaldo
UPS 120 KVA autonomia: 30 mins
Infraestructura Guacolda
150 TFlops sin coprocesadores
48 nodos, 2 x Intel(R) Xeon(R) Gold 6152 CPU @ 2.10GHz. 22 cores c/u 187 GB de RAM
9 nodos, 2 x Intel(R) Xeon(R) Gold 6152 CPU @ 2.10GHz. 22 cores c/u 765 GB de RAM
2 nodos, 2 x Intel(R) Xeon(R) Gold 6152 CPU @ 2.10GHz. 22 cores c/u 187 GB de RAM y 2x NVIDIA Tesla V100 c/u
Nueva generación de procesadores Intel Xeon Skylake (SP)
Intel Advanced Vector Extensions 512 (Intel AVX-512)
Ganancia en el rendimiento en aplicaciones de deep learning de hasta 113x (respecto a los procesadores de Leftraru)
Almacenamiento Cluster
Almacenamiento paralelo de clase mundial
Alto rendimiento en operaciones IO
Tolerante a fallas (alta disponibilidad)
Interconexión infiniband
Capacidades Big Data
Características en Guacolda-Leftraru


4 PB de almacenamiento IBM Elastic Storage System (IBM ESS 3200)
 
Almacenamiento metadata separado
La Eficiencia se obtiene calculando el cociente entre el Speedup y el Número de Procesos asignados a la tarea.
2 controladoras SFA en H.A
<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>
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 del 15:20 6 sep 2022

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:



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