Этот раздел детализирует шаги типичного сеанса программирования с программным обеспечением Parallel Computing Toolbox™ с помощью поддерживаемого планировщика задания в кластере. Поддерживаемые планировщики включают MATLAB® Планировщик задания, платформа LSF® (Средство разделения нагрузки), Microsoft® Windows HPC Server (включая 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');
Вы создаете задание с createJob
функция. Несмотря на то, что эта команда выполняется на клиентском сеансе, она на самом деле создает задание в кластере, c
, и создает объект задания, job1
, на клиентском сеансе.
job1 = createJob(c)
Job Properties: ID: 1 Type: independent Username: mylogin State: pending SubmitDateTime: StartDateTime: RunningDuration: 0 days 0h 0m 0s NumThreads: 1 AutoAttachFiles: true Auto Attached Files: List files AttachedFiles: {} AutoAddClientPath: false AdditionalPaths: {} Associated Tasks: Number Pending: 0 Number Running: 0 Number Finished: 0 Task ID of Errors: [] Task ID of Warnings: []
Обратите внимание на то, что State
задания свойством является
pending
. Это означает, что задание еще не было поставлено в очередь для выполнения, таким образом, можно теперь добавить задачи в него.
Отображение кластера теперь включает одно незаконченное задание:
c
MJS Cluster Properties: Name: my_mjs Profile: MyProfile Modified: false Host: myhost.mydomain.com Username: benwoods NumWorkers: 1 NumThreads: 1 NumBusyWorkers: 0 NumIdleWorkers: 1 JobStorageLocation: Database on myhost.mydomain.com ClusterMatlabRoot: C:\apps\matlab SupportedReleases: R2021b OperatingSystem: windows AllHostAddresses: 0:0:0:0 SecurityLevel: 0 (No security) HasSecureCommunication: false RequiresClientCertificate: false RequiresOnlineLicensing: false 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
5x1 Task array: ID State FinishDateTime Function Errors Warnings ------------------------------------------------------------------------- 1 1 pending rand 0 0 2 2 pending rand 0 0 3 3 pending rand 0 0 4 4 pending rand 0 0 5 5 pending rand 0 0
В качестве альтернативы можно создать эти пять задач с одним вызовом 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.