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