Los concursos de supercomputadoras para estudiantes se llevan a cabo anualmente en varias partes del mundo y tienen como objetivo atraer a jóvenes talentos al campo de la informática de alto rendimiento en la industria y la ciencia. Este año, nuestro equipo participó en competencias asiáticas, y este artículo discutirá la experiencia y las impresiones obtenidas en este evento.

Tareas y progreso de la etapa de calificación.
Este año, por primera vez, no hubo tareas que debían resolverse utilizando el equipo provisto por los organizadores: todas las tareas debían ejecutarse en su propio hardware. Gracias a la perseverancia y perseverancia de los profesores, poco antes de que comenzara la etapa de calificación, nuestro equipo obtuvo acceso a varios nodos con las tarjetas de video NVIDIA P100 y P6000, lo que nos ayudó mucho en la preparación. Las tareas no diferían mucho del año pasado . Se describen a continuación.
- Ensamble la configuración del clúster y describa por qué se seleccionaron ciertos componentes.
- Mida el rendimiento del clúster con Lynpak y HPCG. La diferencia con respecto al año pasado fue solo el hecho de que el año pasado Linpak tuvo que optimizarse para el clúster proporcionado por los organizadores con procesadores Intel Xeon Phi, y en esto, para cualquier clúster disponible.
- Optimizar Relion (software para el reconocimiento de imágenes de un microscopio crioelectrónico) para tarjetas de video.
- Construya una red neuronal para responder a las búsquedas de los usuarios utilizando el marco CNTK y el conjunto de datos MS MARCO .
Lynpack y HPCG. Gracias a la aparición de nuevos nodos con tarjetas de video y Vadim, que solo participó en pruebas de rendimiento, hemos avanzado significativamente en la primera y segunda tarea. Vadim pudo realizar tantas pruebas como sea necesario para ajustar con confianza los parámetros a un sistema específico. Además, se hizo posible regular el consumo de energía en los nuevos nodos, lo que permitió seleccionar la configuración del clúster teniendo en cuenta los cambios en la frecuencia del procesador y el chip gráfico. La aparición de nuevos nodos fue el mayor evento para el equipo.
Relion El código escrito por químicos químicos no se distinguía por una arquitectura bien pensada y contenía archivos difíciles de leer de varios miles de líneas de código. La sincronización fue proporcionada por la llamada al sistema sleep()
. Había docenas de gigabytes de entrada, incluso más salida, una iteración tomó un promedio de cuarenta minutos, y fue imposible comprender de inmediato cómo optimizar todo esto. Después de dos semanas de búsqueda, se escribió mi propio asignador de memoria para la tarjeta de video; La transformación de Fourier y algunas otras rutinas se han portado a las tarjetas de video. Debido a la complejidad del código y al tiempo limitado, se realizaron otras optimizaciones después de la etapa preliminar.
CNTK. Como de costumbre, en el problema del aprendizaje automático, se proporcionó la configuración básica de la red neuronal, desde la cual vale la pena comenzar. El marco y la red en sí no funcionaron de fábrica. CNTK requería una versión especial de OpenMP, en la utilidad para verificar el resultado, las funciones tenían tipos de parámetros incompatibles y su número no coincidía. Cuando finalmente todo comenzó, comenzaron a tratar con la arquitectura de la red. Por desgracia, las redes neuronales siguen siendo el punto débil de nuestro equipo, por lo que no hicimos cambios muy complejos. Cambiamos el porcentaje de neuronas descartadas, la velocidad de aprendizaje, el valor inicial y experimentamos usando GRU en lugar de LSTM en la parte de recurrencia.
¡Así que salud, fuimos a la final!
Esta vez, inmediatamente escribimos al patrocinador de nuestro último año y comenzamos a prepararnos. Pronto ocurrieron dos eventos: el patrocinador del año pasado nos rechazó y la universidad asignó fondos para cubrir parte del costo del vuelo. Luego fue la generación de ideas donde encontrar el resto de los fondos. Como resultado, la compañía Devexperts , que desarrolla software financiero para bolsas, corredores y compañías de inversión, se ofreció a ayudarnos. En la ronda de clasificación, el equipo resuelve problemas en el equipo que tiene disponible. A veces, parte de las tareas se resuelven en equipos proporcionados por los organizadores. En la final, todo es exactamente igual excepto uno, pero ... ¡el equipo aún tiene que armar este grupo!

El año pasado, ninguno de los miembros del equipo tenía experiencia en la creación de un grupo, por lo que tuvimos poco tiempo para lanzar tareas competitivas, por lo que este año realizamos una serie de sesiones de capacitación en el grupo de capacitación. En cada sesión de entrenamiento, creamos copias de respaldo de los nodos, configuramos completamente un nodo y luego copiamos su imagen a otros nodos a través de la red. Como ha demostrado la práctica, esta es la forma más rápida e indolora de configurar un clúster desde cero, que no requiere un conocimiento profundo de las tecnologías de bajo nivel. Unos pocos entrenamientos fueron suficientes para depurar y automatizar completamente el proceso.

Final: día uno y dos
En los primeros dos días de la competencia, los equipos se reúnen y configuran un clúster en el que posteriormente se lanzarán todas las aplicaciones. Como regla general, cuantas más tarjetas de video haya en su sistema, más podrá obtener rendimiento en la mayoría de las tareas y menos nodos podrá instalar en un bastidor debido a limitaciones de potencia (la potencia no debe exceder los 3 kW; de lo contrario, los resultados de la tarea no cuentan). Sin embargo, hay aplicaciones en las que las tarjetas de video no se usan de ninguna manera, y la presencia de una gran cantidad de nodos puede ser beneficiosa.
Este año, los patrocinadores de la competencia proporcionaron cuatro NVIDIA V100 a cada equipo. El primero en encontrar a la persona adecuada y recibir los preciados aceleradores, nos propusimos la instalación. Nadie en el equipo (incluido el entrenador) tenía experiencia instalando tarjetas de video en el servidor antes. Después de estudiar las instrucciones amablemente proporcionadas por los organizadores, hicimos frente a la tarea, y ni siquiera tuvimos que retirar y desmontar completamente el servidor, como lo hacen la mayoría de los equipos (ver video).
A continuación, fue necesario instalar y configurar el sistema operativo. Como regla general, los estudiantes tienen la menor confianza en esta área, ya que utiliza tecnologías de nicho que no son útiles en otras áreas, por lo que previamente realizamos varios entrenamientos para configurar completamente un sistema de cinco nodos desde cero en el grupo de entrenamiento usando Clonzilla.
Los scripts de configuración se depuraron en un clúster virtual utilizando Wagrant, porque solo en él es fácil generar varias máquinas virtuales idénticas. Debido al bajo nivel de software que utilizamos, Docker y otras tecnologías basadas en espacios de nombres de Linux no son adecuadas para nosotros. Los scripts de configuración simplemente no funcionan en ellos.
Armados con la experiencia adquirida en la capacitación, implementamos el sistema operativo y otros paquetes incluso más rápido que en la capacitación: el rendimiento del servidor no se puede comparar con nuestro grupo de capacitación. Una de las características del concurso es la falta de acceso a Internet desde los servidores, por lo que descargamos el repositorio con paquetes por adelantado y lo grabamos en dos unidades USB que llevamos con nosotros.
Después de configurar el clúster, cada miembro del equipo comenzó a configurar y probar su aplicación para el nuevo sistema, y aquí tuvimos una sorpresa desagradable. La versión de Linpak, que se ha mantenido desde el último año de la competencia, se negó a funcionar correctamente en el nuevo sistema. La instalación de varias versiones de CUDA, la clasificación a través de varias opciones y configuraciones del kernel no dieron el efecto deseado. Como resultado, decidimos lanzar la versión no optimizada habitual para no perder puntos por la tarea. (Esto se debe al nuevo sistema de puntuación este año: incluso si su resultado es el mejor en velocidad o rendimiento, pero el resultado es incorrecto, recibirá solo la mitad de los puntos máximos posibles. La segunda mitad de los puntos se puntúa para la conclusión correcta).
Para comprender la esencia del problema, vale la pena decir qué es Lynpack. Lynpack se utiliza para medir el rendimiento de las supercomputadoras y para compilar una lista de las supercomputadoras TOP500 más potentes del mundo. La forma más fácil de ocupar un lugar destacado en esta lista es comprar un clúster con una gran cantidad de tarjetas de video (la cantidad de procesadores no es tan importante, ya que el 99% de la tarea se asigna a la tarjeta de video). Para cada acelerador hay una versión optimizada de Lynpak, cuyo código, por regla general, está cerrado. El binario se puede obtener solo si tiene una supercomputadora que puede ocupar un lugar en la lista TOP500, o si participa en una competencia de supercomputadora. A pesar de esto, los organizadores de la competencia no proporcionaron un binario, la rama rusa de NVIDIA también se negó a hacerlo. En Rusia, no hay grupos con V100 que puedan incluirse en la lista TOP500, por lo tanto, las búsquedas de colegas familiares tampoco tuvieron éxito. La situación también es incomprensible por el hecho de que Linpak no se usa en ninguna parte, excepto para las pruebas de rendimiento: ni en ciencia ni en tecnología. Si quieres ayudar al equipo y saber cómo obtener el preciado programa, eres bienvenido en PM. Bueno, nosotros, con nuestra espontaneidad inmediata, marcamos esta historia con una diapositiva en la presentación final, que podríamos complacer a los miembros del jurado.

Final: día tres
El tercer día de la competencia, Linpak, HPCG, Relion y la aplicación secreta nos estaban esperando, y este día fue el más difícil para el equipo. Habiendo tratado rápidamente con Lynpak (consulte la sección anterior) y HPCG, obtuvimos tareas de trabajo (datos de entrada) para una aplicación secreta. Resultó ser un programa para calcular la dinámica molecular de Siesta . La primera decepción fue que, en parte de las tareas, Siesta cometió un error en la dirección (a pesar de que estaba escrito en Fortran, en el que no fue tan fácil obtener dicho error), y no fue posible depurarlo. Sin embargo, las tareas restantes se obtuvieron y al final del día las superamos con éxito.
Paralelamente a Siesta, tuvimos que lanzar un Relion previamente preparado. Todos los nodos sin tarjetas de video fueron entregados a Siesta, y los nodos con tarjetas de video fueron entregados a Relion, por lo que los programas no se interfirieron entre sí.
En la etapa preliminar, cambiamos fuertemente el código de Relion para que funcione de manera efectiva en las tarjetas de video. Entre otras cosas, paralelizamos muchas funciones, reescribimos el asignador de memoria en la tarjeta de video, transferimos las rutinas más intensivas en recursos a la tarjeta de video y agregamos la capacidad de usar nodos con y sin tarjetas de video simultáneamente. Esto aceleró enormemente el programa y funcionó muy bien en tecnología universitaria. Sin embargo, en la competencia obtuvimos tarjetas de video con menos memoria, por lo que Relion se estrelló con un error. Un análisis más profundo del error mostró que el código funcionará solo si se reescribe para el nuevo sistema. No tuvimos tiempo para esto, y esta fue la segunda decepción del tercer día.
Final: cuarto día
En el cuarto día de la competencia, CFL3D y MSMARCO permanecieron, y este día fue mucho más tranquilo. Liberados de las aplicaciones que se les asignaron, los miembros del equipo comenzaron a ayudarse mutuamente. Para CFL3D, que tiene un formato de archivo de entrada muy complejo, Ruslan escribió un script que lo genera. Como teníamos muchos nodos en comparación con los equipos con una gran cantidad de tarjetas de video, lanzamos varias tareas en paralelo y después de varios inicios de cada tarea pudimos seleccionar los parámetros óptimos.
El lanzamiento del MSMARCO preparado previamente tampoco causó serios problemas. El procesamiento previo de datos tomó varias horas, por lo que no hubo tiempo para un entrenamiento prolongado, pero gracias a las tarjetas de video más potentes fue posible completarlo, aunque con menos eras. Todavía tenemos un modelo entrenado en más épocas desde la etapa de calificación (en la final, los datos de entrada cambiaron, pero no había un archivo nuevo para verificación), pero de acuerdo con las reglas, necesitábamos un modelo que fue entrenado durante la final, y decidimos aprobar un modelo honestamente entrenado. A pesar del trabajo bien coordinado y la falta de sorpresas, utilizamos todo el tiempo asignado y terminamos tarde en la noche.
Final: quinto día
Al día siguiente, nos esperaba una presentación. En la tarde del cuarto día, insertamos los resultados obtenidos en una plantilla preparada y escribimos un discurso. La presentación fue fácil, no nos hicieron preguntas interesantes, pero por alguna razón solo el orador y las diapositivas pudieron filmar.
Unas horas más tarde, comenzó la ceremonia de premiación. Los sentimientos fueron mixtos: por un lado, nos desempeñamos mucho mejor que el año pasado, por el otro, podríamos haber funcionado aún mejor si no fuera por los molestos errores con las aplicaciones. Como resultado, a pesar de que nuestro clúster no difería en una gran cantidad de tarjetas de video, debido a la mayor cantidad de nodos y perseverancia, vencimos a otros equipos en CFL3D, por lo que obtuvimos un premio por separado en la competencia. En la clasificación general, tomamos el undécimo lugar de los veinte equipos que llegaron a la final (y de los trescientos equipos que participaron en la etapa preliminar). El campeón en la clasificación general, como el año pasado, fue la Universidad de Xinhua. Para nuestro equipo, esto fue una victoria sobre nosotros mismos: nos desempeñamos mejor que la última vez, obtuvimos una experiencia invaluable, que usaremos el próximo año, y venciremos a otros en una de las tareas.

Conclusiones e impresiones generales.
Una configuración de clúster en la que hay muchas más tarjetas de video que procesadores es ventajosa en la mayoría de los casos, pero no universal. Hay menos nodos, y no todas las aplicaciones pueden, en principio, ejecutarse en una tarjeta de video. Dichas aplicaciones incluyen programas Fortran, que, debido a su edad respetable, no se pueden reescribir para una tarjeta de video, y con frecuencia ni siquiera usan todos los núcleos de procesador. Para tales aplicaciones, la presencia de una gran cantidad de nodos le permite ejecutar más tareas paralelas, lo que significa más aplicaciones optimizadas.
Es posible que el equipo no conozca todas las complejidades de instalar sistemas operativos y transmitir imágenes, pero esta brecha se reemplaza fácilmente por la capacitación. Por supuesto, los participantes no reconocerán todas las sutilezas, pero realizarán con confianza la instalación punto por punto. Las secuencias de comandos para la instalación se depuran fácilmente en máquinas virtuales.
Durante la competencia, puedes reunirte con los programas de código abierto más maravillosos. Programas que se recopilan mediante scripts escritos ilegibles, programas que utilizan funciones de biblioteca reescritas con errores, programas escritos en Fortran con inserciones en C, programas con dependencias codificadas y banderas de compilación. No recuerdo un solo programa que se hubiera ensamblado la primera vez o que haya producido un error comprensible durante el ensamblaje. (Un nuevo ejemplo: la versión anterior de OpenMPI en los nuevos sistemas está tratando de conectar una biblioteca con un nombre vacío. El problema solo se puede resolver de manera confiable mediante el reemplazo automático en los archivos de creación generados). La competencia nos enseña a no sorprendernos de nada y superar las dificultades. Quiero creer que una persona que ha trabajado con dicho software nunca creará algo así en su vida.
En la competencia, nunca dejas de sorprenderte con el ingenio chino. Este año, los chinos rediseñaron una sala de conferencias de forma cuadrada con esquinas cortadas para adaptarse al lugar de la competencia. Trajo bastidores con servidores y un sistema de enfriamiento con salida de líquido al baño más cercano (no soy un experto en este tema y no sé el nombre exacto del equipo). Cuando se dieron cuenta de que la temperatura en la habitación no descendía a menos de treinta grados centígrados, trajeron enormes bloques de hielo en las cuencas. Por supuesto, esto no cambió la situación, sino que proporcionó al equipo bebidas frías.

Agradecimientos
La participación en la competencia no hubiera sido posible sin nuestro patrocinador, Devexperts ( http://devexperts.com/ ). La compañía incurrió en el costo de los viajes aéreos a China.

Impresiones de China
Algunos miembros del equipo estuvieron en China por primera vez, lo que causó un ligero choque cultural. Le dice a Anton.
El conocimiento de la tierra del sol naciente comenzó con el hecho de que a algunos de nosotros nos quitaron las baterías para cargarlas, porque no tenían una marca de energía. Aparte de esta conspiración, todo lo demás fue amigablemente. Nos recibieron dos voluntarios con un letrero de nuestra universidad, luego de lo cual nos llevaron al hotel en autobús. Vale la pena señalar que después de Peter, donde la nieve estaba a punto de derretirse, en China hacía bastante calor (aunque los habitantes reales de Volgogrado, por supuesto, ni siquiera sentían esto). Al llegar nos acomodaron en las habitaciones. Después de los vuelos diarios, decidí dejarme caer sobre un colchón enorme con fatiga.
Duro era un colchón.
Samurai deprimido.
En ese momento eran alrededor de las diez de la mañana, así que una hora después fuimos a visitar una universidad local. Decir que es grande es no decir nada. Si comparamos el territorio del campus local y la Universidad Estatal de San Petersburgo, entonces la Universidad de Nanchang es cinco veces más. Nos mostraron el comedor local, donde durante los siguientes cinco días comimos fideos y arroz. En su mayor parte, la primera comunicación con el chino común, cuyo conocimiento del inglés no es tan bueno, comenzó aquí.
El comedor está dispuesto de tal manera que cada ventana es una mini tienda donde puedes comprar algo. El pago se realiza mediante una tarjeta especial, que usted, como las tarjetas NFC, simplemente adjunta al lector. Todo sucede rápidamente y no hay necesidad de hacer cola durante mucho tiempo. Comprender exactamente lo que tomas es problemático. Tienes que usar los métodos del viejo abuelo y señalar con el dedo el plato deseado. Al tercer día en un estante de fideos, comenzaron a reconocernos, lo que simplificó enormemente nuestras vidas. Algunos incluso aprendieron a contar hasta diez para no señalar con el dedo y mostrar respeto por los habitantes. Si hablamos de la comida en sí, entonces había albóndigas buenas y saludables. Con la ayuda de un voluntario, logré obtener una deliciosa sopa, pero como esto requiere interactuar verbalmente con el vendedor, esto fue solo una vez. Debido a los condimentos, toda la carne es muy picante, con un sabor específico.
El segundo día, nos encontramos con el tercer voluntario, que se llamaba Ksenia. (Los chinos, por regla general, inventan nombres fáciles de pronunciar para comunicarse con extranjeros). Ella ha estado estudiando ruso durante dos años, por lo que nos fue asignada, una especie de experiencia útil.

La competencia en sí ya se ha descrito en detalle en otras secciones, pero me gustaría señalar que solo había dos sillas para el equipo, por lo que tuve que sentarme en el piso, después de lo cual mis piernas solo pidieron piedad, porque tuve que sentarme así durante diez horas los cuatro días de la competencia. .