The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Настройка вычислительного кластера на базе 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
Раздел:    Корень / Администратору / Система / Кластерные технологии

Обсуждение [ RSS ]
  • 1.1, Аноним (-), 20:29, 04/12/2010 [ответить]  
  • +/
    >PBS-скрипт - это обычный

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

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

     
     
  • 2.2, pavlinux (ok), 14:33, 06/12/2010 [^] [^^] [^^^] [ответить]  
  • +/
    А это хреново, что в явно указанном языке, в данном случае 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"

     
     
  • 3.3, Аноним (-), 15:12, 06/12/2010 [^] [^^] [^^^] [ответить]  
  • +/
    это можно переопределить...
    Насколько я помню, сервер поддерживает переопределение (по крайней мере коммерческий Altair имеет такую особенность).
    С другой стороны это как раз хорошо, т.к. позволяет в сценарии разместить определение и быть уверенным, что shell не будет интерпретировать это как свои переменные.
     
     
  • 4.4, Аноним (-), 15:14, 06/12/2010 [^] [^^] [^^^] [ответить]  
  • +/
    > это можно переопределить...
    > Насколько я помню, сервер поддерживает переопределение (по крайней мере коммерческий Altair
    > имеет такую особенность).
    > С другой стороны это как раз хорошо, т.к. позволяет в сценарии разместить
    > определение и быть уверенным, что shell не будет интерпретировать это как
    > свои переменные.

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

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

    qsub $PBS ./task

     
  • 2.8, Jurij (?), 11:25, 13/12/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Строчки, начинающиеся с #PBS используются не самим запускающим скриптом (он будет запущен только шедулером на вычислительной ноде), а pbs-сервером в качестве дополнения к информации о параметрах задачи.
     

  • 1.5, rstone (??), 22:55, 06/12/2010 [ответить]  
  • +/
    Сравнивали с SGE ?

     
     
  • 2.6, Аноним (-), 13:36, 07/12/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Зачем и по каким критериям?
     

  • 1.7, metallic (?), 20:27, 09/12/2010 [ответить]  
  • +/
    Не понял, это любой софт будет работать так или специально заточенный под кластер, с библиотекой mpi ?
     
     
  • 2.9, Аноним (-), 21:20, 14/12/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Любой.
    Это система управления заданиями и ей все равно что вы запускаете. Другой вопрос, что она не распараллелит вашу задачу этим уже должны заниматься вы...
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру