Desde 0.01 TFlops HPL hasta ASC'18 Application Innovation

Hola Habr! Continuamos una serie de artículos sobre la participación de un equipo de la Universidad Estatal de San Petersburgo (nos llamamos EnterTildeDot) en las competencias de supercomputadoras de estudiantes más grandes del mundo.



En este artículo, consideraremos el camino hacia ASC'18 utilizando el ejemplo de un miembro del equipo, prestando especial atención a la tarjeta de visita de las competiciones y las supercomputadoras modernas en general: Linpack. Bueno, veamos el secreto para lograr un rendimiento récord y antirregistro de un sistema informático.


Un breve recorrido por las competiciones de supercomputadoras


Información general sobre qué tipo de competencia se puede encontrar en nuestros artículos anteriores, incluida la larga publicación sobre la competencia de este año. Sin embargo, para completar, alguna información sobre la competencia en su conjunto, todavía damos aquí.


El Asian Supercomputer Challenge es uno de los tres eventos principales del equipo informático de alto rendimiento que atrae anualmente a más y más equipos de estudiantes de todo el mundo. ASC, como otras competiciones similares, asume la existencia de una ronda clasificatoria y final con las siguientes disposiciones:


  • Actividad primaria: solución de problemas de HPC;
  • Equipo: 5 estudiantes + entrenador;
  • Etapa de calificación: una descripción ausente de la propuesta con una descripción de la solución de los problemas presentados, sobre la base de la cual se determina una lista de 20 finalistas.
  • La etapa final: competencia a tiempo completo para 20 equipos con una duración de aproximadamente 5 días competitivos, incluido el montaje y la configuración completos del clúster informático, la resolución de problemas y la presentación. El grupo se ensambla sobre la base de restricciones en la potencia de 3 kW, ya sea del hierro proporcionado por los organizadores, o de la suya. El clúster no tiene acceso a internet. Las tareas coinciden parcialmente con las tareas de la etapa de calificación, pero también existe una tarea desconocida: Mystery Application.

Bueno, ahora en orden con retiros al programa educativo. A diferencia de otros miembros del equipo que ya llegaron a la final de ASC'17, me uní al movimiento competitivo solo este año. Me uní al equipo en septiembre, las tareas de la etapa de calificación se envían solo en enero, por lo que tuve tiempo suficiente para estudiar los conceptos básicos de la competencia, así como para estudiar la única tarea conocida: HPL y HPCG. Una tarea de una forma u otra ocurre casi todos los años, sin embargo, no siempre se sabe de antemano qué equipo necesita realizar la tarea (a veces los organizadores proporcionan acceso remoto a sus propios recursos).


HPL


HPL (High Performance Computing Linpack Benchmark) es una prueba del rendimiento de un sistema informático, basado en los resultados de los cuales se forma una lista moderna de las mejores supercomputadoras del mundo. La esencia de la prueba es resolver sistemas densos de ecuaciones algebraicas lineales. La aparición de este punto de referencia introdujo una métrica que le permite clasificar las supercomputadoras, al tiempo que proporciona un "servicio de soporte" a la comunidad HPC. Si mira la lista de las mejores supercomputadoras, puede comprender que el secreto de Lynpak se resolvió con bastante rapidez: tome tantos aceleradores gráficos como pueda y estará en la parte superior. Por supuesto, hay excepciones, pero son las supercomputadoras con aceleradores gráficos que ocupan los primeros lugares. ¿Qué es el "servicio de oso"? El hecho es que, además de medir el rendimiento, Lynpak no se usa en ningún otro lugar y no tiene nada que ver con tareas informáticas reales. Como resultado, la carrera de la supercomputadora fue al lado de obtener la mayor eficiencia de Linpak, y no cargas de trabajo reales, como resolver tareas típicas de USO en lugar de dominar el plan de estudios de la escuela.


Los desarrolladores de HPL también han creado otro paquete: HPCG, en base al cual también se forma la calificación de supercomputadoras. En general, se acepta que este punto de referencia está más cerca de las tareas reales que HPL, y, en cierto modo, la discrepancia significativa entre las posiciones de la supercomputadora en estas dos listas refleja la situación real. Sin embargo, las últimas calificaciones (junio de 2018) fueron una agradable excepción y, finalmente, las primeras posiciones de las listas coincidieron.


Y ahora sobre el verdadero HPL


Volvemos a momentos más prácticos de la historia y la competencia. Linkpak es de código abierto, disponible para descargar en el sitio web oficial, sin embargo, apenas hay una supercomputadora en el mundo cuyo rendimiento se midió con esta versión particular del punto de referencia. Los fabricantes de aceleradores lanzan su propia versión de HPL, optimizada para dispositivos específicos, lo que le permite obtener importantes ganancias de rendimiento. Por supuesto, las versiones personalizadas de HPL deben cumplir ciertos criterios y deben pasar pruebas especiales con éxito.


Cada proveedor tiene su propia versión de HPL para cada acelerador, sin embargo, a diferencia del punto de referencia original, no se trata de código abierto aquí. Nvidia lanza versiones de HPL que están optimizadas para cada una de las tarjetas, mientras que el código ya no se entrega en forma de origen, sino en binarios. Además, solo hay dos formas de acceder a ellos:


  • Tienes una supercomputadora con tarjetas Nvidia que puede entrar en la parte superior: Nvidia te encontrará solo. Por desgracia, lo más probable es que no reciba binarios, ya que no habrá oportunidad de participar en la optimización de los parámetros de HPL. De una forma u otra, obtendrá un valor de rendimiento adecuado obtenido en el punto de referencia optimizado.
  • Usted participa en una de las tres competencias de supercomputadora para estudiantes. Pero volveremos a esta parte.

Entonces, ¿cuál es la esencia de la tarea, especialmente si los tíos inteligentes de grandes empresas ya han optimizado el punto de referencia para su equipo?
En el caso de la etapa de calificación de la competencia, describa las posibles acciones para aumentar el rendimiento del sistema. En este caso, no es necesario perseguir números de rendimiento absoluto, ya que algunos equipos pueden tener acceso a un grupo grande y elegante de 226 nodos con aceleradores modernos, mientras que otros solo pueden acceder al número de clase de computadora de la universidad 226, que llamamos el grupo.



En el caso de la etapa final, ya tiene sentido comparar los valores absolutos de rendimiento. No quiere decir que aquí todos estén en igualdad de condiciones, pero al menos hay una restricción en la potencia máxima permitida del sistema.


El resultado de la ejecución del benchmark depende principalmente de dos componentes: la configuración del clúster y la configuración directa de los parámetros del benchmark. También valdría la pena señalar la influencia de la elección de compiladores y bibliotecas para la matriz y la computación vectorial, pero aquí todo es bastante aburrido, todos usan un compilador de Intel + MKL. Y en el caso de los archivos binarios, no tiene que elegir, ya que ya están ensamblados. El resultado de HPL es un valor numérico que muestra cuántas operaciones de coma flotante realiza por segundo este sistema informático. La unidad de medida principal es FLOPS (operaciones de punto flotante por segundo) con los prefijos correspondientes. En el caso de la etapa final de la competencia, casi siempre estamos hablando de sistemas de escala Tera.


Optimización de resultados


Establecer los parámetros de referencia consiste en una selección significativa de los datos de entrada de la tarea calculada por Lynpak (archivo HPL.dat). En este caso, la dimensión de este problema tiene la mayor influencia: el tamaño de la matriz, el tamaño de los bloques en los que se divide la matriz, en qué relación distribuir los bloques, etc. En total, hay varias decenas de parámetros, miles de valores posibles. Bruteforce no es la mejor opción, especialmente si la prueba en sistemas relativamente pequeños se realiza entre un par de minutos y un par de horas, dependiendo de la configuración (para la GPU, la prueba es mucho más rápida).


Tuve suficiente tiempo para estudiar cómo los patrones ya descritos en otras fuentes que contribuyen a optimizar los resultados de referencia e identificar nuevos. Comencé a ejecutar pruebas una gran cantidad de veces, comencé muchas etiquetas de Google, intenté acceder a sistemas con una configuración previamente no probada para ejecutar el punto de referencia en ellos también. Como resultado, incluso antes del inicio de la etapa de calificación, se probaron varios sistemas, tanto de CPU como de GPU, incluido incluso el Nvidia Quadro P5000 completamente inadecuado. Cuando comenzó la etapa de calificación, teníamos acceso a varios nodos con P100 y P6000, lo que nos ayudó mucho en la preparación. La configuración de este sistema fue en muchos aspectos similar a la que planeamos ensamblar como parte de la etapa final de la competencia, y también, finalmente obtuvimos acceso a configuraciones de bajo nivel, incluido el cambio de frecuencia.


En cuanto a la configuración, la presencia y el número de aceleradores tienen el mayor impacto. En el caso de probar un sistema con una GPU, la opción más óptima es cuando la parte informática principal de la tarea se delega al componente GPU. El componente de la CPU también se cargará con tareas auxiliares, sin embargo, no contribuirá al rendimiento del sistema. Pero al mismo tiempo, el rendimiento máximo de la CPU debe tenerse en cuenta en el rendimiento máximo del sistema en su conjunto, lo que puede parecer extremadamente desventajoso en términos de la relación entre el rendimiento máximo y el pico (teórico). Al ejecutar HPL en una GPU, un sistema con 2 aceleradores de GPU y dos procesadores al menos no será inferior a un sistema con 2 GPU y 20 CPU.


Después de describir las propuestas para la posible optimización de los resultados de HPL, terminé con mi parte de la propuesta para la etapa de calificación y, al pasar a la final de la competencia, comenzó una nueva etapa de la competencia: la búsqueda de patrocinadores. Por un lado, necesitábamos un patrocinador que cubriera los costos del vuelo del equipo a China y, por otro lado, un patrocinador que acepte amablemente proporcionar aceleradores gráficos al equipo. Con el primero, finalmente tuvimos suerte, una universidad asignó parte del dinero y Devexperts ayudó a cubrir los boletos por completo . Con los patrocinadores, con quienes planeamos prestar tarjetas, fuimos menos afortunados, y ahora volvemos a la final con la configuración básica del clúster sin ninguna posibilidad de competitividad en HPL. Bueno, nada, exprime al máximo lo que dan, pensamos.


Final ASC'18


Y aquí estamos en China, en la pequeña ciudad según los estándares chinos: Nanchang, en la final. Ensamblamos el clúster durante dos días y luego las tareas.



Este año, todos los equipos recibieron 4 tarjetas Nvidia V100, esto no nos dio ventajas sobre otros equipos, pero permitió lanzar HPL no en la CPU. Los nodos inicialmente les dan a todos 10, pero los adicionales (recuerden el límite de 3 kW) deben devolverse antes de que comience la etapa de las principales tareas competitivas. Aquí hay algún truco: al reducir la frecuencia de la CPU y la GPU, su rendimiento disminuye, sin embargo, puede elegir dichos valores para la frecuencia con la que obtenemos más rendimiento por unidad de energía consumida. Al reducir la frecuencia, tenemos la oportunidad de agregar aún más aceleradores, lo que finalmente afectará el rendimiento para mejor. Por desgracia, este truco nos sería mucho más útil si viniéramos a la competencia con una maleta de aceleradores, como otros participantes. Sin embargo, pudimos permitirnos dejar la cantidad máxima de CPU. Como no todas las tareas de la competencia requieren una GPU, existía la sospecha de que de alguna manera esto podría jugar en nuestras manos.
Entonces, la configuración de clúster más común en la final de la competencia es un mínimo de nodos, un máximo de tarjetas.



Linkpack final y un poco sobre registros


Las tareas en la competencia estaban vinculadas a ciertos días competitivos, y HPL fue el primero de ellos, por supuesto, después de que se reunió el clúster. La fecha límite de envío de resultados de HPL es el almuerzo del tercer día competitivo, además, el acceso a las tareas restantes de este día competitivo se abre inmediatamente después de la finalización de Linpak. Sin embargo, Lynpak comienza a conducir en los primeros días. En primer lugar, para asegurarse de que el clúster esté ensamblado correctamente, y en segundo lugar, la configuración de Linpak no es rápida y, dado que no se requiere ninguna entrada adicional, ¿por qué no?


Montamos nuestro clúster bastante rápido y comenzamos a incluir a Lynpak. Para nuestra configuración, obtuvimos valores bastante adecuados, del orden de 20 TFlops, y todo estaría bien, pero después de que se mostrara el resultado, había una línea con un error. Anteriormente, recibí tales errores solo cuando deliberadamente indiqué tamaños de bloque incorrectos en los que se divide la matriz de tareas. Una sorpresa muy desagradable nos esperaba aquí. Anteriormente, le dije que nos dieron 4 tarjetas V100, bueno, así que ... no recibimos los archivos binarios de HPL para ellos y nadie nos pudo ayudar con esto. Han pasado varios meses, pero para mí sigue siendo un misterio lo que sucedió en ese final con nuestro Linpak. Cambiamos las versiones de compiladores y otras bibliotecas con la esperanza de deshacernos del error, verificamos repetidamente si instalamos los aceleradores correctamente (ya que lo hicimos por primera vez), pero aún no pudimos solucionar el error.



La noche anterior a la rendición de Linpak, nuevamente examinamos cuidadosamente los criterios para evaluar las tareas, por lo que, para Linpak, la fórmula constaba de dos componentes: un cierto valor que depende del resultado del equipo que ganó Linpak y el coeficiente para completar con éxito la tarea. Resultó que este coeficiente es tan grande que es completamente desventajoso pasar un valor de Lynpak adecuado, pero con un error incomprensible, en comparación con pasar cualquier valor, pero sin un error. Habiendo considerado cuidadosamente todo, dado que se dedicó mucho tiempo a buscar una solución al error y que obtener conjuntos de datos de las siguientes tareas depende completamente del tiempo de finalización de Linpak, decidimos fusionar tácticamente esta tarea. Así que se estableció un "récord" absoluto en la historia de las competiciones de supercomputadoras entre los valores correctos. Nuestro Lynpak estalló con un valor de 0.01 TFlops. Por supuesto, al optimizar el punto de referencia para las CPU existentes, obtendríamos un valor de rendimiento ligeramente mayor, sin embargo, esto no habría afectado mucho los puntos y se habría gastado mucho más tiempo. Recuerde que Lynpak ha estado trabajando mucho más tiempo en la CPU. El mejor resultado fue demostrado por la Universidad Nacional Tsing Hua: 43 TFlops. Después de un día o dos, Jack Dongarra (el creador de Lynpac), miembro del comité organizador de la competencia, nos preguntó casualmente, ¿cuál es el camino de Lynpak? Aparentemente, en ese momento aún no había visto el tablero de resultados: su reacción WHAAAT valía la pena cada hora que pasamos en HPL.



Aplicación de misterio


Después de entregar los puntos de referencia, de acuerdo con el plan preparado de antemano, me uní a la parte del equipo que se suponía que se ocuparía de la aplicación Mystery. Nadie sabía de antemano cuál sería esta tarea, por lo que se estaban preparando para lo peor: habían instalado previamente todo lo que podría ser útil desde una unidad flash en un clúster. Como regla general, la principal dificultad de las tareas de esta sección es recopilarlas. Esta vez todo resultó ser un poco diferente. La aplicación se recopiló casi la primera vez, sin ningún problema. Los problemas comenzaron cuando recibimos un error en la mayoría de los conjuntos de datos presentados en la dirección, a pesar de que era una aplicación fortran. A juzgar por el tablero de resultados, no solo esta tarea nos causó problemas.


Arma secreta: CPU


Bueno, la última tarea en la que participé fue planeada para el próximo día de competencia. A diferencia de Mystery Application, ya vimos un paquete con el que tuvimos que trabajar: era cfl3d. Cuando descubrimos que este es un producto de la NASA, por alguna razón todos estaban encantados, pensando que todo estaría bien tanto con el montaje como con la optimización. Cuando probamos el paquete en casa, no hubo problemas con el ensamblaje, pero los casos de uso fueron muy interesantes. La mayoría de los ejemplos dependían de la instalación de herramientas adicionales, y sucedió que en un intento de buscar en Google una de esas herramientas, la herramienta XX, encontramos un artículo del año 1995 donde se decía que ahora la herramienta XX está desactualizada y usa YY. El sitio del producto es del mismo tiempo: la documentación a menudo envía al usuario a las páginas del sitio, pero solo el sitio en marcos y más allá de la página principal no funcionará. La relevancia de los ejemplos dejó mucho que desear.


Si es bastante simple, entonces la esencia de la tarea era una división difícil de una cuadrícula de varios niveles mientras se mantenía un nivel de precisión dado. Por supuesto, la métrica principal aquí era el tiempo. De alguna manera sucedió que en este día estábamos lo más relajados posible e hicimos lo que teníamos que hacer. La tarea era para la CPU, y esto es exactamente lo que teníamos mucho. Los archivos de entrada de la tarea tenían una forma muy específica y, a menudo, un gran tamaño, hasta cientos de líneas. Un miembro de nuestro equipo escribió un script que automatizó el proceso de generación del archivo de entrada, lo que aceleró el proceso, probablemente cientos de veces. Finalmente, todos los conjuntos de datos se completaron y optimizaron con éxito, incluso hubo tiempo para intentar reconstruir el paquete con algunas opciones interesantes, pero no obtuvimos mucha aceleración. Completamos esta tarea mejor que otros, después de haber recibido un premio especial de Innovación en aplicaciones, así como el 11º lugar en el evento del equipo (de 20 en la final, de más de 300 entre todos los participantes en la competencia).



La tabla con las configuraciones de los sistemas informáticos, así como la foto principal, están tomadas del sitio http://www.hpcwire.com/ .

Source: https://habr.com/ru/post/es419847/


All Articles