BC/NW 2007, №2, (11) :10.3
опыт использования средств Параллельного программирования в MATLAB на кластерных системах
Чернецов А.М.
(Москва, Московский энергетический институт (технический университет), Вычислительный центр имени А.А. Дородницына Российской академии наук, Россия)
В данном докладе обсуждается опыт использования MATLAB для параллельных вычислений на кластерных системах. Обсуждаются проблемы лицензирования, работы с произвольными версиями MPI и совместимостью с существующими системами управления заданиями (СУПЗ).
За последние годы, различными научными коллективами, были созданы многочисленные пакеты расширений (Toolbox) MATLAB, реализующих какую-либо функциональность распределенных вычислений. С их обзором можно ознакомиться в [1]. Эти пакеты в своей реализации использовали различные способы (парадигмы):
- Использование модели передачи сообщений.
- Работа с общей памятью.
- Использование специальных процедур, с помощью которых производится обмен данных между последовательными сессиями MATLAB.
- Перекомпиляция кода MATLAB на С и создание параллельного кода уже для программ С.
В зависимости от реализации, при использовании этих пакетов расширений, требовалось иметь разное количество лицензий на запуск клиентских сессий и toolbox MATLAB. Пакеты расширений для параллельного программирования сторонними производителями начали разрабатываться в то время, когда необходимость в параллельном программировании для MATLAB не являлась критической. С тех пор, в связи с необходимостью расчета более сложных задач, эта необходимость резко возросла. Некоторые toolbox работали только под определенную операционную систему, чаще всего - под Unix. Поэтому использование единого подхода для всех операционных систем стало необходимым.
Особо следует отметить пакет MPITB [2], написанный в 2000 г. и получивший достаточно широкое распространение для кластерных систем. В нем реализовано применение функций MPI в программах MATLAB. Последняя на момент написания работы версия - для MATLAB 7.0.1 R14SP1 и библиотеки LAM MPI v. 7.1.1 - датируется 2005 годом. Основными его недостатками являются:
- Необходимость получения лицензии на каждое выполняемое ядро.
- Отсутствие официальной поддержки от компании MathWorks, постоянно развивающей систему MATLAB.
- Исключение работы пакета с операционными системами, отличающимися от ОС Unix.
Данный пакет был импортирован в среду Windows и реализацию MPICH2. Его дистрибутивы можно скачать с [3]. Последняя версия от 02.2006 работает с MATLAB v. 7.1.0.246(R14) Service Pack 3, т.е. также с устаревшей версией MATLAB. Учитывая все вышеперечисленное, реализация подобных пакетов расширений уже самой фирмой MathWorks выглядит вполне логичным шагом.
Проблема лицензирования решилась просто: на вычислительном узле после установки лицензии MDCE [4] могут быть установлены все toolbox MATLAB. Те возможности, которыми можно воспользоваться в данный момент, зависят от клиента – лицензии на какие toolbox имеются у него на машине. Лицензия MDCE ограничивает лишь общее число запускаемых процессов, не более того.
Что касается функционирования межпроцессного взаимодействия, то для этого был разработан toolbox Distributed computing toolbox (DCT) [5].
Перейдем к вопросу использования различных реализаций MPI. Последняя на момент написания версия MATLAB 2007a поставляется с реализацией MPI-2 mpich2 v. 1.0.3. Вместо стандартной библиотеки можно подключить собственную реализацию. Для этого она должна удовлетворять следующим условиям:
- Быть собранной как динамическая библиотека.
- Поддерживать все функции MPI-1.
- Поддерживать пустые аргументы в MPI_Init, в соответствии с разделом 4.2 стандарта MPI-2.
- Иметь заголовочный файл mpi.h, полностью совместимый с mpich2.
- Для работы встроенного планировщика Job Manager от MathWorks дополнительно требуется поддержка функций MPI-2 MPI_Open_port, MPI_Comm_accept, MPI_Comm_connect.
Следующий рассматриваемый вопрос – интеграция заданий MATLAB в действующие на кластерах СУПЗ. MATLAB Distributing Computing Engine поддерживает следующие планировщики: встроенный от Mathworks (Job Manager), Windows CCS - планировщик от Microsoft для Windows Server 2003 Cluster Edition, LSF, mpiexec либо планировщик общего вида. Планировщиком общего вида может выступать, например, планировщик системы PBS, Condor или Sun Grid Engine. Среди преимуществ встроенного планировщика от Mathworks можно выделить:
- поддержку контрольных точек,
- обеспечение автоматической доставки данных в рабочие процессы ( [4, 5, 7]).
Основным его и весьма существенным недостатком является невозможность совместного использования с существующими на многопроцессорном комплексе СУПЗ.
При использовании планировщиков LSF и Windows CCS также возможно обеспечение автоматической доставки данных в рабочие процессы.
В данном докладе рассматривается совместная работа с СУПЗ PBS.
На рис. 1 представлена общая схема работы с произвольной задачей.
Рис. 1. Общая схема использования планировщика общего вида
Клиент через планировщик Scheduler запрашивает ресурсы рабочих процессов (workers). В его качестве может выступать как узел кластера, так и процессор SMP-системы. Все взаимодействия происходят через запущенную на каждом узле службу MDCE.
Запрашиваем доступ к объекту планировщика sched и устанавливаем его свойства:
sched = findResource('scheduler', 'type', 'generic')
set(sched, 'DataLocation', '\\apps\data\project_101')
set(sched, 'HasSharedFilesystem', true)
set(sched, 'ClusterMatlabRoot', '\\apps\matlab\')
set(sched, 'SubmitFcn', @mysubmitfunc)
Далее необходимо описать функции Submit и Decode для постановки задач в очередь и соответственно возвращения результатов.
В функции Submit определяются переменные
setenv('MDCE_DECODE_FUNCTION', 'pbsDecodeFunc');
% Set the other job-related environment variables:
setenv('MDCE_STORAGE_LOCATION', props.StorageLocation);
setenv('MDCE_STORAGE_CONSTRUCTOR', props.StorageConstructor);
setenv('MDCE_JOB_LOCATION', props.JobLocation);
% Ask the workers to print debug messages by default:
setenv('MDCE_DEBUG', 'true');
и производится запуск заданий через систему очередей.
В функции Decode процесс получает экспортированные средствами системы очередей значения переменных.
Более подробно с данным вопросом можно ознакомиться, прочитав содержимое файлов в каталоге $MATLABROOT/toolbox/distcomp/examples/integration/pbs.
В заключение автор выражает благодарность департаменту MathWorks компании Softline за возможность ознакомиться и протестировать технологические возможности, заложенные в MATLAB Distributing Computing Engine.
ЛИТЕРАТУРА
1. http://www.interactivesupercomputing.com/reference/parallelMatlabsurvey.php
2. http://atc.ugr.es/javier-bin/mpitb_eng
3. http://www.wakun.com/download.htm
4. http://www.mathworks.com/access/helpdesk/help/pdf_doc/mdce/mdce.pdf
5. http://www.mathworks.com/access/helpdesk/help/pdf_doc/distcomp/distcomp.pdf
6. http://www.mathworks.com/access/helpdesk/help/toolbox/distcomp/bqur7ev-35.html
7. Оленев Н.Н., Печенкин Р.В, Чернецов А.М. “Параллельное программирование в MATLAB”, М.: ВЦ РАН, 2007, 117 с.