Как настроить SGE для устройств CUDA?

В настоящее время я сталкиваюсь с проблемой интеграции GPU-серверов в существующую среду SGE. Используя Google, я нашел несколько примеров кластеров, где это было установлено, но не было информации о том, как это было сделано.

Есть ли какая-нибудь форма руководства или урока по этому вопросу в любом месте? Он не должен быть очень многословным, но он должен содержать достаточно информации, чтобы запустить и запустить "очередь cuda"...

Заранее спасибо...

Изменить: Чтобы настроить датчик нагрузки о количестве свободных графических процессоров в узле, я сделал следующее:

  • установить режим вычислений графических процессоров на эксклюзивный
  • установить графические процессоры в постоянный режим
  • добавьте следующий скрипт в конфигурацию кластера в качестве датчика нагрузки (и установите его на 1 сек.)
#! / Bin/ ш

hostname=`uname -n`

пока [ 1 ]; делать
  читать ввод
  результат =$?
  if [ $result!= 0 ]; затем
    выход 1
  фи
  if [ "$input" == "quit" ]; затем
    выход 0
  фи


  smitool=`который nvidia-smi`
  результат =$?
  if [ $result!= 0 ]; затем
    gpusav=0
    GPUs=0
  еще
    gpustotal=`nvidia-smi -L|wc -l`
    gpusused=`nvidia-smi |grep " Имя процесса " -A 6|grep -v +-|grep -v \|=|grep -v Использование |grep -v " Нет запущен "|wc -l`
    gpusavail=`echo $gpustotal-$gpusused|bc`
  фи

  эхо начало
  echo "$hostname:gpu:$gpusavail"
  конец эха
сделанный

выход 0

Примечание: это очевидно работает только для графических процессоров NVIDIA

4 ответа

Решение

Стратегия на самом деле довольно проста.

С помощью qconf -mc Вы можете создать сложный ресурс под названием gpu (или как вы хотите это назвать). Определение ресурса должно выглядеть примерно так:

#name               shortcut   type        relop   requestable consumable default  urgency     
#----------------------------------------------------------------------------------------------
gpu                 gpu        INT         <=      YES         YES        0        0

Затем вы должны отредактировать определения хоста exec с помощью qconf -me чтобы установить количество графических процессоров на хостах exec, у которых они есть:

hostname              node001
load_scaling          NONE
complex_values        gpu=2
user_lists            NONE
xuser_lists           NONE
projects              NONE
xprojects             NONE
usage_scaling         NONE
report_variables      NONE

Теперь, когда вы настроили свои exec-хосты, вы можете запрашивать ресурсы gpu при отправке заданий. например: qsub -l gpu=1 и gridengine будет отслеживать количество доступных графических процессоров.

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

Open Grid Engine добавил поддержку датчика нагрузки графического процессора в выпуске 2011.11 без необходимости использования nvidia-smi. Выходные данные приложения nvidia-smi могут (и изменяются) между выпусками драйверов, поэтому другой подход не рекомендуется.

Если у вас есть исходное дерево GE2011.11, поищите: dist/gpu/gpu_sensor.c

Чтобы скомпилировать датчик нагрузки (необходимо иметь в системе инструментарий CUDA):

% cc gpu_sensor.c -lnvidia-ml

И если вы просто хотите видеть состояние, сообщаемое датчиком нагрузки в интерактивном режиме, скомпилируйте:

-DSTANDALONE

Чтобы использовать датчик нагрузки в кластере Grid Engine, вам нужно просто выполнить стандартную процедуру настройки датчика нагрузки:

http://gridscheduler.sourceforge.net/howto/loadsensor.html

Источники:

  1. http://marc.info/?l=npaci-rocks-discussion&m=132872224919575&w=2

Если у вас есть несколько графических процессоров, и вы хотите, чтобы ваши задания запрашивали графический процессор, но планировщик Grid Engine должен обработать и выбрать свободные графические процессоры, вы можете настроить комплекс RSMAP (карта ресурсов) (вместо INT). Это позволяет вам указать количество, а также имена графических процессоров на конкретном хосте в конфигурации хоста. Вы также можете установить его в качестве расходного материала HOST, чтобы независимо от того, сколько слотов вы запросили, количество устройств с графическим процессором, запрашиваемое с -l cuda=2, приходилось на каждый хост 2 (даже если параллельное задание получило, например, 8 слотов на разных хостах).).

qconf -mc
    #name               shortcut   type        relop   requestable consumable default  urgency     
    #----------------------------------------------------------------------------------------------
    gpu                 gpu        RSMAP         <=      YES         HOST        0        0

В конфигурации хоста выполнения вы можете инициализировать свои ресурсы с помощью идентификаторов / имен (здесь просто GPU1 и GPU2).

qconf -me yourhost
hostname              yourhost
load_scaling          NONE
complex_values        gpu=2(GPU1 GPU2)

Затем при запросе -l gpu=1 планировщик Univa Grid Engine выберет GPU2, если GPU1 уже используется другим заданием. Вы можете увидеть фактический выбор в выводе qstat -j. Задание получает выбранный графический процессор, считывая переменную среды $SGE_HGR_gpu, которая в этом случае содержит выбранный идентификатор / имя "GPU2". Это может быть использовано для доступа к нужному графическому процессору без коллизий.

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

qconf -me yourhost
hostname              yourhost
load_scaling          NONE
complex_values        gpu=2(GPU1:SCCCCScccc GPU2:SccccSCCCC)

Теперь, когда планировщик UGE выбирает GPU2, он автоматически связывает задание со всеми 4 ядрами (C) второго сокета (S), так что заданию не разрешается запускаться на первом сокете. Для этого даже не требуется -binding параметр qsub.

Дополнительные примеры конфигурации вы можете найти на http://www.gridengine.eu/.

Обратите внимание, что все эти функции доступны только в Univa Grid Engine (8.1.0/8.1.3 и выше), но не в SGE 6.2u5 и других версиях Grid Engine (таких как OGE, Sun of Grid Engine и т. Д.). Вы можете попробовать это, загрузив 48-ядерную ограниченную бесплатную версию с univa.com.

Для SGE 2011.11, которая поставляется с ROCKS 6.1, я обнаружил, что установка расходных материалов комплекса:

    #name               shortcut   type        relop   requestable consumable default  urgency     
    #----------------------------------------------------------------------------------------------
    gpu                 gpu        INT         <=      YES         JOB        0        0

Это позволило мне установить количество графических процессоров на узел, и когда я отправлял задание, количество запрошенных графических процессоров не зависело от количества SMP/SLOT. Затем я могу использовать 8 процессоров и 4 графических процессора на задание, чтобы не вызывать проблем с утечкой других заданий. Мне все равно пришлось установить расходные материалы для узлов, как указано выше.

Это не такое приятное решение, как некоторые другие, но я обнаружил, что опция RSMAP не была доступна в SGE 2011.11. Я хотел бы в конечном итоге получить такую ​​конфигурацию, так как я мог бы затем установить, какие графические процессоры используются.

Надеюсь, это поможет кому-то сэкономить несколько часов на настройку.

Другие вопросы по тегам