В этом разделе подробно описаны шаги обычной сессии программирования с программным обеспечением Parallel Computing Toolbox™ с использованием поддерживаемого планировщика заданий в кластере. Поддерживаемые планировщики включают в себя планировщик заданий MATLAB ®, Platform LSF ® (средство разделения нагрузки), сервер Microsoft ® Windows HPC Server (включая CCS), PBS Pro ® или планировщик TORQUE.
В этом разделе предполагается, что в сети установлен и запущен планировщик MATLAB Job Scheduler, LSF ®, PBS Pro, TORQUE или Windows HPC Server (включая CCS и HPC Server 2008). Для всех этих типов кластеров основная последовательность программирования заданий одинакова:
Обратите внимание, что объекты, используемые клиентским сеансом для взаимодействия с планировщиком заданий MATLAB, являются только ссылками на данные, которые фактически содержатся в планировщике заданий MATLAB, а не в сеансе клиента. После создания заданий и задач можно закрыть сеанс клиента и перезапустить его, а задание по-прежнему сохраняется в планировщике заданий MATLAB. Существующие задания можно найти с помощью findJob функции или Jobs свойства объекта кластера планировщика заданий MATLAB.
Профиль кластера определяет тип используемого кластера и его специфические свойства. В профиле определяется, сколько работников может получить задание, где хранятся данные задания, где осуществляется доступ к MATLAB и многие другие свойства кластера. Точные свойства определяются типом кластера.
На шаге в этом разделе предполагается, что профиль с именем MyProfile идентифицирует кластер, который вы хотите использовать, со всеми необходимыми параметрами свойств. При правильном использовании профиля остальная часть программирования одинакова, независимо от типа кластера. После определения или импорта профиля его можно задать в качестве профиля по умолчанию в графическом интерфейсе диспетчера профилей или с помощью команды:
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}); 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
delete функция окончательно удаляет эти задания из кластера. clear удаляет ссылки на объекты из локальной рабочей области MATLAB.
Запустите планировщик заданий MATLAB из чистого состояния. При запуске планировщика заданий MATLAB он по умолчанию запускается так, что возобновляет свой прежний сеанс со всеми целыми заданиями. Кроме того, планировщик заданий MATLAB может начинаться из чистого состояния с удалением всей прежней истории. Запуск из чистого состояния навсегда удаляет все данные задания и задачи из планировщика заданий MATLAB с указанным именем на определенном хосте.
В качестве функции сетевого администрирования -clean флаг startjobmanager сценарий описан в разделе Запуск в чистом состоянии (MATLAB Parallel Server) в Руководстве системного администратора Parallel Server MATLAB.