Программные независимые задания для поддерживаемого планировщика

Создание и выполнение заданий

В этом разделе подробно описываются шаги типового сеанса программирования с программным обеспечением 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 своим зарегистрированным работникам для оценки.

Каждый работник выполняет следующие шаги для оценки задачи:

  1. Получение AttachedFiles и AdditionalPaths с работы. Поместите файлы и измените путь соответственно.

  2. Запустите jobStartup функция при первой оценке задачи для этого задания. Вы можете задать эту функцию в AttachedFiles или AdditionalPaths. При использовании планировщика заданий MATLAB, если тот же рабочий процесс оценивает последующие задачи для этого задания, jobStartup не запускается между задачами.

  3. Запустите taskStartup функция. Вы можете задать эту функцию в AttachedFiles или AdditionalPaths. Это выполняется перед каждой оценкой задачи, выполняемой работником, поэтому это может происходить несколько раз для работника для каждого задания.

  4. Если рабочий является частью формирования нового параллельного пула, запустите poolStartup функция. (Это происходит при выполнении parpool или при запуске других типов заданий, которые формируют и используют параллельный пул, таких как batch.)

  5. Получите функцию задачи и аргументы для оценки.

  6. Оцените функцию задачи, поместив результат в OutputArguments задачи свойство. Любая информация об ошибке поступает в Error задачи свойство.

  7. Запустите 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.

Сброс свойств коллбэка (только для планировщика заданий MATLAB)

При перезапуске сессии клиента вы теряете настройки любых коллбэков свойств (для примера 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.