Содержание

Очередь задач a6500g10q

Задачи из этой очереди запускаются на одном сервере HPE Apollo 6500 Gen10. С точки зрения планировщика сервер разделён на два виртуальных узла (virtual node, vnode), каждый из которых содержит 188 ГБ ОЗУ, 20 ядер одного процессора и 4 ускорителя NVIDIA Tesla V100, подключенных к этому процессору шиной PCIe.

Планировщик ограничивает доступные задаче ресурсы, используется механизм 'контрольных групп' ядра Linux (control groups, cgroups):

Ограничения

Задачи, поставленные в очередь a6500g10q, перенаправляются планировщиком в соответствии с запрошенным walltime в одну из следующих очередей:

Пример 1

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

Создайте файл submit.sh такого вида, запрашивающий два графических ускорителя и затем отображающий информацию о доступных ускорителях:

#!/bin/sh

#PBS -q a6500g10q
#PBS -l select=1:ngpus=2:ncpus=1:mem=100m
#PBS -l walltime=00:01:00
#PBS -j oe

cd $PBS_O_WORKDIR
/usr/bin/nvidia-smi -L
echo
echo "CUDA_VISIBLE_DEVICES=$CUDA_VISIBLE_DEVICES"

После выполнения задачи лог-файл будет содержать примерно следующее:

GPU 0: Tesla V100-SXM2-32GB (UUID: GPU-2adb6278-0a52-f6a7-58b6-a009223f4538)
GPU 1: Tesla V100-SXM2-32GB (UUID: GPU-3e9b8125-9b6a-52cf-4ea2-a543d2d761fa)

CUDA_VISIBLE_DEVICES=GPU-2adb6278-0a52-f6a7-58b6-a009223f4538,GPU-3e9b8125-9b6a-52cf-4ea2-a543d2d761fa

Т.е. задача видит только 2 ускорителя, как и запрашивала.

Пример 2

Все восемь графических ускорителей сервера соединены друг с другом шиной NVLink 2.0, примерно на порядок более производительной, чем PCIe Gen3 x16. Если используемое ПО умеет распараллеливать работу на несколько ускорителей, наличие высокопроизводительного прямого соединения между ними может существенно ускорить работу.

Поскольку сервер логически разделён на два виртуальных узла, причём с привязкой каждого GPU к определённому CPU, запрос ресурсов вида 'select=1:ngpus=8:…' выполнить невозможно. Вместо этого для получения сервера в монопольном режиме нужно использовать следующий запрос:

#PBS -l select=2:ngpus=4:ncpus=20:mem=188g:mpiprocs=...

Получение всех 8 GPU возможно только при нахождении задачи в очереди a6500g10_short, т.е. максимальная продолжительность задачи может быть ровно 3 часа:

#PBS -l walltime=03:00:00

Текущее состояние

Для удобства наблюдения за состоянием сервера и соответствующими задачами написана утилита, называющаяся так же, как очередь - 'a6500g10q':

user01@clu:~> a6500g10q
 Jobs running on the vnode 'a6500g10[0]' (state = free; a6500g10_short):
129485.vm-pbs 02:41:39 a6500g10_short 1:ngpus=4:ncpus=20:mem=188g user01

 Jobs running on the vnode 'a6500g10[1]' (state = free; a6500g10_short a6500g10_middle a6500g10_long):
129130.vm-pbs 53:20:27 a6500g10_middle 1:ncpus=5:mpiprocs=5:mem=48g:ngpus=1 user02
129295.vm-pbs 53:47:06 a6500g10_middle 1:ncpus=5:mpiprocs=5:mem=48g:ngpus=1 user02
129312.vm-pbs 27:44:58 a6500g10_middle 1:ngpus=1:ncpus=5:mem=20g user03
129317.vm-pbs 27:44:58 a6500g10_middle 1:ngpus=1:ncpus=1:mem=16g user04

 Waiting jobs:
129358.vm-pbs 23:00:00 a6500g10_middle 1:ngpus=1:ncpus=1:mem=16g user04
129376.vm-pbs 20:00:00 a6500g10_middle 1:ngpus=1:ncpus=1:mem=16g user01
129468.vm-pbs 05:50:00 a6500g10_middle 1:ngpus=1:ncpus=1:mem=16g user05
129484.vm-pbs 72:00:00 a6500g10_middle 1:ncpus=5:mpiprocs=5:mem=48g:ngpus=1 user02

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


Также текущее состояние можно узнать с интерфейсного сервера следующими командами:

qstat|grep a6500g10
pbsnodes a6500g10

В выводе команды 'pbsnodes' в том числе отображаются номера задач, работающих на узле, и занятые в данный момент ресурсы. Например, так:

     jobs = 65863.vm-pbs/0, 65863.vm-pbs/1, 65863.vm-pbs/2, 65863.vm-pbs/3, 65863.vm-pbs/4
     resources_assigned.mem = 48234496kb
     resources_assigned.ncpus = 5
     resources_assigned.ngpus = 1

Подробную информацию об определённой задаче можно узнать с помощью следущей команды:

qstat -f номер_задачи

Реализации MPI

Версия операционной системы на этом сервере существенно отличается от используемой на остальных узлах кластера. Поэтому многие реализации MPI, скомпилированные для работы под SLES12, на этом узле не работают. Узнать список доступных реализаций MPI и выбрать нужную можно только с самого узла a6500g10 - или разместив нужные команды в скрипте для qsub или используя интерактивный режим:


Также каждый пользователь кластера может самостоятельно скомпилировать нужную ему версию OpenMPI и установить её в свою домашнюю директорию.