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

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

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

TheState свойством задания является 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, его локальный планировщик и любых рабочих, которые, оказывается, запускают также остановку сразу.