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

Создайте и запущенные задания

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

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

  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

Функция delete постоянно удаляет эти задания из кластера. Функция clear удаляет ссылки на объект из локального рабочего пространства MATLAB.

Запустите Планировщик Задания MATLAB с Чистого состояния.  Когда Планировщик Задания MATLAB запускается, по умолчанию он запускается так, чтобы он возобновил свой прежний сеанс со всеми неповрежденными заданиями. Также Планировщик Задания MATLAB может начать с чистого состояния со всей своей прежней удаленной историей. Запуск с чистого состояния постоянно удаляет все задание и данные о задаче из Планировщика Задания MATLAB указанного имени на конкретном хосте.

Как функция администрирования сети, флаг -clean скрипта startjobmanager описан в Запуске в Чистом состоянии (MATLAB Parallel Server) в Руководстве Системного администратора MATLAB Parallel Server.

Для просмотра документации необходимо авторизоваться на сайте