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