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

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

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

Примечание

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

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

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

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

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

c = parcluster('local');

Создайте задание

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

job1 = createJob(c)
 Job

    Properties: 

                   ID: 1
                 Type: independent
             Username: mylogin
                State: pending
       SubmitDateTime: 
        StartDateTime: 
     RunningDuration: 0 days 0h 0m 0s
           NumThreads: 1

      AutoAttachFiles: true
  Auto Attached Files: List files
        AttachedFiles: {}
    AutoAddClientPath: false
      AdditionalPaths: {}

    Associated Tasks: 

       Number Pending: 0
       Number Running: 0
      Number Finished: 0
    Task ID of Errors: []
  Task ID of Warnings: []

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

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

c
 Local Cluster

    Properties: 

                   Profile: local
                  Modified: false
                      Host: myhost
                NumWorkers: 6
                NumThreads: 1

        JobStorageLocation: C:\Users\mylogin\AppData\Roaming\MathWorks\MATLAB\local_cluster_jobs\R2021b
   RequiresOnlineLicensing: false

    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
 5x1 Task array:
 
         ID        State              FinishDateTime  Function  Errors  Warnings
       -------------------------------------------------------------------------
    1     1      pending                                  rand       0         0
    2     2      pending                                  rand       0         0
    3     3      pending                                  rand       0         0
    4     4      pending                                  rand       0         0
    5     5      pending                                  rand       0         0

Представьте задание кластеру

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

submit(job1)

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

Выберите результаты задания

Результаты каждой оценки задачи хранятся в объекте задачи OutputArguments свойство как массив ячеек. После ожидания задания, чтобы завершиться, используйте функцию fetchOutputs получать результаты всех задач в задании.

wait(job1)
results = fetchOutputs(job1);

Отобразите результаты каждой задачи.

results{1:5}
ans =

    0.1349    0.5332    0.2621
    0.6744    0.1150    0.9625
    0.9301    0.6540    0.8972


ans =

    0.6383    0.6509    0.4429
    0.5195    0.3018    0.3972
    0.1398    0.7101    0.7996


ans =

    0.9730    0.2934    0.6071
    0.7104    0.1558    0.5349
    0.3614    0.3421    0.4118


ans =

    0.3241    0.9401    0.1897
    0.0078    0.3231    0.3685
    0.9383    0.3569    0.5250


ans =

    0.4716    0.6667    0.7993
    0.5674    0.6959    0.9165
    0.3813    0.8325    0.8324

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

c
job1
job1.Tasks

Локальное кластерное поведение

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

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

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