Назад | Перейти на главную страницу

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

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

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

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

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

#!/bin/sh

hostname=`uname -n`

while [ 1 ]; do
  read input
  result=$?
  if [ $result != 0 ]; then
    exit 1
  fi
  if [ "$input" == "quit" ]; then
    exit 0
  fi


  smitool=`which nvidia-smi`
  result=$?
  if [ $result != 0 ]; then
    gpusav=0
    gpus=0
  else
    gpustotal=`nvidia-smi -L|wc -l`
    gpusused=`nvidia-smi |grep "Process name" -A 6|grep -v +-|grep -v \|=|grep -v Usage|grep -v "No running"|wc -l`
    gpusavail=`echo $gpustotal-$gpusused|bc`
  fi

  echo begin
  echo "$hostname:gpu:$gpusavail"
  echo end
done

exit 0

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

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

С помощью 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, чтобы независимо от слотов вашего запроса количество устройств GPU, запрошенных с -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.

Больше примеров конфигурации вы можете найти на 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. Я хотел бы в конечном итоге получить такую ​​конфигурацию, так как затем я мог бы установить, какие графические процессоры будут использоваться.

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