В этом разделе подробно описываются шаги типового сеанса программирования с программным обеспечением Parallel Computing Toolbox™ с использованием поддерживаемого планировщика заданий в кластере. Поддерживаемые планировщики включают MATLAB® Планировщик заданий, платформа LSF®(Средство совместного использования нагрузок), Майкрософт® Windows HPC Server (включая CCS), PBS Pro®, или планировщик КРУТЯЩИЙ МОМЕНТ.
В этом разделе предполагается, что у вас есть планировщик заданий MATLAB, LSF®, PBS Pro, TORQUE или Windows HPC Server (включая CCS и HPC Server 2008) планировщик, установленный и работающий в сети. Со всеми этими типами кластеров основная последовательность программирования заданий одинаковая:
Обратите внимание, что объекты, которые сеанс клиента использует для взаимодействия с планировщиком заданий MATLAB, являются только ссылками на данные, которые фактически содержатся в планировщике заданий MATLAB, а не в сеансе клиента. После создания заданий и задач можно закрыть сеанс клиента и перезапустить его, а ваше задание все еще хранится в Планировщике заданий MATLAB. Вы можете найти существующие задания, используя findJob
функцию или Jobs
свойство объекта кластера планировщика заданий MATLAB.
Профиль кластера определяет тип кластера, который будет использоваться, и его конкретные свойства. В профиле вы задаете, сколько работников может получить доступ к заданию, где хранятся данные задания, где осуществляется доступ к MATLAB и многим другим свойствам кластера. Точные свойства определяются типом кластера.
Шаг в этом разделе предполагает, что профиль с именем MyProfile определяет кластер, который вы хотите использовать, со всеми необходимыми настройками свойств. При правильном использовании профиля остальная часть программирования является одинаковой, независимо от типа кластера. После определения или импорта профиля можно задать его как профиль по умолчанию в графическом интерфейсе пользователя Profile Manager или с помощью команды:
parallel.defaultClusterProfile('MyProfile')
Несколько примечаний, касающихся различных типов кластеров и их свойств:
Примечания
В общей файловой системе всем узлам требуется доступ к папке, указанной в JobStorageLocation
объекта кластера свойство.
Поскольку для Windows HPC Server требуется общая файловая система, все узлы требуют доступа к папке, указанной в JobStorageLocation
объекта кластера свойство.
В общей файловой системе клиенты MATLAB на многих компьютерах могут получить доступ к одним и тем же данным о заданиях в сети. Свойства определенного задания или задачи должны задаваться одновременно только с одного клиентского компьютера.
Когда вы используете планировщик LSF в несветвленной файловой системе, планировщик может сообщить, что задание находится в законченном состоянии, хотя планировщик LSF, возможно, еще не завершил передачу файлов задания.
Вы используете parcluster
функция для идентификации кластера и создания объекта, представляющего кластер в локальном Сеансе работы с MATLAB.
Чтобы найти конкретный кластер, используйте профиль кластера, соответствующий свойствам кластера, который вы хотите использовать. В этом примере MyProfile
- имя профиля, определяющего конкретный кластер.
c = parcluster('MyProfile');
MJS Cluster Properties Name: my_mjs Profile: MyProfile Modified: false Host: node345 Username: mylogin NumWorkers: 1 NumBusyWorkers: 0 NumIdleWorkers: 1 JobStorageLocation: Database on node345 ClusterMatlabRoot: C:\apps\matlab OperatingSystem: windows AllHostAddresses: 0:0:0:0 SecurityLevel: 0 (No security) HasSecureCommunication: false Associated Jobs Number Pending: 0 Number Queued: 0 Number Running: 0 Number Finished: 0
Вы создаете задание с createJob
функция. Несмотря на то, что эта команда выполняется в сеансе клиента, она фактически создает задание на кластере c
, и создает объект задания, job1
, в сеансе клиента.
job1 = createJob(c)
Job Properties: ID: 1 Type: Independent Username: mylogin State: pending SubmitTime: StartTime: Running Duration: 0 days 0h 0m 0s AutoAttachFiles: true Auto Attached Files: List files AttachedFiles: {} AdditionalPaths: {} Associated Tasks: Number Pending: 0 Number Running: 0 Number Finished: 0 Task ID of Errors: []
Обратите внимание, что задание State
свойство pending
. Это означает, что задание еще не поставлено в очередь для выполнения, поэтому теперь можно добавить к нему задачи.
Теперь отображение кластера включает одно ожидающее задание, как показано на этом частичном объявлении:
c
Associated Jobs Number Pending: 1 Number Queued: 0 Number Running: 0 Number Finished: 0
Можно перенести файлы в рабочий процесс при помощи AttachedFiles
свойство объекта задания. Для получения дополнительной информации смотрите Разделить код с работниками.
После создания задания можно создать задачи для задания с помощью createTask
функция. Задачи определяют функции, которые должны оцениваться работниками во время выполнения задания. Часто задачи задания все идентичны. В этом примере каждая задача сгенерирует матрицу 3 на 3 случайных чисел.
createTask(job1, @rand, 1, {3,3}); createTask(job1, @rand, 1, {3,3}); createTask(job1, @rand, 1, {3,3}); createTask(job1, @rand, 1, {3,3}); createTask(job1, @rand, 1, {3,3});
The Tasks
свойство job1
теперь является матрицей объектов задачи 5 на 1.
job1.Tasks
ID State FinishTime Function Error ----------------------------------------------------- 1 1 pending @rand 2 2 pending @rand 3 3 pending @rand 4 4 pending @rand 5 5 pending @rand
Кроме того, можно создать пять задач с одним вызовом createTask
путем предоставления массива ячеек из пяти массивов ячеек, определяющего входные параметры для каждой задачи.
T = createTask(job1, @rand, 1, {{3,3} {3,3} {3,3} {3,3} {3,3}});
В этом случае T
является матрицей объектов задачи 5 на 1.
Чтобы запустить свое задание и оценить его задачи, вы отправляете задание в очередь заданий с submit
функция.
submit(job1)
Менеджер по работе распределяет задачи job1
своим зарегистрированным работникам для оценки.
Каждый работник выполняет следующие шаги для оценки задачи:
Получение AttachedFiles
и AdditionalPaths
с работы. Поместите файлы и измените путь соответственно.
Запустите jobStartup
функция при первой оценке задачи для этого задания. Вы можете задать эту функцию в AttachedFiles
или AdditionalPaths
. При использовании планировщика заданий MATLAB, если тот же рабочий процесс оценивает последующие задачи для этого задания, jobStartup
не запускается между задачами.
Запустите taskStartup
функция. Вы можете задать эту функцию в AttachedFiles
или AdditionalPaths
. Это выполняется перед каждой оценкой задачи, выполняемой работником, поэтому это может происходить несколько раз для работника для каждого задания.
Если рабочий является частью формирования нового параллельного пула, запустите poolStartup
функция. (Это происходит при выполнении parpool
или при запуске других типов заданий, которые формируют и используют параллельный пул, таких как batch
.)
Получите функцию задачи и аргументы для оценки.
Оцените функцию задачи, поместив результат в OutputArguments
задачи свойство. Любая информация об ошибке поступает в
Error
задачи свойство.
Запустите taskFinish
функция.
Результаты оценки каждой задачи хранятся в OutputArguments
этого объекта задачи свойство как массив ячеек. Используйте функцию
fetchOutputs
для извлечения результатов из всех задач в задании.
wait(job1) results = fetchOutputs(job1);
Отображение результатов каждой задачи.
results{1:5}
0.9501 0.4860 0.4565 0.2311 0.8913 0.0185 0.6068 0.7621 0.8214 0.4447 0.9218 0.4057 0.6154 0.7382 0.9355 0.7919 0.1763 0.9169 0.4103 0.3529 0.1389 0.8936 0.8132 0.2028 0.0579 0.0099 0.1987 0.6038 0.0153 0.9318 0.2722 0.7468 0.4660 0.1988 0.4451 0.4186 0.8462 0.6721 0.6813 0.5252 0.8381 0.3795 0.2026 0.0196 0.8318
Поскольку все данные заданий и задач находятся в месте хранения заданий кластера, эти объекты продолжают существовать, даже если сеанс клиента, который их создал, закончился. В следующих разделах описывается, как получить доступ к этим объектам и как удалить их навсегда:
Когда вы закрываете сеанс клиента программного обеспечения Parallel Computing Toolbox, все объекты в рабочей области очищаются. Однако объекты в программном обеспечении MATLAB Parallel Server™ или других ресурсах кластера остаются в силе. Когда сеанс клиента заканчивается, теряются только локальные ссылки объектов, а не фактические данные задания и задачи в кластере.
Поэтому, если вы отправили задание в очередь задач кластера для выполнения, можно выйти из сеанса клиента MATLAB, и задание будет выполнено кластером. Результаты задания можно получить позже в другом сеансе клиента.
Сеанс клиента программного обеспечения Parallel Computing Toolbox может получить доступ к любому из объектов программного обеспечения MATLAB Parallel Server, независимо от того, создали ли эти объекты текущий сеанс клиента или другой сеанс клиента.
Вы создаете объекты кластера в клиентском сеансе с помощью parcluster
функция.
c = parcluster('MyProfile');
Когда у вас есть доступ к кластеру по объекту c
можно создать объекты, которые ссылаются на все задания, содержащиеся в этом кластере. Задания доступны в Jobs
объекта кластера свойство, которое является массивом объектов задания:
all_jobs = c.Jobs
Можно индексировать через массив all_jobs
для поиска определенного задания.
Кроме того, можно использовать findJob
функция для поиска в кластере любых заданий или конкретного задания, определенных любыми его свойствами, такими как State
.
all_jobs = findJob(c); finished_jobs = findJob(c,'State','finished')
Эта команда возвращает массив объектов задания, которые ссылаются на все законченные задания в кластере c
.
При перезапуске сессии клиента вы теряете настройки любых коллбэков свойств (для примера FinishedFcn
свойство) для заданий или задач. Эти свойства обычно используются для получения уведомлений в сеансе клиента об изменениях состояния их объектов. Когда вы создаете объекты в новом сеансе клиента, которые ссылаются на существующие задания или задачи, необходимо сбросить эти свойства коллбэка, если вы хотите использовать их.
Задания в кластере продолжают существовать даже после их завершения и после остановки и перезапуска планировщика заданий MATLAB. Способы окончательного удаления заданий из кластера описаны в следующих разделах:
Удаление выбранных объектов. Из командной строки в клиентском сеансе MATLAB можно вызвать delete
функция для любого задания или объекта задачи. Если вы удаляете задание, вы также удаляете все задачи, содержащиеся в этом задании.
Например, найдите и удалите все готовые задания в кластере, которые принадлежат пользователю joep
.
c = parcluster('MyProfile') finished_jobs = findJob(c,'State','finished','Username','joep') delete(finished_jobs) clear finished_jobs
The delete
функция навсегда удаляет эти задания из кластера. clear
функция удаляет ссылки на объекты из локального рабочего пространства MATLAB.
Запустите планировщик заданий MATLAB из чистого состояния. Когда запускается MATLAB Job Scheduler, по умолчанию он запускается так, чтобы возобновить свой прежний сеанс со всеми заданиями, неповрежденными. Кроме того, планировщик заданий MATLAB может начинаться с чистого состояния, при этом удаляется вся его прежняя история. Начиная с чистого состояния, все задание и данные задачи постоянно удаляются из планировщика заданий MATLAB с заданным именем на конкретном узле.
Как функция администрирования сети, -clean
флаг startjobmanager
скрипт описан в разделе Start in a Clean State (MATLAB Parallel Server) Руководства системного администратора MATLAB Parallel Server.