Масштабирование приложений HPC
Применимо к: ✔️ Виртуальные машины Linux ✔️ Виртуальные машины Windows ✔️ Универсальные масштабируемые наборы
Оптимальное вертикальное и горизонтальное увеличение масштаба производительности приложений HPC в Azure требует экспериментов по настройке и оптимизации производительности для конкретной рабочей нагрузки. Этот раздел и страницы, относящиеся к ряду виртуальных машин, содержат общие рекомендации по масштабированию приложений.
Настройка приложения
Репозиторий azurehpc содержит множество примеров:
- по оптимальной настройке и запуску приложений;
- по настройке файловых систем и кластеров;
- учебников по быстрому началу работы с некоторыми распространенными рабочими процессами приложения.
Оптимальное масштабирование MPI
Следующие рекомендации относятся к оптимальной эффективности масштабирования приложений, производительности и согласованности:
Для небольших заданий масштабирования (< подключения 256 КБ) используйте:
UCX_TLS=rc,sm
Для более крупных заданий масштабирования (> 256 КБ подключений) используйте:
UCX_TLS=dc,sm
Чтобы вычислить количество подключений для задания MPI, используйте следующую команду:
Max Connections = (processes per node) x (number of nodes per job) x (number of nodes per job)
Адаптивная маршрутизация
Адаптивная маршрутизация (AR) позволяет Azure Виртуальные машины (виртуальным машинам) работать с EDR и HDR InfiniBand для автоматического обнаружения и предотвращения перегрузки сети путем динамического выбора оптимальных сетевых путей. В результате AR обеспечивает уменьшение задержки и повышает пропускную способность сети InfiniBand, в результате чего повышается производительность и эффективность масштабирования. Дополнительные сведения см. в статье TechCommunity.
Закрепление процессов
- Закрепление процессов для ядер с помощью последовательного метода закрепления (в отличие от подхода автобалансировки).
- Привязка NUMA/Core/HwThread лучше, чем привязка по умолчанию.
- Для гибридных параллельных приложений (OpenMP+MPI) используйте четыре потока и один ранг MPI на [CCX](общие сведения о виртуальных машинах серии HB, включая сведения о CCX) на размерах виртуальных машин HB и HBv2.
- Для чистых приложений MPI экспериментируйте с 1–четырьмя рангами MPI на CCX, чтобы обеспечить оптимальную производительность в размерах виртуальных машин HB и HBv2.
- Некоторые приложения с предельной чувствительностью к пропускной способности памяти могут использовать меньшее количество ядер на CCX. Для этих приложений использование трех или двух ядер на CCX может снизить объем пропускной способности памяти и обеспечить более высокую производительность в реальном мире или более согласованную масштабируемость. В частности, MPI Allreduce может воспользоваться этим подходом.
- Для более крупных запусков рекомендуется использовать транспорты UD или гибридного RC+UD. Многие библиотеки MPI и библиотеки среды выполнения используют эти транспорты внутренне (например, UCX или MVAPICH2). Проверьте конфигурации транспорта для крупномасштабных выполнений.
Компиляция приложений
Щелкните, чтобы развернуть
Это необязательно, но компиляция приложений с соответствующими флагами оптимизации обеспечивает наилучшую производительность для виртуальных машин серии HB и HC.
AMD Optimizing C/C++ Compiler
Система компилятора AMD Optimizing C/C++ Compiler (AOCC) обеспечивает высокий уровень расширенной оптимизации, многопоточности и поддержки процессоров, которая включает в себя глобальную оптимизацию, векторизацию, межпроцедурные анализы, преобразования циклов и создание кода. Двоичные файлы компилятора AOCC подходят для систем Linux с библиотекой GNU C Library (glibc) версии 2.17 и выше. Набор компиляторов состоит из компилятора C/C++ (clang), компилятора Fortran (FLANG) и внешнего интерфейса Fortran в Clang (Dragon Egg).
Clang
Clang — компилятор C, C++ и Objective-C, выполняющий предварительную обработку, анализ, оптимизацию, создание кода, сборку и связывание.
Clang поддерживает флаг -march=znver1
для обеспечения наилучшего создания и настройки кода для архитектуры x86 на основе AMD Zen.
FLANG
Компилятор FLANG является недавним дополнением к набору AOCC (добавлено апрель 2018 г.) и в настоящее время находится в предварительной версии для разработчиков для скачивания и тестирования. На основе Фортрана 2008 AMD расширяет версию FLANG GitHub. Компилятор FLANG поддерживает все параметры компилятора Clang и другие параметры компилятора FLANG.
DragonEgg
DragonEgg — это подключаемый модуль gcc, который заменяет оптимизаторы и генераторы кода GCC из проекта LLVM. DragonEgg, который входит в состав AOCC и работает с gcc-4.8.x, проверен на целевых платформах с разрядностью x86-32, x86-64 и успешно использован на различных платформах Linux.
GFortran — это фактический внешний интерфейс для программ Fortran, отвечающих за предварительную обработку, анализ и семантический анализ и создающих промежуточное представление GCC GIMPLE (IR). DragonEgg — это модуль GNU, подключаемый к потоку компиляции GFortran. Он внедряет API модуля GNU. Благодаря архитектуре модулей DragonEgg преобразуется в драйвер компилятора, который запускает различные этапы компиляции. После выполнения инструкций по загрузке и установке Dragon Egg можно вызвать с помощью:
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.
PGI Community Edition версии 17 считается пригодным для работы с AMD EPYC. PGI-скомпилированная версия службы STREAM обеспечивает полную пропускную способность памяти платформы. Более новая версия Community Edition 18.10 (ноябрь 2018 года) также должна работать правильно. Используйте следующую команду CLI для компиляции с помощью компилятора Intel:
pgcc $(OPTIMIZATIONS_PGI) $(STACK) -DSTREAM_ARRAY_SIZE=800000000 stream.c -o stream.pgi
Компилятор Intel
Компилятор Intel версии 18 считается пригодным для работы с AMD EPYC. Используйте эту команду CLI для компиляции с помощью компилятора Intel.
icc -o stream.intel stream.c -DSTATIC -DSTREAM_ARRAY_SIZE=800000000 -mcmodel=large -shared-intel -Ofast –qopenmp
Компилятор GCC
Для рабочих нагрузок HPC AMD рекомендует компилятор GCC 7.3 или более поздней версии. Старые версии, такие как 4.8.5, включенные в RHEL 7.4, не рекомендуется. GCC 7.3 и более поздних версий обеспечивает более высокую производительность тестов HPL, HPCG и DGEMM.
gcc $(OPTIMIZATIONS) $(OMP) $(STACK) $(STREAM_PARAMETERS) stream.c -o stream.gcc
Следующие шаги
- Проверьте свои знания при помощи учебного модуля по оптимизации приложений HPC в Azure.
- Ознакомьтесь с обзором серии HBv3 и обзором серии HC.
- Ознакомьтесь с последними объявлениями, примерами рабочей нагрузки HPC, а также результатами оценки производительности в блогах технического сообщества Вычислений Azure.
- Дополнительные сведения о HPC в Azure.