[an error occurred while processing this directive]

Настройка вычислительного кластера на базе torque/maui
Цель: объединить несколько серверов в один вычислительный кластер, предоставить
пользователям простой способ запуска вычислительных задач не конфликтуя друг с
другом. Для этого необходимы несколько серверов под управлением 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
 
02.12.2010 , Автор: Sergey Korablin , Источник: http://wiki.opennet.ru/TorqueMauiSe...
Ключи: cluster, torque, maui
Раздел:    Корень / Администратору / Система / Кластерные технологии

[an error occurred while processing this directive]

[an error occurred while processing this directive]