Skalowanie aplikacji HPC

Uwaga

W tym artykule odwołuje się do systemu CentOS — dystrybucji systemu Linux, która zbliża się do stanu zakończenia życia (EOL). Rozważ odpowiednie użycie i zaplanuj. Aby uzyskać więcej informacji, zobacz wskazówki dotyczące zakończenia życia systemu CentOS.

Dotyczy: ✔️ Maszyny wirtualne z systemem Linux Maszyny ✔️ wirtualne z systemem Windows ✔️ — elastyczne zestawy ✔️ skalowania

Optymalne skalowanie w górę i skalowanie w poziomie aplikacji HPC na platformie Azure wymaga eksperymentów dostrajania wydajności i optymalizacji dla określonego obciążenia. Ta sekcja i strony specyficzne dla serii maszyn wirtualnych oferują ogólne wskazówki dotyczące skalowania aplikacji.

Konfiguracja aplikacji

Repozytorium azurehpc zawiera wiele przykładów:

Optymalne skalowanie interfejsu MPI

Poniższe sugestie dotyczą optymalnej wydajności, wydajności i spójności aplikacji:

  • W przypadku zadań o mniejszej skali (< połączenia 256K) używają: UCX_TLS=rc,sm

  • W przypadku większych zadań skalowania (> połączenia 256K) używają: UCX_TLS=dc,sm

  • Aby obliczyć liczbę połączeń dla zadania MPI, użyj: Max Connections = (processes per node) x (number of nodes per job) x (number of nodes per job)

Routing adaptacyjny

Routing adaptacyjny (AR) umożliwia maszynom wirtualnym platformy Azure z systemem EDR i HDR InfiniBand automatyczne wykrywanie i unikanie przeciążenia sieci przez dynamiczne wybieranie optymalnych ścieżek sieciowych. W związku z tym ar oferuje lepsze opóźnienia i przepustowość w sieci InfiniBand, co z kolei zwiększa wydajność i wydajność skalowania. Aby uzyskać więcej informacji, zobacz artykuł TechCommunity.

Przypinanie procesu

  • Przypinanie procesów do rdzeni przy użyciu metody przypinania sekwencyjnego (w przeciwieństwie do podejścia automatycznego równoważenia).
  • Powiązanie według wartości Numa/Core/HwThread jest lepsze niż domyślne powiązanie.
  • W przypadku hybrydowych aplikacji równoległych (OpenMP+MPI) należy używać czterech wątków i jednej rangi MPI na [CCX](omówienie maszyn wirtualnych serii HB, w tym informacje na temat ccXs) w rozmiarach maszyn wirtualnych HB i HBv2.
  • W przypadku czystych aplikacji MPI poeksperymentuj z od jednego do czterech klasyfikacji MPI na CCX, aby uzyskać optymalną wydajność w rozmiarach maszyn wirtualnych HB i HBv2.
  • Niektóre aplikacje o skrajnej wrażliwości na przepustowość pamięci mogą korzystać z mniejszej liczby rdzeni na CCX. W przypadku tych aplikacji użycie trzech lub dwóch rdzeni na CCX może zmniejszyć rywalizację o przepustowość pamięci i zwiększyć wydajność w świecie rzeczywistym lub bardziej spójną skalowalność. W szczególności mpI "Allreduce" może skorzystać z tego podejścia.
  • W przypadku większych przebiegów skalowania zaleca się używanie transportu zdefiniowanych przez użytkownika lub hybrydowych transportów RC+UD. Wiele bibliotek MPI/bibliotek środowiska uruchomieniowego używa tych transportów wewnętrznie (takich jak UCX lub MVAPICH2). Sprawdź konfiguracje transportu pod kątem przebiegów na dużą skalę.

Kompilowanie aplikacji


Kliknij, aby rozwinąć

Chociaż nie jest to konieczne, kompilowanie aplikacji z odpowiednimi flagami optymalizacji zapewnia najlepszą wydajność skalowania w górę na maszynach wirtualnych z serii HB i HC.

Optymalizowanie kompilatora C/C++ przez firmę AMD

System kompilatora AOCC (AMD Optimizationing C/C++ Compiler) oferuje wysoki poziom zaawansowanych optymalizacji, wielowątków i obsługi procesora, który obejmuje optymalizację globalną, wektoryzację, analizy między proceduralne, przekształcenia pętli i generowanie kodu. Pliki binarne kompilatora AOCC są odpowiednie dla systemów Linux mających bibliotekę GNU C Library (glibc) w wersji 2.17 lub nowszej. Pakiet kompilatora składa się z kompilatora C/C++ (clang), kompilatora Fortran (FLANG) i frontonu Fortran w języku Clang (Dragon Egg).

Clang

Clang to kompilator C, C++i Objective-C obsługujący wstępne przetwarzanie, analizowanie, optymalizację, generowanie kodu, zestaw i łączenie. Język Clang obsługuje flagę -march=znver1 umożliwiającą najlepsze generowanie kodu i dostrajanie dla architektury x86 opartej na procesorze AMD Zen.

Język FLANG

Kompilator języka FLANG jest niedawnym dodatkiem do pakietu AOCC (dodanego w kwietniu 2018 r.) i jest obecnie w wersji wstępnej, aby deweloperzy mogli pobierać i testować. W oparciu o Fortran 2008 firma AMD rozszerza wersję języka FLANG w usłudze GitHub. Kompilator języka FLANG obsługuje wszystkie opcje kompilatora języka Clang i inną liczbę opcji kompilatora specyficznego dla języka FLANG.

DragonEgg

DragonEgg to wtyczka gcc, która zastępuje optymalizatory I generatory kodu GCC z projektu LLVM. DragonEgg, który jest dostarczany z AOCC współpracuje z gcc-4.8.x, został przetestowany pod kątem x86-32/x86-64 obiektów docelowych i został pomyślnie użyty na różnych platformach Linux.

GFortran to rzeczywisty fronton dla programów Fortran odpowiedzialnych za wstępne przetwarzanie, analizowanie i analizę semantyczną generując reprezentację pośrednią GCC GIMPLE (IR). DragonEgg to wtyczka GNU, podłączając do przepływu kompilacji GFortran. Implementuje interfejs API wtyczki GNU. Dzięki architekturze wtyczki DragonEgg staje się sterownikiem kompilatora, który napędza różne fazy kompilacji. Po wykonaniu instrukcji pobierania i instalacji można wywołać dragon egg przy użyciu:

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

Kompilator PGI

PGI Community Edition 17 został potwierdzony do współpracy z AMD EPYC. Skompilowana wersja pgI usługi STREAM zapewnia pełną przepustowość pamięci platformy. Nowsza wersja Community Edition 18.10 (listopad 2018 r.) powinna również działać dobrze. Użyj tego polecenia interfejsu wiersza polecenia, aby skompilować za pomocą kompilatora Intel:

pgcc $(OPTIMIZATIONS_PGI) $(STACK) -DSTREAM_ARRAY_SIZE=800000000 stream.c -o stream.pgi

Kompilator Intel

Narzędzie Intel Compiler 18 zostało potwierdzone do pracy z procesorem AMD EPYC. Użyj tego polecenia interfejsu wiersza polecenia, aby skompilować je za pomocą kompilatora Intel.

icc -o stream.intel stream.c -DSTATIC -DSTREAM_ARRAY_SIZE=800000000 -mcmodel=large -shared-intel -Ofast –qopenmp

Kompilator GCC

W przypadku obciążeń HPC firma AMD zaleca kompilator GCC 7.3 lub nowszy. Starsze wersje, takie jak 4.8.5 dołączone do RHEL/CentOS 7.4, nie są zalecane. GCC 7.3 i nowsze zapewniają wyższą wydajność w testach HPL, HPCG i DGEMM.

gcc $(OPTIMIZATIONS) $(OMP) $(STACK) $(STREAM_PARAMETERS) stream.c -o stream.gcc

Następne kroki