URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 73076
[ Назад ]

Исходное сообщение
"Раздел полезных советов: Настройка вычислительного кластера ..."

Отправлено auto_tips , 04-Дек-10 20:29 
Цель: объединить несколько серверов в один вычислительный кластер, предоставить пользователям простой способ запуска вычислительных задач не конфликтуя друг с другом. Для этого необходимы несколько серверов под управлением Linux(ниже описывается установка на RedHat), быстрый канал между серверами, ПО для организации очереди, вычислительное ПО умеющее распараллеливать вычисление на несколько узлов (например с помощью mpi).

++ Установка и настройка ПО

Torque - менеджер ресурсов, отвечает за отслеживание доступного количества ресурсов на узлах кластера и запуск задач.

Первым шагом устанавливаем torque на управляющую ноду. Скачиваем исходники с http://www.clusterresources.com. Установка происходит обычным для Linux способом:

   tar -xzvf torque-2.x.x.tgz
   cd torque-2.x.x
   ./configure --prefix=/usr/local
   make
   make install или make rpm
   (во втором случае будет собран rpm пакет который затем можно установить)

Копируем скрипты запуска сервера pbs.

   cp contrib/init.d/pbs_server /etc/init.d/

В файл /var/spool/torque/server_priv/nodes добавляем все узлы нашего кластера и указываем специфичные для этих узлов параметры. Параметры для описания узлов можно добавлять самостоятельно какие вам необходимы: архитектура узла (x86, sparc, ...), способ подключения к сети (ethernet, infiniband, ...) и т.п. Пример:

   s200 np=4 arch=x86_64
   s200-01 np=2 arch=x86_32
   s200-02 np=2 arch=x86_32
   s200-03 np=4 arch=x86_64

np - количество процессоров на узле.

Запускаем pbs сервер /etc/init.d/pbs_server start

Создадим одну дефолтную очередь batch на сервере.

   # qmrg
   create queue batch
   set queue batch queue_type = Execution
   set queue batch resources_default.nodes = 1
   set queue batch resources_default.walltime = 01:00:00
   set queue batch resources_available.nodect = 999999
   set queue batch enabled = True
   set queue batch started = True
   set server acl_hosts = s200
   set server default_queue = batch
   set server log_events = 511
   set server mail_from = adm
   set server scheduler_iteration = 600
   set server node_check_rate = 150
   set server tcp_timeout = 6
   set server next_job_number = 21</i>

Очередей может быть несколько, задачи можно направлять в разные очереди с помощью списков доступа.

Устанавливаем torque на все вычислительные узлы кластера так же как и на управляющий узел, единственное необходим скрипт запуска монитора pbs, а не сервера.

   cp contrib/init.d/pbs_mon /etc/init.d/

Прописываем на вычислительных узлах в файл /var/spool/torque/mom_priv/config наш pbs сервер:

   $pbsserver      s200              # s200 - указываем управляющий узел
   $logevent       255               # bitmap of which events to log</i>

Запускаем pbs_mon

   /etc/init.d/pbs_mon start

Правильно будет установить и настроить все необходимое ПО на один вычислительный узел, а затем клонировать ее на остальные узлы кластера.

Если все сделано правильно, на управляющем узле можно выполнить команду "pbsnodes -a", вывод должен быть примерно следующий:

   s200
   state = free
   np = 4
   ntype = cluster
   status = opsys=linux,uname=Linux s200 2.6.9-67.0.15.ELsmp #1 SMP Tue Apr 22 13:58:43 EDT 2008 x86_64,sessions=4793 6052
      9319,nsessions=3,nusers=2,idletime=7,totmem=16343180kb,availmem=15996556kb,physmem=8150040kb,ncpus=4,
     loadave=0.00,netload=13384946066,state=free,jobs=,varattr=,rectime=1240470984

   s200-01
   state = free
   np = 2
   ntype = cluster
   status = opsys=linux,uname=Linux s200-01 2.6.9-67.0.15.ELsmp #1 SMP Tue Apr 22 13:58:43 EDT 2008 x86_64,sessions=?
     0,nsessions=? 0,nusers=0,idletime=153089,totmem=12231176kb,availmem=12080240kb,physmem=4038036kb,ncpus=2,loadave=0.00,
     netload=251768374518,state=free,jobs=,varattr=,rectime=1240470944

   s200-02
   state = free
   np = 2
   ntype = cluster
   status = opsys=linux,uname=Linux s200-02 2.6.9-67.0.15.ELsmp #1 SMP Tue Apr 22 13:58:43 EDT 2008 x86_64,sessions=?
     0,nsessions=? 0,nusers=0,idletime=76890,totmem=12231176kb,availmem=12037100kb,physmem=4038036kb,ncpus=2,
loadave=0.00,netload=272192353204,state=free,jobs=,varattr=,rectime=1240470956
   ...


Запустим какую-нибудь задачу на выполнение (для запуска залогинтесь под обычным пользователем, не под root-ом):

   $ su - testuser
   $ echo "sleep 20" | qsub
   22.s200

Проверим состояние:

   $ qstat
   Job id                    Name             User            Time Use S Queue
------------------------- ---------------- --------------- -------- - -----
   22.s200                   STDIN            testuser              0 Q batch          


Задача будет висеть в очереди но не выполниться, так как у нас не установлен и не настроем менеджер очереди. Вообще torque содержит свой шедулер (pbs_sched), но он имеет ограниченный функционал и настройки. Мы будем использовать более развитый шедулер - Maui.

Пока удалим наше задание:

   $ qdel 22.s200


++ Установка менеджера очереди Maui

Maui занимается тем, что опрашивает torque на предмет наличия свободных ресурсов и задач в очереди которые необходимо выполнить. На основе полученных данных и своих настроек, он принимает решение о запуске какой-либо задачи и посылает команду серверу torque выполнить ее. Maui позволяет гибко настроить различные стратегии заполнения кластера, приоритеты для задач по различным критериям: количеству запрашиваемых ресурсов, принадлежности пользователя к какой-то группе и т.д.

Скачиваем исходники с сайта http://www.clusterresources.com/ и устанавливаем на управляющей ноде (теоретически можно установить куда угодно, но чтобы не усложнять установим там же где и сервер torque). Настройка maui производится в файле /usr/local/maui/maui.cfg Большую часть настроек сделает конфигуратор во время установки. Далее для интеграции maui с torque надо указать, что мы используем менеджер ресурсов PBS (torque): RMCFG[S200] TYPE=PBS

Получаем примерно следующий минимальный конфиг:

   SERVERHOST            s200
   ADMIN1                root
   RMCFG[S200]           TYPE=PBS
   AMCFG[bank]           TYPE=NONE
   RMPOLLINTERVAL        00:00:30
   SERVERPORT            42559
   SERVERMODE            NORMAL
   LOGFILE               maui.log
   LOGFILEMAXSIZE        10000000
   LOGLEVEL              3
   QUEUETIMEWEIGHT       1
   BACKFILLPOLICY        FIRSTFIT
   RESERVATIONPOLICY     CURRENTHIGHEST
   NODEALLOCATIONPOLICY  MINRESOURCE

Запускаем maui:

   # maui

Еще раз запустим тестовую задачу:

   $ echo "sleep 20" | qsub
   23.s200

qstat должна показать, что задача встала в очередь (статус Q), затем статус должен поменяться на R (выполняется) и через 20 секунд задача должна из очереди исчезнуть. Если все прошло так как описано выше - мы в шаге от финала. Остается только прикрутить выполнение полезной задачи к нашему кластеру.


++ PBS скрипты

Для запуска задач будем использовать PBS скрипты. PBS-скрипт - это обычный shell скрипт в котором в виде специальным образом оформленных комментариев начинающихся с #PBS можно передать менеджеру ресурсов необходимые параметры, например: количество узлов и процессоров необходимых на задачу, количество оперативной памяти, архитектуру узлов, время расчета и далее скрип и/или программы которые необходимо выполнить на кластере.

Оформим тестовую задачу в виде PBS скрипта.

   $ cat test.pbs
   #!/bin/sh
   #PBS -N test
   #PBS -l nodes=2:ppn=4,walltime=00:00:50
   #PBS -m abe
   #PBS -M testuser@localhost
   #PBS -V
   echo "File containing nodes:"
   echo $PBS_NODEFILE
   echo "Nodes for computing:"
   cat $PBS_NODEFILE
   sleep 20

Значение параметров:

    * -N - название задания, носит информативный характер
    * -l - список ресурсов необходимых для выполнения вычисления
    * -m - в каких случаях слать пользователю почтовое уведомдение
      (a - задача отменена, b - задача начала выполняться, e- задача завершена).
    * -M - на какой ящик отправлять уведомления.
    * -V - экспортировать переменные окружения в скрипт.

запуск задания:

   $ qsub test.pbs

При выполнении этого скрипта доступна одна важная переменная окружения устанавливаемая менеджером ресурсов, это $PBS_NODEFILE. Переменная содержит путь к файлу со списком узлов которые выделены нам для расчета в соответствии с нашими запросами. Далее в зависимости от того как наше ПО производит распараллеливание - обрабатываем в своем скрипте $PBS_NODEFILE и запускаем необходимый расчет указывая свой программе на каких узлах и сколько процессоров она может использовать. Правильно будет вынести все эти вычисления в отдельный скрипт доступный пользователям для запуска, который будет вызываться пользователями из своих PBS скриптов. Пример:

   #!/bin/bash
   #PBS -N test_2
   #PBS -l nodes=2:ppn=4,walltime=00:00:50
   #PBS -m abe
   #PBS -M testuser@localhost
   #PBS -V
   #тут пользователь может установить свои переменные окружения необходимые для вычисления, например путь к данным
   export DATADIR='/home/testuser/data'
   ...
   #запускаем скрипт/программу которая обработает переменные и запустит вычисление на нужных узлах
   /data/bin/my_super_programm


URL: http://wiki.opennet.ru/TorqueMauiSetup
Обсуждается: http://www.opennet.me/tips/info/2496.shtml


Содержание

Сообщения в этом обсуждении
"Настройка вычислительного кластера на базе torque/maui"
Отправлено Аноним , 04-Дек-10 20:29 
>PBS-скрипт - это обычный

shell скрипт в котором в виде специальным образом оформленных комментариев
начинающихся с #PBS

Не совсем верно.
Если вы добавите какое-либо действие перед описательной частью PBS не сможет определить заданные параметры (может в новой версии что-то поменялось, но ранее было так).
Т.е.
#/bin/sh
#PBS.....
#PBS.....
cd /home/user
прокатит, а:
#/bin/sh
cd /home/user
#PBS.....
#PBS.....
не прокатит. Вся описательная часть будет проигнорирована.


"Настройка вычислительного кластера на базе torque/maui"
Отправлено pavlinux , 06-Дек-10 14:33 
А это хреново, что в явно указанном языке, в данном случае bash,
используются строки начинающиеся со знака комментария.

Могли бы сделать так:

#!/bin/bash
PBS="-N test_2"
PBS+=" -l nodes=2:ppn=4,walltime=00:00:50"
PBS+=" -m abe"
PBS+=" -M testuser@localhost"
PBS+=" -V"


"Настройка вычислительного кластера на базе torque/maui"
Отправлено Аноним , 06-Дек-10 15:12 
это можно переопределить...
Насколько я помню, сервер поддерживает переопределение (по крайней мере коммерческий Altair имеет такую особенность).
С другой стороны это как раз хорошо, т.к. позволяет в сценарии разместить определение и быть уверенным, что shell не будет интерпретировать это как свои переменные.

"Настройка вычислительного кластера на базе torque/maui"
Отправлено Аноним , 06-Дек-10 15:14 
> это можно переопределить...
> Насколько я помню, сервер поддерживает переопределение (по крайней мере коммерческий Altair
> имеет такую особенность).
> С другой стороны это как раз хорошо, т.к. позволяет в сценарии разместить
> определение и быть уверенным, что shell не будет интерпретировать это как
> свои переменные.

Забыл добавить: переопределить константную строку для объявления параметра.
Ваша идея тоже может быть, но тогда это уже будет не скрипт для задач, а скрипт для запуска..

#! /bin/sh
PBS="-l name"
PBS="${PBS} -l walltime=...."
.....

qsub $PBS ./task


"Настройка вычислительного кластера на базе torque/maui"
Отправлено Jurij , 13-Дек-10 11:25 
Строчки, начинающиеся с #PBS используются не самим запускающим скриптом (он будет запущен только шедулером на вычислительной ноде), а pbs-сервером в качестве дополнения к информации о параметрах задачи.

"Настройка вычислительного кластера на базе torque/maui"
Отправлено rstone , 06-Дек-10 22:55 
Сравнивали с SGE ?


"Настройка вычислительного кластера на базе torque/maui"
Отправлено Аноним , 07-Дек-10 13:36 
Зачем и по каким критериям?

"Настройка вычислительного кластера на базе torque/maui"
Отправлено metallic , 09-Дек-10 20:27 
Не понял, это любой софт будет работать так или специально заточенный под кластер, с библиотекой mpi ?

"Настройка вычислительного кластера на базе torque/maui"
Отправлено Аноним , 14-Дек-10 21:20 
Любой.
Это система управления заданиями и ей все равно что вы запускаете. Другой вопрос, что она не распараллелит вашу задачу этим уже должны заниматься вы...