Привет, Хабр! Я капитан команды СПбГУ, принимавшей участие в соревнованиях ASC. На прошлой неделе вышла статья stealapanda об опыте работы с мощнейшим суперкомпьютером мира Sunway Taihulight. Стало ясно, что многие впервые слышат о таком мероприятии. В своей статье я хочу рассказать в целом об HPC соревнованиях, как они проводятся и какие навыки пригодятся если вы захотите вписаться в эту увлекательную авантюру. Также на примере ASC опишу как это все проходит.


Что такое HPC соревнования и чем они отличаются от обычного спортивного программирования


HPC-соревнования — соревнования студенческих команд по решению задач с использованием вычислительных кластеров. Многие знают соревнования по спортивному программированию, проводящиеся по правилам ACM ICPC поэтому для удобства буду вести сравнение с ними. В соревнованиях ACM ICPC решение сводится к написанию алгоритма, который решает задачу в рамках заданных ограничений по времени и памяти. Нужно понять какой алгоритм подходит для решения задачи и как можно быстрее его закодировать. В HPC соревнованиях вам не придется читать увлекательные тексты задач, пытаясь понять какой алгоритм в них спрятан. Зато вас ждет встреча с консолью Linux, многолетним legacy кодом научных приложений и новейшими технологиями (да-да, все вместе), технологиями параллельного и многопоточного программирования и планировщиками запуска задач.

Вместо написания деревьев и сортировок с закрытыми глазами придется освоить скоростное написание make файлов, выучить флаги компиляции и подружиться с vim, ssh и screen.

Ограничений на количество участий одного и того же человека, как в соревнованиях ACM ICPC я не встречала. Сейчас в мире проводятся 3 таких соревнования: ASC, ISC, SC. Основное их отличие — место проведения. Правила и набор задач во многом схожи. Отдельно можно выделить лишь китайцев (ASC), которые проводят предварительный отборочный тур с решением задач и предоставляют оборудование командам в финале и, для некоторых заданий, также дают доступ к вычислительным ресурсам во время отборочного тура. На ISC и SC нет предварительного отборочного этапа с задачами. Команды отбираются на основе заявок с описанием конфигурации кластера, который команда собирается использовать на соревновании и релевантного HPC тематике опыта участников команды. Во всех 3 соревнованиях награждают за лучший Linpack (один из тестов, используемых для определения вычислительной мощности суперкомпьютеров) и за наибольшую сумму баллов по всем задачам.

Теперь расскажу немного про каждое из соревнований.

ASC (Asian Supercomputer Challenge). Организуются Китаем, основной спонсор — компания Inspur. В 2012 это соревнование проводилось только для Китайских команд, с 2013 года вышло на международный уровень. Засчет наличия спонсора и предварительного этапа отбора является самым массовым. С 2013 по 2017 год число команд участниц выросло с 43 до 230. Квота на проход в финал за это время увеличилась с 10 до 20 мест. Первый этап (preliminary contest) проводится заочно в течение двух месяцев, с января по март. По результатам первого этапа выбираются команды, которые приглашаются для очного участия в финале в конце апреля. Низкий порог вхождения определяется не легкостью задач, а тем, что для участия вам не нужно какое-то сумасшедшее количество денег и супер модный эффективный кластер. Команда должна состоять из 5 “non-graduated” студентов (бакалавры, магистры) и 1 тренера. Во время финала тренеру нельзя находиться на рабочем месте команды.

ISC проводится в рамках студенческой секции конференции ISC (International Supercomputer Conference) в Германии в 20х числах июня. В команде должно быть 6 студентов и 2 тренера. Прием заявок на участие проходит в октябре-ноябре. Предварительного отборочного этапа с решением задач нет, только заявка на участие с описанием конфигурации кластера и опытом членов команды и Университета в области HPC. Вендора, который предоставит оборудование команда должна искать самостоятельно. Организаторы могут написать письмо от имени оргкомитета с предложением вендору посодействовать команде, но готового оборудования, как в случае с ASC, никто не предоставляет. Задачи конкурса представляют собой запуск бенчмарков и нескольких научных приложений.

SC проводится в Америке в ноябре также совместно с суперкомпьютерной конференцией. Соревнование проходит в формате хакатона и длится 48 часов. Команда также состоит из 6 человек, но они не работают одновременно — одному студенту запрещено находиться в соревновательной зоне больше 12 часов в день. За это время команда должна запустить на предварительно собранных и настроенных кластерах 2 бенчмарка (Linpack, HPCG), попробовать воспроизвести результаты выбранной статьи с прошлогодней конференции и запустить еще 3 приложения, одно из которых держится в секрете до начала контеста. Задачи этого года можно посмотреть здесь.

И что со всем этим делать?


Здесь я попробую описать как происходит отбор, технологии, с которыми наверняка придется столкнуться в ходе таких конкурсов и задачи прошлых лет. Наша команда имеет опыт участия только в соревнованиях ASC, поэтому все частные особенности будут подробно описаны только относительно этого конкурса.

Соревнования подразумевают работу с вычислительным кластером. Здесь появляется субъективный момент — на успех команды в некоторой степени (сильно или слабо — зависит от задачи) оказывает влияние железо, которое используется для вычислений, таким образом одной из первостепенных задач становится поиск спонсора, готового предоставить оборудование (ему это выгодно с маркетинговой точки зрения). Также я слышала что некоторые команды (кажется, это был кто-то из китайцев) используют системы своего Университета, но это не про Россию. С трудом представляю, чтобы кто-то позволил вывезти Университетское оборудование в другую страну. Спойлер: наша команда даже не имеет доступа к ВЦ Университета. Для подготовки мы используем учебный кластер кафедры 10-летней давности и постоянно ищем любые возможности получения доступа к каким-либо сторонним системам. В конкурсах SC и ISC команды собирают кластер полностью самостоятельно, с учетом только ограничения по мощности в 3000W. ASC ставит участников в чуть более равные условия — кластер у всех участников собирается на базе одного и того же сервера, который предоставляется главным спонсором соревнований компанией Inspur. Команды могут добавлять свои ускорители (видеокарты, Xeon Phi, FPGA), поставить SSD, добавить памяти, но за свой счет (или за счет привлеченных спонсоров).

В заявке команда указывает конфигурацию своего кластера и бэкграунд участников и их Университета в области высокопроизводительных вычислений. В ASC это является частью заочного отборочного тура вместе с решением задач. В ISC и SC просто сразу подается как заявка на очное участие в соревновании.

Стек технологий и навыков, которые наверняка пригодятся во время конкурса: языки программирования: C/C++, Python, Fortran, bash; многопоточные технологии: OpenMP, MPI, OpenCL, OpenACC, CUDA, Intel Cilk Plus, Intel TBB и т.д.

Отборочный этап ASC начинается примерно в 10х числах января и длится 2 месяца. За это время предлагается решить 3 задачи. Как правило целью является ускорение предоставленного кода (в последний раз была одна задача не требующая ускорения). Максимально за отборочный этап можно набрать 100 баллов, который распределяются следущим образом:

  • 10 баллов (5 + 5) дается за представление команды и описание деятельности университета/кафедры в области HPC. Представление команды включает в себя название, слоган, командное фото, рассказ про участников группы и организацию работы в команде. В описание деятельности входит представление имеющихся вычислительных ресурсов, опыта решения HPC задач, статьи по этой тематике, как представлено HPC в университете (курсы и тд). Честно говоря, не понятно, за что начисляются баллы, четкой шкалы нет (как и для всех остальных заданий отборочного этапа). За крутость команды? За полноту рассказа? Или просто всем по 10 баллов за описание?

    Оставшиеся 90 баллов даются за выполнение заданий. Часть задач предполагает, что участники должны запускать их на своем оборудовании, другие требуется запускать на удаленном кластере, одинаковом для всех команд. Если у команды доступа к мощным вычислительным ресурсам, то именно на такие задачи стоит делать ставку.
  • 1 задание, до 15 баллов- собрать конфигурацию кластера, обосновав использование выбранных элементов. Подразумевается, что эта конфигурация будет использована командой в финале, но по факту ее можно будет поменять. Собирать решение надо на базе предоставленного сервера (в 2017 Inspur NF5280M4), в списке доступного оборудования также свитч (Infiniband или Ethernet), соответствующие ему кабель и карта, до 2016 года включительно был доступен Xeon Phi. Ограничительное условие — теоретическая мощность всего кластера должна уложиться в 3000W.
  • 2 задание, до 15 баллов — запуск бенчмарка. В разные годы были представлены HPL (Linpack), HPCG (2016), HPCC (2015) (HPL + other tests). В 2017 года бенчмарк было необходимо запустить на предоставляемом организаторами кластере с KNL процессорами (2e поколение Intel Xeon Phi), ранее участники запускали бенчмарки на том оборудовании, которое у них было. Задача — выжать максимум производительности. В отчёте необходимо описать конфигурацию кластера на котором запускался бенчмарк, результаты запусков и действия по его настройке.

    3 и 4 задания ранее давали 20 и 40 баллов соответственно. В 2017 — по 30 баллов каждое.
  • 3 задание — оптимизация кода, с целью ускорить работу на некотором наборе данных. В разные годы это были научные приложения на С, С++, Fortran.
    2013 — Gromacs
    2014 — Quantum Espresso Test
    2015 — NAMD
    2016, 2017 — MASNUM_WAVE
  • 4 задание — оптимизация под Xeon Phi и запуск на нем. (до 2017). В 2017 4я задача была посвящена прогнозированию дорожного траффика нейронной сетью, и оценивалась уже не скорость работы, а точность предсказания.
    2013 — BSDE option pricing
    2014 — 3D-EW
    2015 — Gridding (Square Kilometre Array project)
    2016 — оптимизация нейронной сети (китайская программа DNN)

При решении задач стоит учесть, что предоставляемые для некоторых задач китайские сервера во время китайского нового года в начале февраля будут выключены (в течение недели). После этого на них начинается ажотаж и задача может достаточно долго стоять в очереди на исполнение. Задачи, требующие запуска на этих серверах надо решать в первую очередь.

Примерно через одну-две недели становятся известны результаты. Что характерно, никакой таблицы результатов организаторы не выкладывают и даже лично командам не сообщают их баллы. Единственное, на что можно ориентироваться — порядок перечисления команд. По нашим предположениям он соответствует рейтингу. Кроме команд-финалистов также объявляется список команд, показавших хороший результат.

До финала есть 2 месяца, чем же их занять? В финале нужно будет самостоятельно собрать и настроить кластер. На это дается 2 дня. Вам приносят стойку, заказанное количество серверов, кабели и два монитора. Вперед!

image

image

Итак, если ранее вы никогда не собирали и не настраивали кластер — самое время научиться. После этого есть 2 дня на запуск приложений. Это будут те же задачи, что и в отборочном туре, но с другими входными данными. Также добавляется 3 новые задачи: две становятся известны вместе с приглашением на финал, еще одна выдается непосредственно в день соревнования. В каждый день соревнования нужно запустить 3-4 задачи, наилучший результат указывается в финальной карточке, которая сдается в конце дня. На специальном экране (и на веб-странице) указывается потреблении энергии кластером каждой команды. Если оно превышает 3000W, то лого университета подсвечивается красным а на весь зал начинает дико верещать сирена. Результат такого запуска команде не зачтется.

image

В отличие от предварительного этапа в правилах проведения финала прописана система начисления баллов а в зале на стене сделана большая таблица, куда вписываются результаты по каждой задаче.

image

После загадочного начисления баллов в отборочном туре такая прозрачность крайне радует. По 7.5 баллов дается за бенчмарки, по 15 баллов за остальные задачи, 10 баллов — презентация команды, в сумме — 100. В целом баллы начисляются так: команда, показавшая наилучший результат получает максимум, остальные команды получают баллы исходя из соотношения их результата с результатом лидера.

Призы и награждение. Кубком и дипломом награждают все команды, прошедшие в финал. Есть награды за 1е и 2е места, за лучший результат по Linpack, за лучший результат некоторым другим отдельным приложениям. Причем, если наилучшего результата добилась команда, уже получившая один из вышеперечисленных призов, то награждается следующая за ней. Также можно активно пиарить свою команду и конкурс в соцсетях (Twitter или китайский WeChat) и получить Best Popularity Prize.

image

К слову, сумма за Best Popularity Prize нам до сих пор не пришла. Надеюсь, что внутри Китая переводы все же выполняются оперативнее и хотя бы китайские команды свои награды получили.

В силу того, что все 3 конкурса имеют общие корни, команды, занявшие 1 и 2 места в ASC автоматически приглашаются на конкурс в Германию.

Заключение


Соревнования интересны тем, что дают возможность поработать с “большими компьютерами”, научными разработками и посмотреть на другой, отличный от коммерческого энтерпрайза мир IT. Буду рада, если кого-то это заинтересовало и в этом году в списке команд-участниц появятся новые российские университеты. Российские команды каждый год кладут на лопатки всех в соревнованиях ACM ICPC и, я надеюсь, через пару лет тренировок, смогут положить и в HPC :)

Ссылки для интересующихся:
Сайт-блог американского журналиста, освещающего каждое из этих соревнований
Регистрация на ASC 2018

Комментарии (6)


  1. Daniyar94
    26.10.2017 07:53

    Вопрос, как вы вышли на это соревнование. Организаторы с вами связались и пригласили? Как вы сформировали команду, и готовились?


    1. svetasvesh Автор
      26.10.2017 14:39

      Первый раз команда Университета участвовала в 2013, когда соревнование стало международным. Тогда организаторам нужно было заявить о себе и, полагаю, была сделана рассылка по основным университетам с приглашением. Знаю, что приказ «собрать команду и поучаствовать» был тогда спущен сверху, от руководства вуза-факультета.

      Вообще же специального приглашения для участия не надо. Заполняете регистрационную форму на сайте, в январе получаете задания. Решаете, пишете proposal, отправляете организаторам. Если проходите в финал — ищете средства на дорогу в Китай. Проживание, питание и оборудование во время финала предоставляются организаторами.

      Про подготовку напишу вечером.


    1. svetasvesh Автор
      26.10.2017 23:40

      Про подготовку.

      Какого-то специального отбора у нас не происходит. Все, кому интересно — welcome. Часть по разным причинам отсеивается. В этом году, пожалуй, впервые может сложиться ситуация, что желающих больше, чем членов команды. Пока не знаю, что будем с этим делать.

      По навыкам. Рассказываем как работать на кластере, запускать задачи в планировщике, писать bash скрипты для базовых действий. Как писать make файлы. Вкратце про бенчмарки — что измеряют, как работают, как их запускать и какие способы оптимизации есть. Оптимизация кода под Xeon Phi — запуск в разных режимах (native, offload), векторизация кода. Целесообразность применения OpenMP и MPI. Просто несколько занятий до начала конкурса. Сейчас вот еще разбираем задачки, которые в финале не получились.

      Все равно встречаются вещи, в которых на момент начала конкурса никто в команде не шарит — нейронные сети, Фортран. Просто разбираемся на ходу.


  1. genroelgvozo
    26.10.2017 14:21

    А есть ли похожие соревнования, но для graduated?)
    В том же ACM есть 3 вида допущения, и одно из них год рождения, и можно уже закончив ВУЗ проходить по году рождения (что я и делал целых 2 раза).


    1. svetasvesh Автор
      26.10.2017 23:48

      Я спортивным программированием только в школе занималась и точно запомнила, что нельзя больше 2х раз в финале участвовать. Не знала, что есть еще допущения. Кстати, а какое третье?

      Для HPC соревнований в правилах указано, что на момент проведения финала все участники должны быть non-graduated. По факту, не знаю, как в SC и ISC, но в ASC никто не проверял факт студенчества. Никаких официальных бумаг или хотя бы сканов студенческого/зачетной книжки не просили. Знаю случаи, когда в командах были и аспиранты, и люди, не являющиеся студентами.


      1. genroelgvozo
        28.10.2017 11:31

        Там допускаются к соревнованиям в 3 случаях (про финал не знаю, там не бывал):
        1. Год рождения (ну просто по возрасту, я не помню если честно сколько именно максимум, но у меня он достигался после окончания вуза)
        2. Прошло не более 6 лет с зачисления в вуз в первый раз
        3. А вот тут не помню, было что-то третье.
        Помню только еще, что в любом случае не более 5 раз участвовать (ну это про четверть и полуфинал)