Запрос через PBS графических ускорителей
Как правило программа, запущенная на определённом графическом ускорителе, всё время работы использует именно его. В общем случае работающее приложение не может быть перенесено на другой графический ускоритель, в отличие от нагрузки на центральный процессор, которая легко переносится операционной системой на другое ядро или другую микросхему центрального процессора.
Используемые в ИВЦ НГУ сервера с графическими ускорителями имеют по несколько GPU каждый, что позволяет одновременно работать на каждом сервере нескольким задачам. При этом необходимо, чтобы разные задачи использовали разные ускорители и не мешали друг-другу.
Для запроса у планировщика задач необходимого задаче количества ускорителей используется ресурс 'ngpus'. Например, так:
#PBS -l select=1:ncpus=1:mem=2gb:ngpus=1
Altair PBS предоставляет два способа управления доступом к графическим ускорителям. В каждом из них физические ресурсы сервера логически делятся на несколько частей, называемых 'виртуальный узел' (virtual node, vnode). Термин 'виртуальный' не подразумевает обязательного использования какого-либо механизма виртуализации и означает только логическое выделение части ресурсов физического узла в отдельный виртуальный объект. В нашем центре ресурсы каждого сервера деляться на равные виртуальные узлы.
- Для очереди teslaq из серверов HP SL390s G7 используется более старый способ:
- Каждый из серверов делится на три виртуальных узла, каждый из которых содержит один графический ускоритель, 4 процессорных ядра и 32 ГБ ОЗУ.
- После запуска задача должна узнать, какой виртуальный узел (или узлы) ей выделен планировщиком, из его названия понять порядковый номер ускорителя, который она должна использовать, и затем как-то самостоятельно обеспечить, чтобы приложение задействовало именно этот ускоритель, а не какой-то другой.
- Никакого контроля со стороны планировщика нет, задача может задействовать любой другой ещё не используемый ускоритель и помешать последующему запуску задач на этом сервере.
- Для очереди a6500g10q с сервером HPE Apollo 6500 Gen10 используется более современный способ, основанный на механизме 'контрольных групп' ядра Linux (cgroups), позволяющем ограничить доступ процессу (и его дочерним процессам) к ресурсам сервера.