HPC-toepassingen schalen
Van toepassing op: ✔️ Virtuele Linux-machines voor Windows-VM's ✔️ ✔️ Flexibele schaalsets Uniform-schaalsets ✔️
Voor optimale omhoog- en uitschaalprestaties van HPC-toepassingen in Azure zijn prestatie-afstemmings- en optimalisatieexperimenten vereist voor de specifieke workload. Deze sectie en de pagina's van de VM-serie bieden algemene richtlijnen voor het schalen van uw toepassingen.
Installatie van toepassing
De azurehpc-opslagplaats bevat veel voorbeelden van:
- Het optimaal instellen en uitvoeren van toepassingen .
- Configuratie van bestandssystemen en clusters.
- Zelfstudies over hoe u eenvoudig aan de slag kunt gaan met enkele algemene toepassingswerkstromen.
MPI optimaal schalen
De volgende suggesties zijn van toepassing op optimale efficiëntie, prestaties en consistentie van toepassingen:
Gebruik voor kleinere taken (< 256K-verbindingen):
UCX_TLS=rc,sm
Gebruik voor grotere schaaltaken (> 256K-verbindingen):
UCX_TLS=dc,sm
Als u het aantal verbindingen voor uw MPI-taak wilt berekenen, gebruikt u:
Max Connections = (processes per node) x (number of nodes per job) x (number of nodes per job)
Adaptieve routering
Met adaptieve routering (AR) kunnen virtuele Azure-machines (VM's) met EDR en HDR InfiniBand automatisch netwerkcongestie detecteren en voorkomen door dynamisch optimale netwerkpaden te selecteren. Als gevolg hiervan biedt AR verbeterde latentie en bandbreedte op het InfiniBand-netwerk, wat op zijn beurt hogere prestaties en schaalefficiëntie aanstuurt. Zie het TechCommunity-artikel voor meer informatie.
Procespinning
- Maak processen vast aan kernen met behulp van een sequentiële pinningbenadering (in plaats van een benadering voor automatisch verdelen).
- Binding door Numa/Core/HwThread is beter dan standaardbinding.
- Voor hybride parallelle toepassingen (OpenMP+MPI) gebruikt u vier threads en één MPI-rang per [CCX](overzicht van virtuele machines uit de HB-serie, inclusief informatie over CCX's) op HB- en HBv2-VM-grootten.
- Voor pure MPI-toepassingen experimenteert u met één tot vier MPI-classificaties per CCX voor optimale prestaties op HB- en HBv2-VM-grootten.
- Sommige toepassingen met extreme gevoeligheid voor geheugenbandbreedte kunnen profiteren van het gebruik van een verminderd aantal kernen per CCX. Voor deze toepassingen kan het gebruik van drie of twee kernen per CCX het conflict tussen geheugenbandbreedte verminderen en hogere werkelijke prestaties of consistentere schaalbaarheid opleveren. Met name MPI 'Allreduce' kan van deze aanpak profiteren.
- Voor grotere uitvoeringen is het raadzaam om UD- of hybride RC+UD-transporten te gebruiken. Veel MPI-bibliotheken/runtimebibliotheken gebruiken deze transporten intern (zoals UCX of MVAPICH2). Controleer uw transportconfiguraties voor grootschalige uitvoeringen.
Toepassingen compileren
Klik om uit te vouwen
Hoewel dit niet nodig is, biedt het compileren van toepassingen met de juiste optimalisatievlagmen de beste schaalprestaties op VM's uit de HB- en HC-serie.
AMD C/C++-compiler optimaliseren
Het AOCC-compilersysteem (AMD Optimizeing C/C++ Compiler) biedt een hoog niveau van geavanceerde optimalisaties, multithreading en processorondersteuning die wereldwijde optimalisatie, vectorisatie, inter-procedurele analyses, lustransformaties en codegeneratie omvat. Binaire AOCC-compilerbestanden zijn geschikt voor Linux-systemen met GNU C Library (glibc) versie 2.17 en hoger. De compilersuite bestaat uit een C/C++-compiler (clang), een Fortran-compiler (FLANG) en een Fortran-front-end naar Clang (Dragon Egg).
Clang
Clang is een C-, C++- en Objective-C-compiler voorverwerking, parsering, optimalisatie, codegeneratie, assembly en koppelen.
Clang ondersteunt de -march=znver1
vlag om het genereren en afstemmen van de beste code voor amd's Zen-architectuur op basis van x86 mogelijk te maken.
LANG
De FLANG-compiler is een recente toevoeging aan de AOCC-suite (toegevoegd april 2018) en is momenteel in voorlopige versie voor ontwikkelaars om te downloaden en te testen. Op basis van Fortran 2008 breidt AMD de GitHub-versie van FLANG uit. De FLANG-compiler ondersteunt alle Clang-compileropties en andere FLANG-specifieke compileropties.
DragonEgg
DragonEgg is een gCC-invoegtoepassing die de optimalisaties en codegeneratoren van GCC vervangt door het LLVM-project. DragonEgg dat wordt geleverd met AOCC werkt met gCC-4.8.x, is getest op x86-32/x86-64 doelen en is met succes gebruikt op verschillende Linux-platforms.
GFortran is de werkelijke front-end voor Fortran-programma's die verantwoordelijk zijn voor preprocessing, parsering en semantische analyse die de GCC GIMPLE tussenrepresentatie (IR) genereert. DragonEgg is een GNU-invoegtoepassing, plugging in GFortran compilatiestroom. Het implementeert de GNU-plugin-API. Met de invoegtoepassingsarchitectuur wordt DragonEgg het compilerstuurprogramma, wat de verschillende fasen van compilatie aansturen. Nadat u de download- en installatie-instructies hebt gevolgd, kan Dragon Egg worden aangeroepen met behulp van:
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
PGI-compiler
PGI Community Edition 17 wordt bevestigd om te werken met AMD EPYC. Een door PGI gecompileerde versie van STREAM levert volledige geheugenbandbreedte van het platform. De nieuwere Community Edition 18.10 (november 2018) zou eveneens goed moeten werken. Gebruik deze CLI-opdracht om te compileren met de Intel Compiler:
pgcc $(OPTIMIZATIONS_PGI) $(STACK) -DSTREAM_ARRAY_SIZE=800000000 stream.c -o stream.pgi
Intel Compiler
Intel Compiler 18 is bevestigd om te werken met AMD EPYC. Gebruik deze CLI-opdracht om te compileren met de Intel Compiler.
icc -o stream.intel stream.c -DSTATIC -DSTREAM_ARRAY_SIZE=800000000 -mcmodel=large -shared-intel -Ofast –qopenmp
GCC-compiler
Voor HPC-workloads raadt AMD GCC-compiler 7.3 of hoger aan. Oudere versies, zoals 4.8.5 die zijn opgenomen in RHEL 7.4, worden niet aanbevolen. GCC 7.3 en hoger levert hogere prestaties op HPL-, HPCG- en DGEMM-tests.
gcc $(OPTIMIZATIONS) $(OMP) $(STACK) $(STREAM_PARAMETERS) stream.c -o stream.gcc
Volgende stappen
- Test uw kennis met een leermodule over het optimaliseren van HPC-toepassingen in Azure.
- Bekijk het overzicht van de HBv3-serie en het overzicht van de HC-serie.
- Lees meer over de nieuwste aankondigingen, voorbeelden van HPC-werkbelastingen en prestatieresultaten in de Blogs van de Azure Compute Tech Community.
- Meer informatie over HPC in Azure.