Этот раздел детализирует шаги типичного сеанса программирования с программным обеспечением Parallel Computing Toolbox™ с помощью поддерживаемого планировщика задания на кластере. Поддерживаемые планировщики включают Планировщик MATLAB® Job, Platform LSF® (Средство Разделения нагрузки), Сервер Microsoft® Windows HPC (включая CCS), PBS Pro® или планировщик КРУТЯЩЕГО МОМЕНТА.
Этот раздел принимает, что у вас есть Планировщик Задания MATLAB, LSF®, PBS Pro, КРУТЯЩИЙ МОМЕНТ или Windows HPC Server (включая CCS и Сервер HPC 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) в Руководстве Системного администратора MATLAB Parallel Server.