Привет, Хабр! Продолжаем серию статей об участии команды СПбГУ (мы называем себя EnterTildeDot) в крупнейшем в мире студенческом суперкомпьютерном соревновании.
В этой статье мы рассмотрим путь к ASC’18 на примере одного члена команды, уделив особое внимание визитной карточке конкуренции и современных суперкомпьютеров в целом — Linpack. Что ж, давайте разберемся в секрете достижения рекордной и антирекордной производительности вычислительных систем.
Краткий экскурс по суперкомпьютерным соревнованиям Общие сведения о том, что это за соревнования, можно найти в нашем прошлом.
статьи , включая длинный пост о конкурсе этого года.
Однако для полноты картины мы все же предоставим здесь некоторую информацию о конкурсе в целом.
Азиатский суперкомпьютерный вызов — одно из трех крупнейших командных соревнований по высокопроизводительным вычислениям, в котором каждый год принимает участие все больше и больше студенческих команд со всего мира.
ASC, как и другие подобные соревнования, требует проведения квалификационного и финального раунда со следующими условиями:
- Основная деятельность: решение задач HPC;
- Команда: 5 учеников + тренер;
- Отборочный этап: описание соответствия предложения описанию решения представленных задач, на основании чего определяется список из 20 финалистов.
- Финальный этап: очные соревнования для 20 команд продолжительностью около 5 соревновательных дней, включая полную сборку и настройку вычислительного кластера, решение задач, презентацию.
Кластер собирается исходя из ограничения мощности 3 кВт, либо из оборудования, предоставленного организаторами, либо из своего собственного.
Кластер не имеет доступа в Интернет. Задания частично совпадают с заданиями отборочного этапа, но есть и неизвестное задание - Загадочное приложение.
В отличие от остальных участников команды, уже вышедших в финал ASC’17, я присоединился к соревновательному движению только в этом году.
Я присоединился к команде в сентябре, задания отборочного этапа рассылаются только в январе, поэтому у меня было достаточно времени, чтобы изучить основные концепции конкурса, а также поработать над единственным известным ранее заданием - HPL&HPCG. Задание в том или ином виде возникает практически каждый год, но не всегда заранее известно, на каком оборудовании оно должно быть выполнено (иногда организаторы предоставляют удаленный доступ к собственным ресурсам).
HPL HPL (High Performance Computing Linpack Benchmark) — тест производительности вычислительной системы, по результатам которого разрабатывается современный список лучшие в мире суперкомпьютеры.
Суть теста заключается в решении плотных систем линейных алгебраических уравнений.
Появление этого бенчмарка ввело метрику, позволяющую ранжировать суперкомпьютеры, но в то же время своим появлением оказало некоторую «медвежью услугу» сообществу HPC. Если посмотреть на список лучших суперкомпьютеров, то можно понять, что секрет Linpack был разгадан довольно быстро — берите как можно больше графических ускорителей и вы будете на вершине.
Конечно, есть исключения, но первые места занимают преимущественно суперкомпьютеры с графическими ускорителями.
Что такое «медвежья услуга»? Дело в том, что, кроме измерения производительности, Linpack больше нигде не используется и не имеет никакого отношения к реальным вычислительным задачам.
В результате гонка суперкомпьютеров пошла в сторону получения наибольшей эффективности Linpack, а не реальных рабочих нагрузок, вроде решения типичных задач EG? вместо освоения школьной программы.
Разработчики HPL также создали еще один пакет — HPCG, на основе которого рейтинг суперкомпьютеры.
Принято считать, что этот бенчмарк ближе к реальным задачам, чем HPL, и в некотором смысле существенное расхождение позиций суперкомпьютера в этих двух списках отражает реальное положение дел.
Однако последние рейтинги (июнь 2018 года) стали приятным исключением, и, наконец, первые позиции списков совпали.
А теперь о настоящем HPL Давайте вернемся к более практическим аспектам истории и конкурса.
Linpack имеет открытый исходный код, доступен для скачивания на официальном сайте.
Веб-сайт Однако вряд ли в мировом топе найдется суперкомпьютер, производительность которого измерялась именно этой версией бенчмарка.
Производители ускорителей выпускают собственные версии HPL, оптимизированные для конкретных устройств, что приводит к значительному увеличению производительности.
Разумеется, кастомные версии HPL должны соответствовать определённым критериям и успешно пройти специальные испытания.
У каждого вендора для каждого ускорителя своя версия HPL, однако, в отличие от оригинального бенчмарка, ни о каком open-source здесь речь не идет. Nvidia выпускает версии HPL, оптимизированные для каждой карты, а код больше не поставляется в виде исходников, а в виде двоичных файлов.
Кроме того, есть только два способа получить к ним доступ:
- У вас есть суперкомпьютер с картами Nvidia, способный войти в топ — Nvidia вас найдет сама.
Увы, бинарники вы, скорее всего, не получите, как и не будете иметь возможности участвовать в оптимизации параметров HPL. Так или иначе, вы получите адекватное значение производительности, полученное на оптимизированном бенчмарке.
- Вы — участник одного из трёх студенческих суперкомпьютерных соревнований.
Но к этой части мы вернемся позже.
В этом случае не нужно гнаться за абсолютными цифрами производительности, так как некоторым командам может быть доступен большой и крутой кластер из 226 узлов с современными ускорителями, а другим — только доступ к университетской компьютерной лаборатории номер 226, которую мы называем кластер.
В случае финального этапа уже имеет смысл сравнивать абсолютные значения производительности.
Не сказать, что здесь все в равных условиях, но хотя бы есть ограничение на допустимую максимальную мощность системы.
Результат запуска бенчмарка в первую очередь зависит от двух составляющих: конфигурации кластера и настроек параметров самого бенчмарка.
Еще стоило бы отметить влияние выбора компиляторов и библиотек для матричных и векторных расчетов, но здесь все довольно скучно, все используют компилятор Intel+MKL. А в случае с бинарниками вообще не придется выбирать, так как они уже собраны.
Результатом выполнения HPL является числовое значение, указывающее, сколько операций с плавающей запятой в секунду выполняет данная вычислительная система.
Основная единица измерения — FLOPS (операций с плавающей запятой в секунду) с соответствующими префиксами.
В случае финального этапа конкурса речь практически всегда идет о системах Terascale. Оптимизация результатов Настройка параметров бенчмарка заключается в интеллектуальном выборе входных данных задачи, рассчитанных Linpak (файл HPL.dat).
При этом наибольшее влияние оказывает размерность этой задачи - размер матрицы, размер блоков, на которые разбита матрица, в каком соотношении распределять блоки и т.д. Итого , параметров несколько десятков, возможные значения - тысячи.
Брутфорс — не лучший выбор, особенно если тест на относительно небольших системах длится от пары минут до пары часов в зависимости от конфигурации (для GPU тест проходит значительно быстрее).
У меня было достаточно времени, чтобы изучить как уже описанные в других источниках закономерности, способствующие оптимизации результатов бенчмарков, так и выявить новые.
Я огромное количество раз запускал тесты, создал множество Google-планшетов, пытался получить доступ к системам с ранее непроверенной конфигурацией, чтобы запустить бенчмарк и на них.
В результате еще до начала отборочного этапа было протестировано ряд систем, как CPU, так и GPU, включая даже совершенно неподходящую Nvidia Quadro P5000. К моменту начала отборочного этапа у нас был доступ к нескольким нодам с P100 и P6000, что очень помогло нам в подготовке.
Конфигурация этой системы во многом была похожа на ту, которую мы планировали собрать в рамках финального этапа соревнований, а также мы наконец-то получили доступ к низкоуровневым настройкам, включая изменение частоты.
С точки зрения конфигурации наибольшее влияние оказывает наличие и количество ускорителей.
В случае тестирования системы с графическим процессором наиболее оптимальный вариант — когда основная вычислительная часть задачи делегируется графической составляющей.
Компонент CPU также будет загружен вспомогательными задачами, но не будет способствовать повышению производительности системы.
Но при этом пиковая производительность ЦП должна учитываться в пиковой производительности системы в целом, что может выглядеть крайне невыгодно с точки зрения соотношения максимальной производительности к пиковой (теоретической).
При запуске HPL на графическом процессоре система с двумя ускорителями графического процессора и двумя процессорами будет работать как минимум так же хорошо, как система с двумя графическими процессорами и 20 процессорами.
Описав предложения по возможной оптимизации результатов HPL, я закончил со своей частью предложения по отборочному этапу, и, выйдя в финал конкурса, начался новый этап конкурса – поиск спонсоров.
С одной стороны, нам нужен был спонсор, который покроет расходы на перелет команды в Китай, с другой – спонсор, который любезно согласился бы предоставить команде графические ускорители.
В конечном итоге нам повезло с первым; университет предоставил часть денег, а компания помогла полностью оплатить билеты Девэксперты .
Нам меньше повезло со спонсорами, у которых мы планировали одолжить карты, и вот мы снова вылетаем в финал с базовой конфигурацией кластера без единого шанса быть конкурентоспособными в HPL. Ну ничего, воспользуемся тем, что нам дают, подумали мы.
Финал ASC'18 И вот мы в Китае, в крохотном по китайским меркам городке Наньчане, в финале.
Два дня собираем кластер, а потом задачи.
В этом году всем командам было предоставлено по 4 карты Nvidia V100; это не давало нам преимущества перед другими командами, но давало возможность запускать HPL не на процессоре.
Изначально каждому дается по 10 узлов, но лишние (помним про ограничение в 3 кВт) необходимо вернуть до начала этапа выполнения основных конкурсных задач.
Здесь есть некоторая хитрость — при уменьшении частоты CPU и GPU снижается их производительность, но можно подобрать такие значения частоты, чтобы мы получали большую производительность на единицу потребляемой энергии.
Снизив частоту, мы получаем возможность добавить еще больше ускорителей, что в конечном итоге улучшит производительность.
Увы, этот трюк был бы для нас гораздо полезнее, если бы мы приехали на соревнования с чемоданом ускорителей, как другие участники.
Однако мы смогли позволить себе оставить максимальное количество процессоров.
Поскольку не для всех соревновательных задач требуется графический процессор, возникло подозрение, что каким-то образом это может пойти нам на пользу.
Таким образом, самая распространенная конфигурация кластера в финале конкурса — минимум узлов, максимум карт.
Финальный линкпак и немного о рекордах
Задания в конкурсе были привязаны к определенным конкурсным дням, и первым из них стал HPL, естественно, после сборки кластера.Крайний срок подачи результатов HPL – обед третьего дня соревнований; Кроме того, доступ к остальным заданиям этого соревновательного дня открывается сразу после прохождения Линпака.
Однако Linpack начинают использовать уже в первые дни.
Во-первых, чтобы убедиться в правильности сборки кластера, во-вторых, настройка Linpack – задача не быстрая, а раз никаких дополнительных входных данных не требуется, то почему бы и нет. Мы довольно быстро собрали наш кластер и тоже начали работать над Linpack. Для нашей конфигурации мы получили вполне адекватные значения — около 20 Тфлопс, и всё бы ничего, но после отображения результата появилась строка с ошибкой.
Раньше такие ошибки я получал только тогда, когда умышленно задавал неправильные размеры блоков, на которые разбита проблемная матрица.
Здесь нас ждал очень неприятный сюрприз.
Ранее я вам говорил, что нам дали 4 карты V100, но так.
Бинарники HPL для них мы не получили и никто не смог нам в этом помочь.
Прошло несколько месяцев, а для меня до сих пор загадка, что произошло в том финале с нашим Линпаком.
Мы меняли версии компиляторов и других библиотек в надежде избавиться от ошибки, неоднократно проверяли, правильно ли мы установили ускорители (так как делали это впервые), но исправить ошибку нам не удалось.
Накануне теста Линпака мы еще раз внимательно изучили критерии оценки задания, так вот, для формулы Линпака формула состояла из двух составляющих - определенного значения, зависящего от результата команды, выигравшей Линпак, и коэффициента за успешное выполнение задания.
Оказалось, что этот коэффициент настолько велик, что передать адекватное значение Линпака, но с непонятной ошибкой, совершенно невыгодно по сравнению с передачей любого значения, но без ошибки.
Тщательно все обдумав, принимая во внимание тот факт, что на поиск решения ошибки было потрачено очень много времени и что получение датасетов от следующих задач полностью зависит от времени подачи Линпака, мы решили тактически объединить эту задачу .
Таким образом, в истории суперкомпьютерных соревнований среди правильных значений был установлен абсолютный «рекорд».
Наш Linpack взорвался смыслом 0.01 Тфлопс.
Конечно, если бы мы оптимизировали бенчмарк под существующие процессоры, мы бы получили несколько большее значение производительности, но существенного влияния на результаты это не оказало бы, да и времени было бы потрачено гораздо больше.
Мы помним, что Linpack работает на процессоре гораздо дольше.
Национальный университет Цин Хуа показал лучший результат - 43 Тфлопс.
Через день или два Джек Донгарра (создатель Linpak), входивший в оргкомитет конкурса, случайно спросил нас, как дела у Linpak? Видимо, он еще не видел таблицу результатов: его реакция WHAAAT стоила каждого часа, потраченного на HPL.
Тайное приложение
Пройдя тесты, по заранее подготовленному плану я присоединился к части команды, которая должна была работать над Mystery Application. Никто заранее не знал, что это будет за задача, поэтому мы приготовились к худшему — заранее установили на кластер все, что может пригодиться с флэшки.Как правило, основная сложность заданий этого раздела — их сбор.
На этот раз все оказалось немного иначе.
Приложение Собрал почти с первого раза, без проблем.
Проблемы начались, когда мы получили ошибку по адресу на большинстве представленных наборов данных, несмотря на то, что это было приложение на Фортране.
Судя по таблице результатов, не у нас одних возникли проблемы с этим заданием.
Секретное оружие: процессор
Ну а последнее задание, в котором я принял участие, было запланировано на следующий соревновательный день.В отличие от Mystery Application, мы ранее видели пакет, с которым нам пришлось работать — это был cfl3d. Когда мы узнали, что это продукт НАСА, все почему-то обрадовались, думая, что точно все будет хорошо и со сборкой, и с оптимизацией.
Когда мы тестировали комплект дома, проблем со сборкой не возникло, но примеры использования были очень интересными.
Большинство примеров имели зависимости от установки дополнительных инструментов, а также случалось, что когда мы пытались погуглить один из этих инструментов — инструмент XX, мы находили статью 1995 года, где говорилось, что инструмент XX сейчас устарел и используют YY. Сайт продукта из тех же времен — документация часто отправляла пользователя на страницы сайта, но это всего лишь сайт в рамке и дальше главной страницы пройти не получится.
Актуальность примеров оставляла желать лучшего.
Проще говоря, суть задачи заключалась в том, чтобы грамотно разбить многоуровневую сетку, сохранив при этом заданный уровень точности.
Конечно, основным показателем здесь было время.
Как-то так получилось, что в этот день мы уже были максимально расслаблены и просто делали то, что должны были сделать.
Задача была для ЦП, а его у нас было очень много.
Входные файлы задачи имели весьма специфический вид и зачастую были большими по размеру — до сотен строк.
Член нашей команды написал скрипт, который автоматизировал процесс создания входного файла, ускорив этот процесс, наверное, в сотни раз.
В конечном итоге все наборы данных были успешно завершены и оптимизированы; оставалось даже время попробовать пересобрать пакет с некоторыми интересными опциями, но особого ускорения мы не получили.
Мы справились с этой задачей лучше других, получив специальный приз «Инновация приложений», а также 11 место в общекомандном зачете (из 20 в финале, из 300+ среди всех участников конкурса).
Таблица с конфигурациями компьютерной системы, а также основное фото взяты с сайта.
Теги: #Высокая производительность #Конфигурация Linux #Параллельное программирование #Суперкомпьютеры #HPC #asc #asc18 #соревнования суперкомпьютеров #вызов суперкомпьютера #linpack #hpl
-
Стокс, Джордж Габриэл
19 Oct, 24 -
Лучшие Комментарии В Исходном Коде
19 Oct, 24 -
Откуда Берутся Идеи?
19 Oct, 24 -
Это 1.0.8
19 Oct, 24