Запрос через PBS графических ускорителей

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

Используемые в ИВЦ НГУ сервера с графическими ускорителями имеют по несколько GPU каждый, что позволяет одновременно работать на каждом сервере нескольким задачам. При этом необходимо, чтобы разные задачи использовали разные ускорители и не мешали друг-другу.

Для запроса у планировщика задач необходимого задаче количества ускорителей используется ресурс 'ngpus'. Например, так:

#PBS -l select=1:ncpus=1:mem=2gb:ngpus=1


Altair PBS предоставляет два способа управления доступом к графическим ускорителям. В каждом из них физические ресурсы сервера логически делятся на несколько частей, называемых 'виртуальный узел' (virtual node, vnode). Термин 'виртуальный' не подразумевает обязательного использования какого-либо механизма виртуализации и означает только логическое выделение части ресурсов физического узла в отдельный виртуальный объект. В нашем центре ресурсы каждого сервера деляться на равные виртуальные узлы.

  1. Для очереди teslaq из серверов HP SL390s G7 используется более старый способ:
    • Каждый из серверов делится на три виртуальных узла, каждый из которых содержит один графический ускоритель, 4 процессорных ядра и 32 ГБ ОЗУ.
    • После запуска задача должна узнать, какой виртуальный узел (или узлы) ей выделен планировщиком, из его названия понять порядковый номер ускорителя, который она должна использовать, и затем как-то самостоятельно обеспечить, чтобы приложение задействовало именно этот ускоритель, а не какой-то другой.
    • Никакого контроля со стороны планировщика нет, задача может задействовать любой другой ещё не используемый ускоритель и помешать последующему запуску задач на этом сервере.

  2. Для очереди a6500g10q с сервером HPE Apollo 6500 Gen10 используется более современный способ, основанный на механизме 'контрольных групп' ядра Linux (control groups, cgroups), позволяющем ограничить доступ процессу (и его дочерним процессам) к ресурсам сервера:
    • При запуске каждой задачи планировщик создаёт для неё на узле контрольную группу с ресурсами, соответствующими запрошенным в 'select', и ограничивающую доступ процессам задачи к физическим ресурсам сервера. В частности, запускаемые задачей приложения будут видеть только графические ускорители, выделенные планировщиком. Работающие процессы не смогут задействовать больше ядер и оперативной памяти, чем было запрошено у планировщика.
    • Четыре графических ускорителя сервера подключены шиной PCIe Gen3 x16 к одному процессору, ещё четыре ускорителя подключены ко второму процессору. Процессоры взаимодействуют между собой по шине Intel UPI. Взаимодействие между ускорителем и процессором, подключенным к нему по шине PCIe, всегда будет быстрее, чем с другим процессором. Поэтому для увеличения быстродействия важно, чтобы приложение работало на ядрах того процессора, к которому подключен используемый приложением графический ускоритель.
    • Сервер разделён на два виртуальных узла, каждый из которых содержит 188 ГБ ОЗУ, 20 ядер одного из процессоров и 4 графических ускорителя, подключенных к этому процессору шиной PCIe. В результате задачи автоматически получают оптимальные сочетания ускорителя и процессора.
    • Все графические ускорители соединены друг с другом шиной NVLink 2.0, примерно на порядок более производительной, чем PCIe Gen3 x16. Если используемое ПО умеет распараллеливать работу на несколько ускорителей, наличие высокопроизводительного прямого соединения между ними может существенно ускорить работу.