Escalado de aplicaciones de HPC
Se aplica a: ✔️ Máquinas virtuales Linux ✔️ Máquinas virtuales Windows ✔️ Conjuntos de escalado flexibles ✔️ Conjuntos de escalado uniformes
Para que el rendimiento tanto de la escalabilidad vertical como de la horizontal de las aplicaciones de HPC sea óptimo en Azure es preciso realizar experimentos para lograr ajustar el rendimiento y optimizarlas para la carga de trabajo específica. Tanto esta sección como las páginas específicas de la serie de las máquinas virtuales ofrecen una guía general para escalar las aplicaciones.
Configuración de la aplicación
El repositorio azurehpc contiene muchos ejemplos de:
- Configuración y ejecución óptimas de aplicaciones.
- Configuración de sistemas de archivos y clústeres.
- Tutoriales sobre cómo empezar a trabajar fácilmente con algunos flujos de trabajo de aplicaciones comunes.
Escalado óptimo de MPI
Mediante la aplicación de las siguientes sugerencias se logra una coherencia, rendimiento y eficiencia óptimos en el escalado de aplicaciones:
Para trabajos de menor escala (< 256 000 conexiones) use:
UCX_TLS=rc,sm
Para trabajos de mayor escala (> 256 000 conexiones) use:
UCX_TLS=dc,sm
Para calcular el número de conexiones para el trabajo de MPI, use:
Max Connections = (processes per node) x (number of nodes per job) x (number of nodes per job)
Enrutamiento adaptable
El enrutamiento adaptable (AR) permite que las máquinas virtuales (VM) de Azure que ejecutan EDR y HDR InfiniBand detecten y eviten automáticamente la congestión de la red mediante la selección dinámica de rutas de red óptimas. Como resultado, AR ofrece una mayor latencia y ancho de banda en la red InfiniBand, que a su vez impulsa un mayor rendimiento y escalabilidad. Para más información, consulte el artículo de TechCommunity.
Anclaje de procesos
- Ancle procesos a núcleos mediante un enfoque de anclaje secuencial (en lugar de un enfoque de equilibrio automático).
- El enlace por Numa/Core/HwThread es mejor que el enlace predeterminado.
- Para aplicaciones paralelas híbridas (OpenMP+MPI), use cuatro subprocesos y un rango MPI por [CCX](información general de máquinas virtuales de la serie HB que incluye información sobre CCX) en tamaños de VM HB y HBv2.
- En el caso de aplicaciones MPI puras, experimente con entre uno y cuatro rangos MPI por CCX para obtener un rendimiento óptimo en tamaños de VM HB y HBv2.
- Algunas aplicaciones con una sensibilidad extrema al ancho de banda de memoria pueden beneficiarse del uso de un menor número de núcleos por CCX. Para estas aplicaciones, el uso de tres o dos núcleos por CCX puede reducir la contención del ancho de banda de la memoria y generar un mayor rendimiento en el mundo real o una escalabilidad más consistente. En concreto, MPI "Allreduce" se puede beneficiar de este enfoque.
- En el caso de ejecuciones a mayor escala, se recomienda usar transportes UD o RC+UD híbridos. Muchas bibliotecas MPI/bibliotecas de runtime usan estos transportes internamente (como UCX o MVAPICH2). Compruebe las configuraciones de transporte en las ejecuciones a gran escala.
Compilación de aplicaciones
Hacer clic para expandir
Aunque no es necesario, la compilación de aplicaciones con las marcas de optimización adecuadas proporciona el mejor rendimiento de escalado vertical en máquinas virtuales de las series HC y HB.
Compilador AMD Optimizing C/C++ Compiler
El compilador AMD Optimizing C/C++ Compiler (AOCC) ofrece un alto nivel de optimizaciones avanzadas, subprocesamiento múltiple y compatibilidad de procesador que incluye la optimización global, la vectorización, el análisis entre procedimientos, las transformaciones de bucle y la generación de código. Los archivos binarios del compilador AOCC son adecuados para sistemas Linux que tengan la versión 2.17 de la biblioteca GNU C Library (glibc), y cualquier versión superior. El conjunto de compiladores consta de un compilador de C/C++ (clang), un compilador de Fortran (FLANG) y un front-end de Fortran para Clang (Dragon Egg).
Clang
Clang es un compilador para C, C++ y Objective-C que se usa para controlar el preprocesamiento, el análisis, la optimización, la generación de código, el ensamblado y la vinculación.
Clang admite la marca -march=znver1
, que permite mejorar y ajustar la generación de código para la arquitectura x86 basada en Zen de AMD.
FLANG
El compilador FLANG es una incorporación reciente al conjunto AOCC (agregado en abril de 2018) y actualmente se encuentra en versión preliminar para que los desarrolladores la descarguen y prueben. Se basa en Fortran 2008 y AMD amplía la versión de GitHub de FLANG. El compilador FLANG admite todas las opciones del compilador Clang y varias opciones adicionales específicas del compilador FLANG.
DragonEgg
DragonEgg es un complemento de gcc que reemplaza los optimizadores y los generadores de código de GCC por los del proyecto LLVM. DragonEgg, que se incluye con AOCC, funciona con gcc-4.8.x, se ha probado para destinos x86-32/x86-64 y se ha utilizado correctamente en diversas plataformas de Linux.
GFortran es el front-end real para los programas de Fortran responsables del preprocesamiento, la redistribución y el análisis semántico que genera la representación intermedia de GCC GIMPLE (IR). DragonEgg es un complemento de GNU que conecta con el flujo de compilación de GFortran. Implementa la API del complemento de GNU. Con la arquitectura del complemento, DragonEgg se convierte en el controlador del compilador e impulsa las distintas fases de compilación. Después de seguir las instrucciones de descarga e instalación, DragonEgg se puede invocar mediante:
gfortran [gFortran flags]
-fplugin=/path/AOCC-1.2-Compiler/AOCC-1.2-
FortranPlugin/dragonegg.so [plugin optimization flags]
-c xyz.f90 $ clang -O3 -lgfortran -o xyz xyz.o $./xyz
Compilador PGI
Se confirma que Community Edition 17 de PGI funciona con AMD EPYC. Una versión compilada por PGI de STREAM entrega todo el ancho de banda de la memoria de la plataforma. La más reciente Community Edition 18.10 (noviembre de 2018) también debería funcionar correctamente. Use este comando de la CLI para compilar con el compilador de Intel:
pgcc $(OPTIMIZATIONS_PGI) $(STACK) -DSTREAM_ARRAY_SIZE=800000000 stream.c -o stream.pgi
Compilador Intel
Se confirma que Intel Compiler 18 funciona con AMD EPYC. Use este comando de la CLI para compilar con el compilador de Intel.
icc -o stream.intel stream.c -DSTATIC -DSTREAM_ARRAY_SIZE=800000000 -mcmodel=large -shared-intel -Ofast –qopenmp
Compilador GCC
Para cargas de trabajo de HPC, AMD recomienda el compilador GCC 7.3 o posterior. No se recomiendan las versiones anteriores, como 4.8.5 incluidas con RHEL 7.4. GCC 7.3 y las versiones posteriores ofrecen un mayor rendimiento en las pruebas HPL, HPCG y DGEMM.
gcc $(OPTIMIZATIONS) $(OMP) $(STACK) $(STREAM_PARAMETERS) stream.c -o stream.gcc
Pasos siguientes
- Pruebe sus conocimientos con un módulo de aprendizaje sobre la optimización de aplicaciones HPC en Azure.
- Revise la información general de la serie HBv3 y la información general de la serie HC.
- En los blogs de Azure Compute Community Tech, encontrará los anuncios más recientes, ejemplos de la carga de trabajo HPC y resultados de HPC.
- Obtenga más información acerca de HPC en Azure.