Программа независимых заданий на локальном кластере

Создание и выполнение заданий с локальным кластером

Некоторые задания требуют большего контроля, чем функциональность, предлагаемая такими высокоуровневыми конструкциями, как spmd и parfor. В таких случаях приходится программировать все шаги для создания и выполнения задания. Использование локального кластера (или локального планировщика) на вашем компьютере позволяет вам создавать и тестировать задания без использования ресурсов сетевого кластера. Распределение задач среди работников, работающих на клиентской машине, не позволяет повысить эффективность. Поэтому эта функция предусмотрена в основном для разработки кода, проверки и отладки.

Примечание

Работники, работающие в локальном кластере на Microsoft® Windows® операционная система может отображать Simulink® графика и выход от определенных функций, таких как uigetfile и uigetdir. (С другими платформами или планировщиками рабочие не могут отображать графический выход.) Такое поведение может быть удалено в будущем релизе.

В этом разделе подробно описываются шаги типового сеанса программирования с программным обеспечением Parallel Computing Toolbox™ с использованием локального кластера:

Объекты, используемые сеансом клиента для взаимодействия с кластером, являются только ссылками на данные в месте хранения задания кластера, а не в сеансе клиента. После создания заданий и задач можно закрыть сеанс клиента и перезапустить его, а ваше задание по-прежнему находится в месте хранения. Вы можете найти существующие задания, используя findJob функцию или Jobs свойство объекта кластера.

Создайте объект кластера

Вы используете parcluster функция для создания объекта в локальном MATLAB® сеанс, представляющий локальный планировщик.

parallel.defaultClusterProfile('local');
c = parcluster();

Создание задания

Вы создаете задание с createJob функция. Этот оператор создает задание в месте хранения задания кластера и создает объект задания job1в сеансе клиента. Если вы опускаете точку с запятой в конце команды, она отображает некоторую информацию о задании.

job1 = createJob(c)
 Job

    Properties:

                   ID: 2
                 Type: Independent
             Username: eng864
                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: []

The State свойство задания pending. Это означает, что задание еще не отправлено (поставлено в очередь) для выполнения, поэтому теперь можно добавить к нему задачи.

Теперь отображение планировщика указывает на существование вашего задания, которое находится в ожидании, как показано в этом частичном списке:

c
 Local Cluster
 
   Associated Jobs

                  Number Pending: 1
                   Number Queued: 0
                  Number Running: 0
                 Number Finished: 0

Создание задач

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

createTask(job1, @rand, 1, {{3,3} {3,3} {3,3} {3,3} {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        

Отправить задание в кластер

Чтобы запустить свое задание и оценить его задачи, вы отправляете задание в кластер с submit функция.

submit(job1)

Локальный планировщик запускает рабочие места на вашей машине и распределяет задачи job1 этим работникам для оценки.

Получение результатов задания

Результаты каждой оценки задачи хранятся в объекте задачи 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

После завершения задания можно повторить команды, чтобы проверить обновленное состояние кластера, задания и объектов задачи:

c
job1
job1.Tasks

Поведение локальных кластеров

Локальный планировщик запускается в клиентском сеансе MATLAB, поэтому вы не должны запускать какой-либо отдельный процесс планировщика или планировщика заданий MATLAB для локального планировщика. Когда вы отправляете задание в локальный кластер, планировщик запускает работник MATLAB для каждой задачи в задании. Вы можете сделать это для столько работников, сколько разрешено локальным профилем. Если у вашего задания больше задач, чем разрешенных работников, планировщик ожидает выполнения одной из текущих задач, прежде чем запускать другой работника MATLAB, чтобы оценить следующую задачу. Можно изменить количество разрешенных работников в local профиль кластера. Если не задано, по умолчанию требуется запустить только столько рабочих процессов, сколько вычислительных ядер на машине.

Локальный кластер не имеет взаимодействия ни с каким другим планировщиком или планировщиком заданий MATLAB, ни с любыми другими работниками, которые также могут запускаться на вашем клиентском компьютере под службой mjs. Каждый из нескольких сеансов работы с MATLAB на вашем компьютере может запускать свой собственный локальный планировщик со своими собственными работниками, но эти группы не взаимодействуют друг с другом.

Когда вы завершаете сеанс клиента MATLAB, его локальный планировщик и все работники, которые выполняются, также немедленно останавливаются.