Руководство пользователя вычислительного кластера Оренбургского государственного университета




Дата канвертавання22.04.2016
Памер324.34 Kb.
УТВЕРЖДАЮ

Ректор ГОУ ОГУ

__________________

В.П. Ковалевский

«__»__________2008г.

Руководство пользователя вычислительного кластера

Оренбургского государственного университета
Данное руководство предназначено для работы на вычислительном кластере Оренбургского государственного университета. Руководство содержит минимально необходимый объем информации для работы: описание процесса регистрации, сведения по работе в ОС Linux (вход в систему, работа с каталогами и файлами, мониторинг) и работе с MPI программами и непараллельными программами на кластере (компиляция, запуск, остановка, работа с очередями). В тексте под термином параллельная программа подразумеваются только MPI программы.

По мере обновления существующего программного обеспечения вычислительного кластера, добавления новых прикладных программ, программных комплексов и библиотек обновляется также данное руководство. В связи с этим возможно некоторое несоответствие руководства с действительностью, некоторые вещи могут быть описаны недостаточно подробно, описание некоторых может вообще отсутствовать. В случае возникновения затруднений в использовании данного руководства, обнаружения ошибок и неточностей или возникновения других замечаний и предложении по улучшению руководства обращайтесь к администратору вычислительного кластера по электронной почте cluster@mail.osu.ru. Последнюю версию руководства пользователя можно получить по адресу ftp://fileserver1.net.osu.ru/Cluster/cluster_users_manual.doc в локальной вычислительной сети Оренбургского государственного университета (ОГУ) или на официальном сайте ОГУ http://www.osu.ru/img/department/cit/docs/cluster_users_manual.doc через Интернет, а также обратившись к администратору кластера в аудиторию 170315 или по указанному выше адресу электронной почты.


1 Регистрация

Для регистрации пользователя вычислительного кластера руководителю подразделения необходимо написать заявку в форме служебной записки на имя проректора по информатизации, в которой указать полностью ФИО всех лиц, кому нужно предоставить доступ, указать цели использования кластера и описать круг задач, решаемых на кластере. После указания проректора, пользователю необходимо обратиться к администратору вычислительного кластера в аудиторию 170315 для получения пароля, предварительно заполнив Форму регистрации пользователя вычислительного кластера. Форму регистрации можно получить по адресу ftp://fileserver1.net.osu.ru/Cluster/cluster_form_registration.doc или http://www.osu.ru/img/department/cit/docs/cluster_form_registration.doс. Заполняя Форму регистрации, пользователь соглашается с правилами использования ресурсов вычислительного кластера, ознакомиться с которыми можно по адресу ftp://fileserver1.net.osu.ru/Cluster/cluster_rules.doc.

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

После регистрации пользователь получает системное имя (логин), пароль и домашнюю директорию. Например, логин – ivanov_ip, пароль – s1R46n20, домашняя директория - /home/ivanov_ip.


2 Вход в систему

Пользователь имеет возможность работать на вычислительном кластере с любого компьютера, находящегося в локальной вычислительной сети Оренбургского государственного университета. При необходимости возможен доступ к кластеру через Интернет. Для входа в систему пользователя из локальной вычислительной сети Оренбургского государственного университета, необходимо использовать адрес сервера cluster.net.osu.ru, для доступа через Интернет – адрес cluster.osu.ru. В качестве имени пользователя используется логин и пароль, указанные при регистрации.

Работа с системой осуществляется по защищенному протоколу SSH (Secure Shell). Для этого необходимо иметь соответствующее клиентское программное обеспечение, различающееся для разных операционных систем.
2.1 Вход с Windows-машины

Работа с системой осуществляется посредством любого ssh-клиента, работающего в ОС Windows. Рекомендуется использовать клиент PuTTY. Программа свободно распространяема, проста в использовании и доступна для пользователей локальной вычислительной сети Оренбургского государственного университета по адресу ftp://fileserver1.net.osu.ru/install/Internet/PuTTY/putty-0.58-installer.exe (установочная версия) или в Интернете по адресу http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html.

После запуска программы пользователь должен выбрать протокол ssh и в поле «Host Name (or IP address)» указать адрес сервера (cluster.net.osu.ru при работе в сети университета или cluster.osu.ru при работе через Интернет). Нажатие на «Open» приведет к отправке запроса на подключение. В случае успешного подключения к серверу будет предложено ввести имя (логин), а затем и пароль.

При вводе пароля символы на экране не отображаются. Если все введено правильно, то пользователь автоматически окажется в своей домашней директории. Этот каталог доступен пользователю с любого узла вычислительного кластера.

На кластере существует единое дисковое пространство. Все узлы используют дисковый массив сервера посредством сетевой файловой системы NFS (Network File System). Файл, записанный в домашней директории пользователя на одном из узлов кластера, автоматически становится доступен на любом другом. Поскольку размер жесткого диска сервера ограничен, пользовательские программы не должны создавать временные файлы в домашней директории. Для этих целей существует директория /tmp для малых файлов и директория /usr/tmp для больших (свыше 1 Гбайт) файлов.

Работа в ssh-сессии происходит в терминальном (текстовом, консольном) режиме. Необходимо помнить, что консоль Linux, в отличие от Windows, различает регистр вводимых символов, т.е. mydoc.txt и mydoc.TXT не одно и то же.


2.2 Вход с Unix/Linux машины

Как правило, в любой дистрибутив Unix/Linux входит терминальный ssh-клиент. Минимальный формат команды для подключения из сети университета таков:


ssh -l имя_пользователя cluster.net.osu.ru
или
ssh имя_пользователя@cluster.net.osu.ru
Для подключения через Интернет необходимо заменить cluster.net.osu.ru на cluster.osu.ru.

Большинство пользователей UNIX-подобных систем знакомо с протоколом SSH, поэтому трудностей с подключением у них возникнуть не должно.


3 Копирование файлов

При копировании файлов с компьютера на вычислительный кластер (программы, входные данные, различные библиотеки и т.п.) и обратно (листинги, результаты расчетов) пользователем должен использоваться протокол sftp. Этот протокол обеспечивает необходимую защиту передаваемой информации посредством шифрования всех передаваемых данных.


Примечание:

Хотя протокол sftp обеспечивает защиту передаваемых данных, защита данных на кластере (в домашней директории) целиком и полностью задача пользователя. Рекомендуется установить права доступа на домашнюю директорию только для пользователя. Это можно сделать командой chmod 700 /home/имя_пользователя. Для получения более полной информации необходимо обратить к любому руководству пользователя Linux.
Копирование файлов осуществляется при помощи утилиты scp (для Windows-пользователей, использующих PuTTY – pscp). Формат этой команды эквивалентен стандартной команде копирования файлов cp.

Ниже представлен пример команды в Windows для копирования в локальной вычислительной сети Оренбургского государственного университета пользователем test_user папки program и всех ее подпапок в домашнюю директорию на кластере:


pscp.exe –r ./program test_user@cluster.net.osu.ru:$HOME
В этом примере была использована утилита pscp из пакета PuTTY. Первым обязательным параметром этой команды является копируемый файл (папка) – источник. В показанном примере это ./program. Ключ -r указывает на рекурсивное копирование всех подкаталогов. test_user@cluster.net.osu.ru:$HOME – адрес приемника. Формат адреса: имя_пользователя@адрес_узла_назначения:файл_или_папка_приемник. $HOME является стандартной переменной окружения, содержащей расположение домашней папки пользователя. В данном случае $HOME эквивалентно /home/test_user.
Многие пользователи Windows возможно предпочтут пользоваться более привычными графическими оболочками. Существует свободно распространяемая программа WinSCP, представляющая собой клиент в стиле проводника Windows или Norton Commander по выбору пользователя. Скачать программу можно из локальной вычислительной сети Оренбургского государственного университета по адресу ftp://fileserver1.net.osu.ru/install/Internet/sftp/winscp382setupintl2.exe, пакет русификации по адресу ftp://fileserver1.net.osu.ru/install/Internet/sftp/ru.zip. Кроме того, существует плагин для Far Manager, также доступный по адресу ftp://fileserver1.net.osu.ru/install/Internet/sftp/winscpfar151setup.exe. Данный плагин устанавливается автоматически и почти не требует настроек. Для любой из программ настройки минимальны: адрес сервера и порт номер 22.

Примечание:

Максимальный размер домашней директории пользователя может быть ограничен. Пользователям не следует хранить на сервере файлы, не относящиеся напрямую к заявленным в Форме регистрации целям.
4 Работа на кластере

Для работы на вычислительном кластере удобно пользоваться файловым менеджером Midnight Commander, который включает редактор текстовых файлов. Универсальным способом работы на кластере является работа через консоль. Оба способа кратко описаны ниже.


4.1 Структура файловой системы

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

Директория /share доступна с любого узла кластера. В данной директории хранятся следующие программы и данные:

/share/home/<имя_пользователя> – домашние директории пользователей, данные пользователей,

/share/mpi – различные дистрибутивы MPI (в том числе устаревшие),

/share/lib/atlas – библиотека численных методов ATLAS,

/share/lib/gotoblas – библиотека численных методов GotoBLAS,

/share/lib/mkl – библиотека численных методов Intel Math Kernel Library,

/share/openmpi – текущая версия MPI-дистрибутива OpenMPI,

/share/mvapich – текущая версия MPI-дистрибутива MVAPICH,

/share/mvapich2 – текущая версия MPI-дистрибутива MVAPICH2.
4.2 Навигация

На кластере пользователю доступен на запись только его домашний каталог и каталог /tmp для временно создаваемых файлов. Для работы с файлами и каталогами существует несколько полезных команд:

ls Показать список папок и файлов в текущем каталоге

pwd Показать имя текущего каталога

cd название_каталога Сменить каталог

mkdir название_каталога Создать каталог

clear Очистка экрана

cp что куда Копирование файлов и каталогов

mv что куда Перемещение файлов и каталогов
Примечание:

Подробную справку по этим командам, а также по всем другим можно получить, набрав в консоли man имя_команды. Для эффективной работы с консолью рекомендуется обратиться к руководству пользователя операционной системы Linux.
При работе в консоли удобно пользоваться клавишей автоподстановки Tab. Если, набрав несколько первых символов программы или файла пользователь нажмет на клавишу Tab, то система дополнит их до полного имени, если имеется только единственный вариант дополнения. Если вариантов несколько, то появится их список. Введение дополнительных символов, которые однозначно определяют нужное имя и нажатие клавиши Tab приводит к выбору нужного имени файла или команды.
Запустить файловый менеджер Midnight Commander можно, набрав в консоли команду mc. Интерфейс Midnight Commander внешне похож на FAR или Norton Commander. Midnight Commander позволяет пользователю работать в консольном режиме более удобным и привычным способом.
Примечание:

При недостаточной пропускной способности соединения (особенно через Интернет) использование mc может сильно замедлить заботу, поскольку тратится время на прорисовку интерфейса. В этом случае рекомендуется пользоваться исключительно консольными командами.
4.3 Редактирование файлов

Пользователю рекомендуется основную часть исходных файлов подготавливать на своем локальном компьютере в привычных текстовых редакторах. Для внесения небольших изменений в файлы хорошо подходит встроенный в mc редактор.

В этом редакторе присутствуют все основные средства, имеющиеся в подобных программах: копирование, вставка, поиск, замена, подсветка синтаксиса, ряд других.
Если необходимы более сложные средства редактирования, то можно использовать редактор vi. Основная функция vi — работа с исходными текстами программ. Достоинства данного редактора в большом количестве функций, быстроте работы (редактор полностью консольный). Недостаток редактора – достаточно сложное управление, которое нельзя назвать интуитивно понятным пользователям, привыкшим к работе в ОС Windows. За полным перечнем доступных команд редактора vi рекомендуется обратиться к соответствующим руководствам, поскольку описание всех его команд и функций выходит за рамки данного руководства.

Запустить vi можно командой:


vi имя_файла.
4.4 Компиляция MPI-программ

В настоящий момент пользователю доступны следующие реализации (дистрибутивы) стандарта MPI: MVAPICH, MVAPICH2, OpenMPI. Каждая реализация поддерживает три языка программирования: СИ (компилятор gcc), СИ++ (компилятор g++) и Фортран-77 (компилятор f77).

Кроме того, установлены компиляторы Intel Fortran Compiler for Linux версии 9.1 и 10.1, поддерживающие Фортран-90. Данные компиляторы предоставлены для использования в некоммерческих целях и не поддерживаются библиотекой MPI напрямую (необходимо подключать необходимые библиотеки вручную, используя опцию -L). Подробнее об использовании компиляторов Intel можно узнать, прочитав документацию к компилятору в /opt/intel/fc/<номер версии>/doc.
Для компиляции параллельных программ следует использовать следующие команды:

- mpicxx для компиляции программы на языке C или C++;

- mpicc для компиляции программы на языке C;

- mpif77 для компиляции программы на языке Фортран 77.


Основные параметры для всех трёх компиляторов одинаковы. В простейшем случае скомпилировать С++ программу можно так:
/share/openmpi/bin/mpicxx –o test ./test.cpp
Для Fortran-77:
/share/openmpi/bin/mpif77 -o test ./test.f

В данном примере показан пример компиляции параллельной программы с использованием MPI из дистрибутива OpenMPI. Это значит, что для запуска этой программы необходимо использовать команды дистрибутива OpenMPI именно той версии, с помощью которой была выполнена компиляция и никакого другого. Узнать версию OpenMPI можно при помощи команды /share/openmpi/bin/ompi_info (номер версии выводится в самом начале). Рекомендуется запомнить версию OpenMPI, в случае обновления предыдущие версии дистрибутива можно найти в директории /share/mpi.

Следующим образом ту же программу можно скомпилировать, используя дистрибутив MVAPICH2:
/share/mvapich2/bin/mpicxx –o test ./test.cpp
Для Fortran-77:
/share/mvapich2/bin/mpif77 -o test ./test.f
Как и в предыдущем случае, запускать скомпилированную таким образом программу можно только при помощи дистрибутива MVAPICH2 соответствующей версии, номер которой можно узнать при помощи команды /share/mvapich2/bin/mpich2version. Соответственно, при обновлении версии дистрибутива MPI необходимо заново провести компиляцию прикладных программ (что рекомендуется) или найти предыдущий дистрибутив в директории /share/mpi и использовать его для запуска.

Примеры запуска параллельных программ в различных дистрибутивах MPI приведены ниже.


Примечание:

В ОС Windows исполняемые файлы имеют определенное расширение: exe, bat, cmd, com и ряд других. Файлы только таких типов могут быть выполнены. В Linux исполняемые файлы определяются не их расширением, а установкой битов выполнения. Следующей командой в Linux можно сделать исполняемым любой файл, независимо от расширения: chmod 755 <имя_файла>.
О других параметрах компиляторов можно узнать, набрав в консоли man g++, man gcc, man g77 или обратившись к соответствующим руководствам.
Примечание:

Практически все реализации MPI поддерживают запуск параллельных приложений в режиме эмуляции на отдельно взятой рабочей станции. Это можно делать как на Linux, так и Windows машинах.

В Linux рекомендуется использовать пакет mvapich2, а для создания MPI приложений на Windows машинах можно использовать пакет MPICH2 в версии для Windows (http://www.mcs.anl.gov/mpi/mpich/mpich-nt). Для успешного портирования программ с Windows на Linux не следует использовать расширения предоставляемые средами программирования, такими как VisualStudio и BorlandBuilder.

Подготовленные исходные коды программ, проверенные и отлаженные на локальном компьютере, рекомендуется компилировать на кластере под определенную версию дистрибутива MPI. Только в этом случае можно гарантировать успешное выполнение программы. Если использование исходного кода по каким-либо причинам невозможно или нецелесообразно, возможно исполнение бинарных файлов форматов: elf, a.out, скомпилированных под Linux. При этом необходимо придерживаться следующих рекомендаций:

  • Следует учитывать архитектуру процессора. Не следует применять оптимизацию, доступную на других архитектурах, например технологию 3DNow в процессорах AMD.

  • Совпадение версий динамически подключаемых библиотек. При несовпадении версий следует использовать статическую сборку — ключ "-static".

  • Совпадение версии дистрибутива MPI. Локальные параллельные библиотеки пользователя должны быть собраны с этой же версией MPI.

4.5 Запуск программ

Для запуска задач на вычислительном кластере Оренбургского государственного университета необходимо пользоваться менеджером ресурсов Torque. Кратко это можно описать следующим образом: пользователь готовит файл задачи для Torque и ставит его в очередь командой qsub. При этом пользователь запрашивает необходимые для этой задачи ресурсы: число узлов кластера, число процессоров на каждом из них, необходимое количество оперативной памяти и время выполнения задачи.

Если запрошенные ресурсы не противоречат имеющимся настройкам кластера и очереди (т.е., вы не просите, например, больше процессоров, чем их физически есть), задание будет поставлено в очередь. После этого, как только образуются свободные ресурсы на кластере, соответствующие запрашиваемым, Torque запустит задание.

Файл задачи представляет собой обычный командный файл, который настраивает нужные переменные среды (пути, расположение временных каталогов, файлов с данными и выходных файлов) и запускает программу пользователя. Кроме того, внутри файла вы можете получить данные от Torque через ее специальные переменные среды.

Спецификация необходимых ресурсов может быть осуществлена в qsub с помощью ключей командной строки, особенно -l. Например, чтобы поставить в очередь single задачу sleep.job на один процессор, на полтора часа и используя сто мегабайт памяти, можно сделать так:


qsub -l nodes=1:ppn=1,mem=100mb,walltime=1:30:00 -q single sleep.job
Еще одна возможность задания ресурсов, более удобная – это указание их внутри самого командного файла, вначале его, в строках-комментариях начинающихся с #PBS, и запуск. Например файл sleep.job может быть следующим:
#!/bin/bash

#PBS -q single

#PBS -l nodes=1:ppn=1,mem=100mb,walltime=1:30:00

#PBS -S /bin/bash

#PBS -o sleep.out

#PBS -e sleep.err

#PBS -N sleep
echo " Start date:`date`"

sleep 10


echo " End date:`date`"
В таком случае он запускается просто как qsub sleep.job . Полный список параметров и ресурсов для qsub можно найти c помощью man qsub и man pbs_resources.

Для запуска параллельных задач, т.е. задач, использующих несколько процессоров, необходимо выполнять одно главное правило:



Задача должна работать именно на тех узлах и тех процессорах, которые выделены ей Torque. Большинство дистрибутивов MPI имеют собственную систему динамического определения узлов, на которых будет запущена программа. Такая система не должна использоваться, необходимо статически указать дистрибутиву MPI «правильные» узлы. Для этого нужно чтобы командный файл задачи брал список выделяемых узлов из файла, на который указывает переменная $PBS_NODEFILE .
Дистрибутив OpenMPI умеет самостоятельно получать список узлов от Torque, поэтому пользователю нет необходимости заботиться об этом.

При использовании дистрибутивов MVAPICH, MVAPICH2 необходимо указать список узлов вручную или использовать специальное средство запуска mpirun_pbs. Каким образом это можно сделать описано ниже.

Например, вот так может выглядеть командный файл запуска параллельной версии программы расчета числа Пи с использованием дистрибутива OpenMPI:
#!/bin/bash

#PBS -l nodes=2:ppn=2,mem=100mb,walltime=1:30:00

#PBS -S /bin/bash

#PBS -o out

#PBS -e err

#PBS -N cpi

#PBS -q para
/share/openmpi/bin/mpirun –np 4 /home/testuser/bin/cpi
Разумеется, программа cpi должна быть скомпилирована с использованием дистрибутива OpenMPI, например:
/share/openmpi/bin/mpicc /home/testuser/bin/cpi.c –o /home/testuser/bin/cpi
Команда /share/openmpi/bin/mpirun –np 4 /home/testuser/bin/cpi запускает 4 экземпляра программы cpi, выполняемых параллельно. Как видно из примера, пользователю не нужно заботиться, на каких узлах исполняется программа. В этом преимущество OpenMPI. Кроме того, предварительное тестирование вычислительного кластера показало, что OpenMPI в большинстве случаев показывает лучшую производительность (до 30% по сравнению с MVAPICH2), поэтому есть основания рекомендовать к использованию в первую очередь именно OpenMPI.

Тот же пример, но с использованием MVAPICH2 будет немного сложнее. Сначала пользователю необходимо запустить демон mpd командой:


/share/mvapich2/bin/mpdboot –n 7 –f /etc/mpd.hosts –v
В случае необходимости, создайте файл ‘.mpd.secret’ в домашней директории, например, такой командой:
echo “h5_M182bb” > $HOME/.mpd.secret; chmod 600 $HOME/.mpd.secret
Здесь h5_M182bb – пример секретного слова, которое пользователь должен придумать самостоятельно. Секретное слово может состоять из латинских букв, цифр и специальных символов.

Проверить, запущен ли mpd, можно командой /share/mvapich2/bin/mpdtrace. Данная команда выводит список узлов, на которых запущен mpd. Если mpd не запущен, команда выводит примерно следующее:


mpdtrace: cannot connect to local mpd (/tmp/mpd2.console_test); possible causes:

1. no mpd is running on this host

2. an mpd is running but was started without a "console" (-n option)
В этом случае нужно запустить mpd, как указанно выше. В случае возникновения проблем с запуском mpd, обращайтесь к администратору кластера.

Теперь, при запущенном демоне mpd, запустить расчет можно использую следующий скрипт:


#!/bin/bash

#PBS -l nodes=2:ppn=2,mem=100mb,walltime=1:30:00

#PBS -S /bin/bash

#PBS -o out

#PBS -e err

#PBS -N cpi

#PBS -q para
/share/mvapich2/bin/mpirun –machinefile $PBS_NODEFILE –np 4 /home/testuser/bin/cpi
В приведенном выше примере программе mpirun передается в качестве параметра

–machinefile значение переменной $PBS_NODEFILE, которая содержит полный путь к файлу, содержащему список узлов, выделенных пользователю для запуска задачи. Например, если пользователь запросил 2 узла по 2 процессора и в настоящий момент свободны узлы node-1 и node-2, то файл, на который указывает переменная $PBS_NODEFILE, может быть следующим:


node-1

node-1


node-2

node-2
Используя данный механизм пользователь может узнать, какие узлы зарезервированы системой для его задачи и передать их перечень программе mpirun. Пользователю запрещается удалять или изменять файл $PBS_NODEFILE, поскольку это может привести к непредсказуемому поведению менеджера ресурсов.

После завершения расчетов пользователь может завершить работу mpd следующей командой:
/share/mvapich2/bin/mpdallexit
Как показано выше, использование MVAPICH2 менее удобно по сравнению с OpenMPI, требует запуска дополнительных программ (mpd) и правильного указания перечня узлов, на которых будет запущена задача. Однако существует решение, позволяющее использовать MVAPICH2 так же просто, как и OpenMPI. Для этого следует использовать средство запуска /share/mvapich2/bin/mpirun_pbs вместо обычного mpirun.
Например:
#!/bin/bash

#PBS -l nodes=2:ppn=2,mem=100mb,walltime=1:30:00

#PBS -S /bin/bash

#PBS -o out

#PBS -e err

#PBS -N cpi

#PBS -q para
/share/mvapich2/bin/mpirun_pbs –np 4 /home/testuser/bin/cpi
Как видно из примера, MVAPICH2 больше не требует передачи списка узлов, теперь он может самостоятельно получить его. Кроме того, такой вид запуска параллельных программ больше не требует предварительного запуска mpd и программы на узлах запускаются быстрее. Таким образом, при использовании MVAPICH2 рекомендуется всегда использовать скрипт mpirun_pbs, а стандартный механизм запуска mpirun использовать только в случае крайней необходимости и внимательно следить за правильностью скрипта запуска.

В случае необходимости пользователь может использовать дистрибутив MVAPICH (не путать с MVAPICH2). По результатам предварительного тестирования MVAPICH по скорости немного превосходит MVAPICH2 (2% - 3%) и уступает OpenMPI (10% - 15%). Никаких дополнительных программ (типа mpd) MVAPICH не требует, но, как и MVAPICH2 требует аккуратного и правильного указания, на каких узлах запускать параллельную программу. Для запуска пользователь должен использовать программу mpirun_rsh с параметром -ssh, а также указать параметры –hostfile (аналог –machinefile в MVAPICH2) Вот пример запуска параллельной программы с использованием MVAPICH:


#!/bin/bash

#PBS -l nodes=2:ppn=2,mem=100mb,walltime=1:30:00

#PBS -S /bin/bash

#PBS -o out

#PBS -e err

#PBS -N cpi

#PBS -q para
/share/mvapich/bin/mpirun_rsh –ssh –hostfile $PBS_NODEFILE –np 4 /home/testuser/bin/cpi
Для подробного ознакомления с компиляцией и запуском параллельных программ в различных дистрибутивах MPI читайте документацию пользователя на официальных сайтах соответствующих дистрибутивов. Ссылки на сайты приведены в конце данного руководства, в разделе Полезные ссылки.
4.6 Система управления заданиями

Как уже было сказано выше, во избежание различного рода конфликтов и перегрузки вычислительного кластера при использовании его несколькими пользователями, пользователи должны запускать свои задачи только через систему управления заданиями Torque.

О том, как поставить задание в очередь, уже было рассказано выше. В данном разделе приводится ряд полезных команд, использование которых повышает гибкость управления заданиями.

После того, как задание успешно поставлено в очередь, ему присваивается уникальный идентификатор задачи (Job ID). Используя этот номер, можно манипулировать заданием в очереди:

- qstat Посмотреть состояние очереди;

- qdel Удалить задание из очереди;

- qalter Изменить параметры уже запущенного задания;

- qrerun Перезапустить задание, если это возможно;

- qhold Приостановить задание;

- qrls Запустить приостановленное задание.


Каждая из этих команд имеет множество параметров, ознакомиться с которыми пользователь может при помощи команды man <имя команды>, например man qstat. О других командах системы Torque читайте в руководстве пользователя Torque, ссылка на официальный сайт приведена ниже в разделе Полезные ссылки.

Если задание было успешно поставлено в очередь, qstat по умолчанию выведет на экран таблицу, столбцы которой имеют следующие значения:

Job id - уникальный идентификатор задачи;

Name - имя исполняемой задачи;

User - имя владельца задачи;

Time Use - общее процессорное время, использованное задачей на данный момент

S - состояние задачи (Q - находится в очереди, R – вычисляется, E - произошла ошибка при выполнении или задача завершает выполнение);

Queue - название очереди, в которой запущена задача.


Вот пример запуска команды qstat:
Job id Name User Time Use S Queue

------------------- ---------------- --------------- -------- - -----

1972.master PCGAMESS davydovk 00:00:00 R single

1993.master cpi-mpirun kruchin 00:00:00 R para

1994.master dl chepasov 0 Q para

Для получения более подробной информации, пользователь может воспользоваться ключом –a, например, команда qstat –a выдаст примерно следующее:


Req'd Req'd Elap

Job ID Username Queue Jobname SessID NDS TSK Memory Time S Time

-------------------- -------- -------- ---------- ------ ----- --- ------ ----- - -----

1972.master.localdom davydovk single PCGAMESS 14740 2 -- -- 96:00 R 61:38

1993.master.localdom kruchin para cpi-mpir 16334 3 -- 500mb 88:30 R 09:32

1994.master.localdom chepasov para dl -- 4 -- -- 48:00 Q --


На приведенном выше примере можно увидеть, что пользователь davydovk запустил задание под именем PCGAMESS на 2-х узлах (NDS), запросил 96 часов времени (Req’d Time), задание выполняется уже 61 час, 38 минут (Elap Time). Пользователь kruchin запустил задачу на 3-х узлах и запросил для нее 500 Мбайт оперативной памяти (Req’d Memory) и 88 часов 30 минут времени работы, задача проработала 9 часов 32 минуты. Пользователь chepasov поставил задание в очередь, но в связи с недостатком свободных процессоров его задание не может быть выполнено сразу же, поэтому оно находится в режиме ожидания свободных ресурсов (значение S равно Q). Как только освободятся 4 узла, которые он запросил, его задание будет запущено и проработает максимум 48 часов, которые он указал в запросе.

Еще один полезный ключ команды qstat позволяет посмотреть, на каких именно узлах и процессорах выполняется задание. Это ключ –q:


Req'd Req'd Elap

Job ID Username Queue Jobname SessID NDS TSK Memory Time S Time

-------------------- -------- -------- ---------- ------ ----- --- ------ ----- - -----

1972.master.localdom davydovk single PCGAMESS 14740 2 -- -- 96:00 R 61:38

node-2/1+node-2/0+node-1/1+node-1/0

1993.master.localdom kruchin para cpi-mpir 16334 3 -- 500mb 88:30 R 09:32

node-5/1+node-5/0+node-4/1+node-4/0+node-3/1+node-3/0

1994.master.localdom chepasov para dl -- 4 -- -- 48:00 Q --

---
Данный пример напоминает предыдущий, но после каждой строки, описывающей задание, указывается на каких узлах и процессорах оно запущено. Например, задание пользователя davydovk использует 2 процессора узла node-2 и 2 процессора узла node-1, т.е. всего 4 процессора. Аналогично, задание пользователя kruchin использует по 2 процессора на узлах node-5, node-4 и node-3. Задание пользователя chepasov еще не запущено, поэтому нельзя заранее узнать, какие узлы и процессоры будут ему предоставлены.

Другая полезная команда – tracejob, используемая для отладки, позволяет узнать текущее состояние задачи. В качестве аргумента принимает идентификатор задачи Job id:


tracejob 123

Часто пользователю необходимо знать, какие узлы и процессоры свободны в настоящий момент. Для этого пользователь может использовать команду pbsnodes. Данная команда выводит список узлов с указанием состояния (state) каждого узла. Состояние free означает, что узел не выполняет никакую задачу, т.е. свободен. Состояние job-exclusive означает, что узел занят выполнением задачи, а состояние down указывает на то, что данный узел в настоящий момент не доступен.


Запуск непараллельных программ также должен проводиться в рамках системы управления заданиями Torque.
Пример скрипта для выполнения непараллельной программы предельно прост:
#!/bin/bash

#PBS -l nodes=1


#PBS -q single  
#PBS -N jobname
/home/test/sample < /home/test/sample.in > /home/test/sample.out
В данном примере запускается непараллельная программа sample, принимающая входные данные из файла sample.in и выводящая результат в файл sample.out. Следует помнить, что все задачи на вычислительном кластере запускаются в пакетном режиме, т.е. программа не должна ожидать ввода данных с клавиатуры и выводить результат в текстовом виде, пригодном для перенаправления в файл.
4.7 Web-инферфейс

Пользователям вычислительного кластера предоставляется возможность посмотреть состояние очереди задач, не устанавливая сеанс связи по ssh. Для этого необходимо находясь в локальной вычислительной сети ОГУ набрать в Интернет-браузере следующий адрес: http://cluster.net.osu.ru/jobs.cgi. В появившейся таблице будет показан список текущих задач, выполняемых или ожидающих выполнения. В целом формат списка похож на выдаваемый командой qstat с небольшими дополнениями.


Примечание:

В настоящий момент ведется разработка web-интерфейса диагностики и управления вычислительным кластером. Ознакомиться с текущем состоянием web-интерфейса можно по адресу http://cluster.net.osu.ru. Web-интерфейс доступен только из локальной вычислительной сети ОГУ.
4.8 Прикладные программы и библиотеки

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


4.8.1 PCGAMESS

Пользователям доступен программный комплекс PCGAMESS для решения задач химии, разработанный Александром Грановским на основе программы US-GAMESS.

Для запуска PCGAMESS пользователю следует использовать специально разработанный скрипт:
pcg.run [option] [output_file] [walltime]
где option может содержать один или несколько ключей:

-o или --one-per-node – ключ, указывающий на необходимость запуска только одного процесса PCGAMESS на каждом узле, при этом процессу отводится вся свободная оперативная память узла (до 2 Гбайт, за исключением памяти, занимаемой операционной системой) и оба процессора, рекомендуется для расчетов, требующих большого объема оперативной памяти;

-m или --move-to-outdir – ключ, дающий указание скрипту после выполнения расчета перенести входной файл в ту же директорию, в которую будет помещен выходной файл;

-d или –debug – ключ, указывающий на необходимость вывода дополнительной отладочной информации (выходной файл и файл ошибки torque, файл .qsub и т.п.). Следует использовать в случае возникновения проблем для диагностики;

-k или --keep-tmp – указывает скрипту на необходимость не удалять временные файлы на узлах после окончания расчета;

N – количество процессов PCGAMESS, используемых для проведения расчета, при указании ключа --one-per-node или -o равно количеству узлов, на которых будет выполняться расчет;

input_file – имя входного файла;

output_file – имя выходного файла;

walltime – максимальное время выполнения расчета.
Скрипт заботится о формировании корректного файла задачи и ставит задачу в очередь. Это означает, что пользователь может управлять запущенным расчетом, используя команды системы управления заданиями. Например, посмотреть состояние задания командой qstat, отменить задание командой qdel и т.д.

Если имя выходного файла не указано, используется имя входного файла без расширения, к которому добавляется расширение out. Например, запуск программы на двух процессорах:


pcg.run 2 input.in
создаст в текущей директории выходной файл input.out, в который поместит результаты расчета. Максимальное время расчета по умолчанию принято 24 часа.

Пример запуска PCGAMESS с указанием запускать по одному процессору на каждом узле:


pcg.run -o 2 input.in output.out
В отличие от предыдущего примера, данный пример для запуска требует наличия двух свободных узлов (ни один из процессоров которых не должен быть занят выполнением задачи), в противном случае задание будет поставлено в очередь и будет находиться в ней до тех пор, пока не освободится необходимое количество узлов. Результат расчета будет записан в файл output.out.

Во время расчета скрипт pcg.run создает в рабочей директории файл <число>.qsub, представляющий собой файл задачи для системы управления заданиями. Пользователь не должен удалять или редактировать этот файл до завершения расчета. В случае успешного завершения расчета данный файл удаляется автоматически (если не указан ключ --debug или -d). Если пользователь снял задание с выполнения при помощи команды qdel, файл <число>.qsub не может быть удален автоматически и пользователь может удалить его самостоятельно.

Во время расчета в рабочей директории (в которой находится выходной файл) PCGAMESS создает файл PUNCH, который после окончания расчета переименовывается в файл с именем, совпадающим с именем выходного файла и расширением pun. Таким образом, для проведения расчета необходимо создать отдельную рабочую директорию и указать ее в качестве директории, в которую будет помещен выходной файл. Входная и выходная директории могут совпадать. Если в рабочей директории присутствует файл с именем PUNCH, он будет перезаписан без уведомления пользователя. Пользователю не следует запускать несколько расчетов PCGAMESS в одной рабочей директории одновременно (даже с использованием разных входных и выходных файлов), это может нарушить корректность выполнения программы.

При указании параметра --debug или –d, после окончания расчета в рабочей директории создаются файлы pcg.err и pcg.out. В случае возникновения ошибки, содержимое этих файлов может помочь диагностировать проблему. На функционирование PCGAMESS данные файлы никак не влияют и могут быть удалены без каких-либо последствий.

Необходимо помнить, что указание большого числа процессов не означает пропорционального уменьшения времени расчета. Более того, ряд расчетов быстрее выполняется при меньшем количестве процессов, а иногда и в непараллельном режиме. Поскольку на одном узле может быть запущено два процесса PCGAMESS (по одному на каждый процессор), а память на узле общая и составляет 2 Гбайта, каждый процесс PCGAMESS в этом случае не должен потреблять памяти больше 900 Мбайт, иначе процессы начинают активно использовать виртуальную память (файл подкачки на жестком диске) и конкурировать за использование файла подкачки, что ведет к серьезной деградации производительности. В случае необходимости проведения расчетов, требующих большого объема оперативной памяти, используйте ключ --one-per-node или –o.

Для автоматизации проведения большого количества расчетов был разработан скрипт:


pcg.rundir [options] [walltime]
где значения options совпадают со значениями в скрипте pcg.run (смотрите выше), за исключением следующих:

ключ -m или --move-to-outdir отсутствует, входные файлы всегда переносятся в директорию, содержащую выходные файлы;

ключ --delay устанавливает время ожидания между проверками состояния запущенной задачи в секундах; по умолчанию время ожидания составляет 30 секунд;

ключ -e или --in-ext устанавливает расширение входного файла, по этому расширению скрипт отличает входные файлы от остальных; по умолчанию используется расширение ‘inp’;

ключ --out-ext устанавливает расширения для выходных файлов, имя выходного файла совпадает с именем входного плюс указанное расширение; по умолчанию используется расширение ‘out’;

N – количество процессов PCGAMESS, используемых для проведения расчета, при указании ключа --one-per-node или -o равно количеству узлов, на которых будет выполняться расчет;

input_dir – название директории, содержащей набор входных файлов;

output_dir – название директории, в которой будут размещены результаты расчетов;

walltime – максимальное время выполнения каждого расчета.
Скрипт pcg.rundir работает следующим образом. Предположим, пользователю необходимо провести ряд коротких расчетов или расчетов со схожими параметрами. Чтобы не набирать для каждого расчета команду pcg.run, пользователь может поместить входные файлы в отдельную директорию (назовем ее входной директорией) с одинаковым расширением, создать директорию, в которую необходимо поместить результаты расчетов и запустить скрипт:
pcg.rundir 2 in out
В приведенном выше примере скрипт pcg.rundir перебирает по очереди все файлы с расширением ‘inp’ в директории in, для каждого входного файла запускается pcg.run с параметрами по умолчанию, все выходные файлы создаются в директории out, туда же переносятся и ‘отработанные’ входные файлы.

Поскольку в одной рабочей директории в одно и то же время может выполняться только один расчет, входные файлы ставятся в очередь по одному. Следующий расчет будет запущен только после окончания предыдущего. Параметры, переданные скрипту pcg.rundir (например, число процессов N, --one-per-node или -o), передаются скрипту pcg.run и применяются для всех входных файлов. Другими словами, условия запуска и параметры для всех входных файлов одинаковы.

Скрипт pcg.rundir не будет завершен, пока во входной директории имеется хотя бы один входной файл. Общее время расчета может быть значительным, в течение всего этого времени пользователь не должен прерывать сеанс связи с вычислительным кластером и закрывать консольное окно, иначе цепочка расчетов будет прервана.

Вариантом решения этой проблемы может быть запуск pcg.rundir в фоновом режиме следующей команой:


pcg.rundir 2 in out > pcg.log &
Эта команда запускает тот же расчет, что и в предыдущем примере, но вывод сообщений перенаправляется в файл pcg.log, а указание & в конце команды означает запуск ее в фоновом режиме. Пользователь может продолжать работу или завершить сеанс связи, вычисления в любом случае будут продолжены. На завершение вычислений укажет наличие строки ‘>No more .inp files found... Exiting..’ в конце файла pcg.log, а также отсутствие задач в очереди, просмотреть которую пользователь может при помощи команды qstst.

Для прерывания цепочки расчетов в данном случае можно воспользоваться стандартными командами ps и kill. Для определения идентификатора процесса (PID), пользователь может использовать следующую команду:


ps ax | grep pcg.rundir
Вывод команды будет примерно следующим:
1632 pts/3 S 0:00 /bin/bash ./pcg.rundir 2 in out

1692 pts/4 S+ 0:00 grep pcg.rundir


Как можно видеть, первая строка соответсвует запущенному скрипту. Первое число в каждой строке и есть PID процесса. В данном случае это 1632. Теперь, зная PID, пользователь может завершить процесс командой kill:
kill 1632
Теперь цепочка расчетов прервана, текущий расчет будет завершен, а новый запущен не будет. Прервать цепочку расчетов в случае обычного (не фонового) запуска можно, нажав комбинацию клавиш Ctrl + C во время ожидания окончания текущего расчета.
Получить краткую справку по скриптам pcg.run и pcg.rundir можно, запустив их без указания параметров.

Для получения более подробной информации по использованию PCGAMESS обращайтесь к соответствующему руководству на официальном сайте http://classic.chem.msu.su/gran/gamess.

4.8.2 ANSYS

Пользователям вычислительного кластера доступен ANSYS - программный пакет конечноэлементного анализа, решающий задачи в различных областях инженерной деятельности (прочность конструкций, термодинамика, динамика жидкостей и газов, электромагнетизм), включая связанный междисциплинарный анализ.

Расчет производится в пакетном режиме, т.е. без интерактивного участия пользователя. Для этого необходимо подготивить входной файл и поместить его в отдельную директорию.

Для запуска расчета пользователю следует использовать специально разработанный скрипт:


ansys.run [option] [output_file] [walltime]
где option может содержать один или несколько ключей:

-d или –debug – ключ, указывающий на необходимость вывода дополнительной отладочной информации (выходной файл и файл ошибки torque, файл .qsub и т.п.). Следует использовать в случае возникновения проблем для диагностики;

-p или --product – указывает ANSYS PRODUCT NAME (имя продукта). Список доступных продуктов можно посмотреть командой ansys_licinfo. По умолчанию используется aa_r (ANSYS Academic Research);

-j или --jobname – указывает имя задания. По умолчанию используется имя входного файла;

N – количество процессоров, на которых будет запущен расчет;

input_file – имя входного файла;

output_file – имя выходного файла;

walltime – максимальное время выполнения расчета.


Скрипт заботится о формировании корректного файла задачи и ставит задачу в очередь. Это означает, что пользователь может управлять запущенным расчетом, используя команды системы управления заданиями. Например, посмотреть состояние задания командой qstat, отменить задание командой qdel и т.д.

Если имя выходного файла не указано, используется имя входного файла без расширения, к которому добавляется расширение out. Например, запуск программы на двух процессорах:


ansys.run 2 input.in
Максимальное время расчета по умолчанию составляет 24 часа. Если для выполнения расчета необходимо больше времени, необходимо явно указать время в формате ЧЧ:ММ:СС (например 48:10:00 – 48 часов, 10 минут).

Пользователю ЗАПРЕЩАЕТСЯ запуск даже небольших расчетов ANSYS в обход системы управления заданиями. Это во-первых повлечет сильное замедления расчета, поскольку задача может запуститься на процессоре, уже занятым вычислениями, во-вторых приведет к нарушению нормальной работы других пользователей или всего вычислительного кластера. Если в скрипте ansys.run отсутствует необходимая функциональность, пользователь должен обратиться к администратору кластера.


4.8.3 GROMACS

Пользователям вычислительного кластера доступно программное обеспечение для проведения расчетов молекулярной динамики GROMACS. Программная система установлена в директории /share/GROMACS, скомпилирована для запуска с помощью MPI-дистрибутива OpenMPI (/share/openmpi).

Пример скрипта запуска:
#!/bin/bash

#PBS -l nodes=3:ppn=2,mem=500mb,walltime=88:30:00

#PBS -S /bin/bash

#PBS -r n

#PBS -o out

#PBS -e err

#PBS -N gromacs

#PBS -q para

cd /home/test/work

/share/openmpi/bin/mpirun -np 6 /share/GROMACS/bin/mdrun -v -s /path/lp300.tpr -o /path/lp300.trr -c /path/lp100.pdb


Подробнее об использовании пакета GROMACS читайте на официальном сайте http://www.gromacs.org.
4.8.4 FFTW

Библиотека FFTW предназначена для вычисления быстрого преобразования Фурье. Библиотека включает модули параллельной обработки данных, что позволяет с успехом использовать ее на вычислительном кластере.

Библиотека FFTW установлена в директории /share/fftw. Компиляция программы с использованием FFTW выполняется следующим образом:
mpicc -c -I/share/fftw/include myprog.c

mpicc myprog.o -L/share/fftw/lib -lfftw –lrfftw -lfftw_mpi -lfftw_mpi –lm


где –lfftw подключает стандартную библиотеку FFTW для работы с комплексными числами, -lrfftw позволяет работать с действительными числами, -lfftw_mpi и –lrfftw_mpi указывает на использование модуля параллельной обработки данных для работы с комплексными и действительными числами.

На вычислительном кластере также установлена библиотека fftw3, в которой имеются некоторые новые возможности, отсутствующие в предыдущей версии, а также возможность оптимизации машинного кода для процессора с поддержкой инструкций SSE2. К сожалению, fftw3 пока не поддерживает распараллеливание с помощью MPI. Установлена fftw3 в директории /share/fftw3.

Об использовании FFTW, а также примеры программ читайте в документации пользователя на официальном сайте FFTW (http://www.fftw.org/#documentation).
4.8.5 Библиотеки численных методов BLAS (Basic Linear Algebra Solver) и LAPACK (Linear Algebra PACKage)

Пользователю вычислительного кластера доступны высокооптимизированные библиотеки численных методов ATLAS, GotoBLAS и Intel MKL (Math Kernel Library).



Библиотека ATLAS (Automatically Tuned Linear Algebra Software) разработана в Argonne National Laboratory/MCS division (http://www.netlib.org/atlas), на вычислительном кластере установлена в директории /share/lib/atlas. Базируется на уровне BLAS 3 (based on BLAS level 3). Для использования библиотеки в своих программах пользователь может подключить ее следующим образом:
gcc -o myprog -L/share/lib/atlas -latlas -lcblas -lf77blas -llapack myproc.c
Библиотека ATLAS распространяется бесплатно.
Библиотека GotoBLAS разработана Kazushige Goto в Texas Advanced Computing Center, установлена в директории /share/lib/gotoblas. Для использования библиотеки в своих программах пользователь может подключить ее следующим образом:
g77 -o myprog myprog.f -L/share/lib/gotoblas -lgoto -lpthreat
Библиотека может использоваться бесплатно в академических целях.
Библиотека Intel MKL установлена в директории /share/lib/mkl. Для использования библиотеки в своих программах пользователю следует ознакомиться с документацией в /share/lib/mkl/doc. Вот простой пример подключения библиотеки:
g77 -O2 -o prog prog.f -L/share/lib/mkl/lib/64 -lmkl_lapack -lmkl_p4 -lguide
Примечание:

Перед использованием библиотеки Intel MKL внимательно ознакомьтесь с лицензионным соглашением корпорации Intel относительно данного программного продукта на сайте http://www.intel.com. Согласно Правилам использования ресурсов вычислительного кластера, пользователь целиком и полностью отвечает за лицензионную чистоту используемых им программных средств.
Согласно предварительному тестированию, библиотека Intel MKL наилучшим образом оптимизована под архитектуру микропроцессоров Intel Xeon, установленных в узлах вычислительного кластера. Библиотека GotoBLAS также показывает неплохие результаты в плане оптимизации. Менее впечатляющие результаты показывает библиотека ATLAS. В большинстве задач использование любой из этих библиотек дает значительно лучшие результаты, по сравнению с самостоятельной реализацией пользователем данных алгоритмов. Отличие в производительности библиотек ATLAS, GotoBLAS и Intel MKL сравнительно невелико. Выбор библиотеки, наиболее подходящей для нужд пользователя предоставляется самому пользователю.
5 Полезные ссылки
http://www.parallel.ru – Сайт лаборатории Параллельных информационных технологий Научно-исследовательского вычислительного центра МГУ. Большое количество информации о параллельных вычислениях. Новости, технологии, компиляторы и многое другое.

http://www.open-mpi.org - Сайт разработчиков MPI-дистрибутива OpenMPI. FAQ по использованию OpenMPI.

http://mvapich.cse.ohio-state.edu - Сайт разработчиков MPI-дистрибутивов MVAPICH и MVAPICH2. Документация по использованию MVAPICH и MVAPICH2.

http://classic.chem.msu.su/gran/gamess - Сайт разработчика программы расчетов химии PCGAMESS.

http:// www.fftw.org – Сайт разработчиков библиотеки быстрый преобразований Фурье FFTW.



http://www.clusterresources.com/pages/products/torque-resource-manager.php - Страница разработчиков менеджера ресурсов Torque. Большое количество документации по настройке и использованию Torque.

http://math-atlas.sourceforge.net - Страница разработчиков библиотеки ATLAS (Automatically Tuned Linear Algebra Software).

http://www.tacc.utexas.edu/resources/software/#blas - Страница разработчиков библиотеки GotoBLAS.

http://www.intel.com - Официальный сайт корпорации Intel, производителя микропроцессоров и комплектующих, компиляторов языков программирования СИ++ и Фортран-90, библиотеки MKL и др. программного обеспечения для проведения параллельных вычислений.

http://www.gromacs.org - Официальный сайт программной системы проведения расчетов молекулярной динамики GROMACS.

http://www.ansys.com – Официальный сайт компании ANSYS Inc, производителя программного пакета ANSYS.

http://top500.org – Сайт, публикующий список 500 самых производительных суперкомпьютеров в мире.
Разработчик руководства:
Заведующий сектором

высокопроизводительных вычислений Гафаров Р.И.


База данных защищена авторским правом ©shkola.of.by 2016
звярнуцца да адміністрацыі

    Галоўная старонка