Serafín, en el bleeding edge del software

Corriendo High Performance Linpack (HPL) los técnicos del CCAD descubrieron un diferencia de frecuencia entre los dos procesadores de Serafín que hacen un 2% más lento el cómputo de este benchmark. Mostramos otras sutilezas que derivan en la instalación de una supercomputadora con la última tecnología.

Serafín ya está operativa, pero la instalación no estuvo exenta de problemas. Es que una plataforma nueva, de altísima densidad de cómputo y con interfaces de comunicación muy rápidas, necesita software nuevo, tal vez muy nuevo.

El cluster corre Rocky Linux 8.4, un derivado de RHEL salido hace 3 meses con kernel 4.18.0-305.10.2.el8_4.x86_64. La suite de compilación es aocc-3.1 también de julio de 2021. Se compilaron utilizando el viejo gcc-8.4 que trae Rocky y a través de Spack, un gcc-11.2 también de finales de julio de 2021. Ambos compiladores son capaces de emitir código para la arquitectura Zen2.

Una sutileza en la frecuencia de operación del Procesador 1

A fin de probar la plataforma se compiló HPL de AMD para correr primeramente en un solo nodo y verificar la potencia de cálculo que según lo que pudimos estimar de ejemplares similares (2*EPYC 7532, RAM DDR4-3200) en la lista TOP500, debería estar en 2.2 TFLOPS por nodo usando toda la suite de AMD (compilador aocc, biblioteca de BLAS AMD BLIS).

En este punto surgió el primer detalle. A pesar de haber usado todas las recetas de AMD, e incluso un parche para usar la MKL de Intel en Zen2, se obtuvo un resultado más bajo.

================================================================================
T/V                N    NB     P     Q               Time                 Gflops
--------------------------------------------------------------------------------
WR11C2R4      120064   224     4     4             552.55             2.0883e+03
HPL_pdgesv() start time Tue Aug 17 10:02:15 2021

HPL_pdgesv() end time   Tue Aug 17 10:11:27 2021

--------------------------------------------------------------------------------
||Ax-b||_oo/(eps*(||A||_oo*||x||_oo+||b||_oo)*N)=   2.92090121e-03 ...... PASSED
================================================================================

Luego de intercambiar emails con los ingenieros de AMD, y con el N ajustado a 120000 con AMD BLIS se obtuvo un 2% menos de lo que se debería.

================================================================================
T/V                N    NB     P     Q               Time                 Gflops
--------------------------------------------------------------------------------
WR11C2R4      120000   224     4     4             534.06             2.1571e+03
HPL_pdgesv() start time Wed Sep  1 19:15:12 2021

HPL_pdgesv() end time   Wed Sep  1 19:24:06 2021

--------------------------------------------------------------------------------
||Ax-b||_oo/(eps*(||A||_oo*||x||_oo+||b||_oo)*N)=   3.02955319e-03 ...... PASSED
================================================================================

Usando el mismo no, pero con el MKL parchado, se llegó a lo que se esperaba, salvo que la medición patrón del TOP500 debería estar realizada con AMD BLIS y no con la MKL parchada. ¿Dónde está ese 2% de performance que faltaba?

Como en el CCAD uno de los lineamientos es tratar de obtener el máximo desempeño posible del hardware adquirido, los técnicos empezaron a buscar el problema.

================================================================================
T/V                N    NB     P     Q               Time                 Gflops
--------------------------------------------------------------------------------
WR11C2R4      120000   224     4     4             521.69             2.2082e+03
HPL_pdgesv() start time Wed Sep  1 19:58:28 2021

HPL_pdgesv() end time   Wed Sep  1 20:07:10 2021

--------------------------------------------------------------------------------
||Ax-b||_oo/(eps*(||A||_oo*||x||_oo+||b||_oo)*N)=   3.29733621e-03 ...... PASSED
================================================================================

Luego de actualizar al BIOS 2.2 (20210831) de la placa madre H12DST-B, y obtener los mismos resultados, se lanzó la ejecución monitoreando temperatura, frecuencia y voltaje, ya que el DVFS de los procesadores actualmente hacen lo que pueden para no dañar el silicio, brindando el mayor desempeño posible. Apareció algo extraño que se puedo observar monitoreando el sistema.

Tomando algunos valores constatamos que hay una brecha en la frecuencia de funcionamiento de las dos pastillas. La CPU1, que está más cercana al aire frío, tiene un reloj dado por el DVFS que es entre 2% y el 5% menor que la CPU2 que está detrás, que a su vez está entre 5C y 7C más caliente.

fPKG0 fPKG1  Abs % 
 2523  2614   91 3.48
 2522  2610   88 3.37
 2520  2605   85 3.26
 2564  2684  120 4.47
 2684  2793  109 3.90
 2642  2759  117 4.24
 2519  2608   89 3.41
 2513  2603   90 3.45
 2645  2781  136 4.89
 2678  2805  127 4.52
 2639  2719   80 2.94
 2559  2675  116 4.33
 2690  2834  144 5.08
 2702  2810  108 3.84
 2544  2610   66 2.52
 2507  2575   68 2.64
 2663  2803  140 4.99
 2560  2637   77 2.91
 2505  2575   70 2.71
 2565  2665  100 3.75
 2647  2738   91 3.32
 2505  2575   70 2.71
 2506  2574   68 2.64
 2624  2766  142 5.13
 2504  2574   70 2.71

Estimamos que cuando podamos solucionar este detalle entre los ingenieros de AMD, Supermicro y nuestros CPA-CONICET, obtendremos 2.2 TFLOPS con aocc+BLIS y un poquito más con el truco de la MKL parchada.

Comunicaciones colectivas de MPI aceleradas, memory leak

Durante el período de prueba el usuario Fabio Negreiros Ribeiro, detectó que sus corridas de Quantum ESPRESSO (QE) se cortaban por falta de memoria y los procesesos quedaban colgados.

El switch Infiniband de Serafín, un Mellanox MQM8790-HS2F soporta offloading de operaciones colectivas mediante el protocolo Mellanox SHARP. Este protocolo se activó usando OpenUCX dentro de OpenMPI, usando la biblioteca HCOLL de NVIDIA-Mellanox.

Efectivamente había bugs [1,2] en la versión de OpenMPI más nueva que soporta Spack y se tuvo que utilizar openmpi@4.1.2rc1 +legacylaunchers +pmix fabrics=ucx,hcoll,cma,xpmem schedulers=slurm para solucionar ese problema y tener desempeño y estabilidad.

Hacemos notar que este problema solo surgía con Quantum ESPRESSO, y en el resto de los programas que se corrieron multinodo como GADGET o GROMAC, no hubo ningún problema.

Parches para el compilador AOCC en Spack

En todo este desarrollo de instalar el software básico para Serafín se utiliza fuertemente Spack. Aunque Spack sporta aocc, este compilador no es tan popular como el resto y hubo problemas con gdb [1], amdlibflame [2] y UCX [3], todos ya solucionados por esta gran comunidad.

 

Instalar una supercomputadora no es algo sencillo, pero claramente los técnicos del CCAD están en el bleeding edge y saben manejarlo.