Estudio de Eficiencia

De NLHPC

¿Qué significa que mi programa escale?

Este concepto hace referencia a como se comporta un programa paralelo (que usa más de un procesador) al aumentar el número de procesadores. Un sistema se dice que es escalable para un determinado rango de procesadores [1... n], si la eficiencia E(n) del sistema se mantiene constante y en todo momento por encima de un factor 0.5. Normalmente todos los sistemas tienen un determinado número de procesadores a partir del cual la eficiencia empieza a disminuir de forma más o menos brusca. Un sistema es más escalable que otro si este número de procesadores, a partir del cual la eficiencia disminuye, es menor que el otro.

  • Speedup: El speedup es la principal métrica que nos indica la ganancia que obtenemos mediante la paralelización.
  • Eficiencia: Se define como el cociente entre el speedup y el número de procesos en los que ejecutamos la aplicación.

¿Por qué es importante conocer como escala mi programa?

En nuestra infraestructura, históricamente los usuarios suelen usar el máximo de cores que pueden solicitar. No obstante, una ejecución con 120 cores (valor que concedíamos por defecto hasta mitad de 2018) no tiene porqué ser dos veces más rápida que una ejecución con 60 cores, de hecho puede que sea más lenta. Si esto lo aplicamos a una asignación con mayor número de cores (como las que ahora se permiten) puede provocar un muy mal uso de los recursos, que afectaría negativamente a todos los usuarios de nuestra infraestructura, por lo mismo es que decidimos tomar esta medida y así mitigar que se produzca ese mal uso. Con la colaboración de todos los usuarios, los recursos se ocuparán de manera más eficiente y disminuirán los tiempos de obtención de los resultados.

¿Cómo calculo el escalamiento/speedup de mi programa?

El speedup es la principal métrica que nos indica la ganancia que obtenemos mediante la paralelización. Se obtiene calculando el cociente entre el tiempo de ejecución de nuestro programa de manera secuencial (1 core) y el tiempo de ejecución al ir aumentando los cores:

Formula.png


Para realizar el cálculo de escalamiento de su programa, el NLHPC proveerá cuentas de prueba con distintas capacidades computacionales.

Ejemplo

El tiempo original de una aplicación que necesitamos escalar utilizando 1 core es de 5 segundos. Para calcular el speedup vamos incrementando los cores de acuerdo a la fórmula:

Calculo-speedup.png


Llevando estos resultados a una tabla tenemos lo siguiente:


Nº Cores 2 4 6 8 10 12 14 16
Tiempo 2.50 2.00 1.66 1.25 1.20 1.18 1.18 1.18
Speedup 2.00 2.50 3.01 4.00 4.16 4.23 4.23 4.23
Eficiencia 1.0 0.6 0.5 0.5 0.4 0.3 0.3 0.2


Al graficar estos datos:

Grafico speedup.png

Dada que la eficiencia debe de ser mayor a 0.5 (con un decimal), el número de cores a solicitar debería de ser a lo sumo 4. De hecho no se deberían de seguir lanzando ejecuciones a partir de 6 cores, dónde se ve que la eficiencia es igual (o inferior) a 0.5, a modo de prueba para este ejemplo hemos realizado unas ejecuciones más allá de este número.

¿Cuáles son las capacidades de las cuentas de prueba?

Las cuentas de prueba tienen las siguientes

  • 500 cores.
  • 6 horas de tiempo de ejecución.
  • 100 GB de espacio lustre.
  • 1 Semana de duración.

¿Qué debo entregar para hacer mi solicitud de cuenta?

Lo más importante que debe anexar en la sección Escalamiento de la solicitud de cuentas es la gráfica del speedup obtenida de acuerdo a la explicación del punto anterior.

¿Qué ocurre si mi programa es secuencial?

Si tu programa es secuencial, no tiene sentido realizar pruebas de escalamiento. No obstante, si tienes que lanzar muchas simulaciones secuenciales y estas pueden correr de manera simultánea, podrás solicitar el número de cores equivalente al número de simulaciones.

¿Qué ocurre si tengo que lanzar varias instancias de mi programa?

Si puedes lanzar varias instancias de tu programa de manera simultánea, podrías solicitar los recursos teniendo en cuenta el número de cores que requiere cada una de las simulaciones y cuántas simulaciones puedas lanzar en paralelo. Así pues, si cada una de tus simulaciones escala bien hasta 120 cores y puedes lanzar dos simulaciones en paralelo, tendría sentido solicitar 240 cores.

¿Qué ocurre si tengo que ejecutar distintos programas que escalan distinto?

En este caso la idea es que realices la gráfica del speedup para el programa que ocupe más recursos.

¿El escalamiento es dependiente de la entrada del programa?

Sí, con entradas de distinto tamaño puede variar el escalamiento. Es por esto que te pedimos que tus pruebas de escalabilidad sean lo más cercanas a tus ejecuciones finales en el cluster.

¿He de ejecutar simulaciones completas?

La idea es que lances las simulaciones de la manera más acotada posible. Es decir, si tu programa muestra el tiempo por pasos/iteraciones (o puedes modificar tu programa para que lo muestre) que tardan el mismo tiempo, con tomar el tiempo de un único paso sería suficiente.

¿Cuál es el máximo de recursos a solicitar?

No existe un máximo de recursos a solicitar, pero el otorgamiento estará limitado a la capacidad del cluster (actualmente 2640 cores). Además, es importante recordar que todas las solicitudes de recursos serán evaluadas y, en base a las evaluaciones, se repartirán los recursos disponibles.

Formato de documento a entregar

El archivo de ejemplo para adjuntar en el formulario para la sección de Escalamiento, se encuentra acá, el archivo a adjuntar para ejecuciones secuenciales está en el siguiente link

Monitoreo de Tareas

Un aspecto fundamental del uso del cluster es el monitoreo de los nodos de cómputo asignados. Para el monitoreo de sus pruebas de escalamiento, le recomendamos visitar el siguiente enlace Monitoreo de Tareas

Referencias