exponenta event banner

Независимые от программы задания на локальном кластере

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

Некоторые задания требуют большего контроля, чем функциональные возможности высокоуровневых конструкций, таких как 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: []

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}});

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 немедленно прекращается работа локального планировщика и всех рабочих.