exponenta event banner

партия

Выполнение сценария или функции MATLAB на работнике

Описание

пример

j = batch(script) запускает файл сценария script на работнике в кластере, указанном профилем кластера по умолчанию. (Примечание: Не включать .m расширение файла с именем сценария.) Функция возвращает j, дескриптор объекта задания, выполняющего сценарий. Файл сценария script копируется в работника.

j = batch(myCluster,script) идентичен batch(script) за исключением того, что сценарий выполняется на работнике в кластере, указанном объектом кластера myCluster.

пример

j = batch(fcn,N,{x1,...,xn}) запускает функцию fcn на работнике в кластере, указанном профилем кластера по умолчанию. Функция возвращает j, дескриптор объекта задания, выполняющего функцию. Функция вычисляется с помощью заданных аргументов, x1,...,xn, и возвращает N выходные аргументы. Файл функций для fcn копируется в работника. (Примечание: Не включать .m расширение файла с аргументом имени функции.)

пример

j = batch(myCluster,fcn,N,{x1,...,xn}) идентичен batch(fcn,N,{x1,...,xn}) за исключением того, что функция выполняется на работнике в кластере, указанном объектом кластера myCluster.

пример

j = batch(___,Name,Value) указывает параметры, изменяющие поведение задания с использованием одного или нескольких аргументов пары имя-значение. Эти параметры поддерживают пакетные функции и сценарии, если не указано иное. Используйте этот синтаксис в дополнение к любой из комбинаций входных аргументов в предыдущих синтаксисах.

Примеры

свернуть все

Использовать batch для разгрузки работы в рабочий сеанс MATLAB, который выполняется в фоновом режиме. Можно продолжать использовать MATLAB, пока выполняются вычисления.

Запуск сценария в качестве пакетного задания с помощью batch функция. По умолчанию batch использует профиль кластера по умолчанию. Проверьте профиль кластера по умолчанию на вкладке Главная страница MATLAB (MATLAB Home) в разделе Среда (Environment) в разделе Параллельный (Parallel) > Выбрать кластер по умолчанию (Select a Default Cluster). Можно также указать профиль кластера с помощью 'Profile' аргумент пары имя-значение.

job = batch('myScript');

batch не блокирует MATLAB, и можно продолжить работу во время выполнения вычислений.

Если требуется заблокировать MATLAB до завершения задания, используйте wait в объекте задания.

wait(job);

По умолчанию MATLAB сохраняет выходные данные окна команд из пакетного задания в дневник задания. Чтобы извлечь его, используйте diary функция.

diary(job)
--- Start Diary ---
n = 100

--- End Diary ---

После завершения задания извлеките результаты с помощью load функция.

load(job,'x');
plot(x)

Если необходимо загрузить все переменные в пакетное задание, используйте load функция без аргументов.

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

delete(job);
clear job

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

Дополнительные возможности с помощью batch, см. раздел Выполнение пакетного задания и доступ к файлам от работников.

Можно разгрузить вычисления для выполнения в фоновом режиме с помощью batch. Если код требует доступа к файлам, можно использовать дополнительные параметры, такие как 'AttachedFiles' или 'AdditionalPaths', чтобы сделать данные доступными. Можно закрыть или продолжить работу в MATLAB, пока выполняются вычисления, и восстановить результаты позже.

Пример подготовки

Использовать вспомогательную функцию prepareSupportingFiles для копирования необходимых данных для этого примера в текущую рабочую папку.

prepareSupportingFiles;

Текущая рабочая папка теперь содержит 4 файла: A.dat, B1.dat, B2.dat, и B3.dat.

Выполнить пакетное задание

Создание объекта кластера с помощью parcluster. По умолчанию parcluster использует профиль кластера по умолчанию. Проверьте профиль кластера по умолчанию на вкладке Главная страница MATLAB (MATLAB Home) в разделе Среда (Environment) в разделе Параллельный (Parallel) > Выбрать кластер по умолчанию (Select a Default Cluster).

c = parcluster();

Поместите код в функцию и отправьте его как пакетное задание с помощью batch. Пример пользовательской функции см. в разделе вспомогательная функция. divideData. Укажите ожидаемое число выходных аргументов и массив ячеек с входами для функции.

Обратите внимание, что при отправке файла сценария с использованием пакета MATLAB переносит все переменные рабочей области в кластер, даже если сценарий не использует их. Большая рабочая область отрицательно влияет на время передачи данных. Рекомендуется преобразовать сценарий в файл функций, чтобы избежать таких накладных расходов на связь. Это можно сделать, просто добавив строку функции в начале сценария. Чтобы уменьшить накладные расходы в этом примере, divideData определяется в файле вне этого сценария.

Если код использует параллельный пул, используйте 'Pool' аргумент пары «имя-значение» для создания параллельного пула с указанным числом работников. batch использует дополнительного работника для выполнения самой функции.

По умолчанию batch изменяет начальную рабочую папку работников на текущую папку клиента MATLAB. Может быть полезно управлять начальной рабочей папкой в работниках. Например, вы можете управлять им, если кластер использует другую файловую систему, и, следовательно, пути отличаются, например, при отправке с клиентского компьютера Windows в кластер Linux.

  • Чтобы сохранить начальную рабочую папку работников и использовать ее по умолчанию, установите 'CurrentFolder' кому '.'.

  • Чтобы изменить начальную рабочую папку, установите 'CurrentFolder' в папку по вашему выбору.

В этом примере используется параллельный пул с тремя рабочими и выбирается временное расположение для начальной рабочей папки. Использовать batch для разгрузки вычислений в divideData.

job = batch(c,@divideData,1,{}, ...
    'Pool',3, ...
    'CurrentFolder',tempdir);

batch пробеги divideData на параллельном работнике, чтобы можно было продолжить работу в MATLAB во время вычислений.

Если требуется заблокировать MATLAB до завершения задания, используйте wait в объекте задания.

wait(job);

Чтобы получить результаты, используйте fetchOutputs на объекте задания. Как divideData зависит от файла, который работники не могут найти, fetchOutputs выдает ошибку. Получить доступ к информации об ошибках можно с помощью getReport на Error имущество Task объектов в задании. В этом примере код зависит от файла, который работники не могут найти.

getReport(job.Tasks(1).Error)
ans = 
    'Error using divideData (line 4)
     Unable to read file 'B2.dat'. No such file or directory.'

Доступ к файлам от работников

По умолчанию batch автоматически анализирует код и передает необходимые файлы работникам. В некоторых случаях необходимо явно перенести эти файлы, например, при определении имени файла во время выполнения.

В этом примере: divideData обращается к вспомогательному файлу A.dat, который batch автоматически обнаруживает и передает. Функция также обращается к B1.dat, но он разрешает имя файла во время выполнения, поэтому автоматический анализ зависимостей не обнаруживает его.

type divideData.m 
function X = divideData()
    A = load("A.dat"); 
    X = zeros(flip(size(A)));
    parfor i = 1:3
        B = load("B" + i + ".dat");
        X = X + A\B;
    end
end

Если данные находятся в расположении, к которому работники могут получить доступ, можно использовать аргумент пары имя-значение 'AdditionalPaths' для указания местоположения. 'AdditionalPathsдобавляет этот путь к пути поиска MATLAB работников и делает данные видимыми для них.

pathToData = pwd;
job(2) = batch(c,@divideData,1,{}, ...
    'Pool',3, ...
    'CurrentFolder',tempdir, ...
    'AdditionalPaths',pathToData);
wait(job(2));

Если данные находятся в расположении, к которому работники не могут получить доступ, можно передать файлы работникам с помощью 'AttachedFiles' аргумент пары имя-значение. Необходимо передавать файлы, если клиент и работники не используют одну и ту же файловую систему или если кластер использует общий интерфейс планировщика в режиме без совместного использования. Дополнительные сведения см. в разделе Настройка с использованием общего интерфейса планировщика (параллельный сервер MATLAB).

filenames = "B" + string(1:3) + ".dat";
job(3) = batch(c,@divideData,1,{}, ...
    'Pool',3, ...
    'CurrentFolder',tempdir, ...
    'AttachedFiles',filenames);

Найти существующее задание

Вы можете закрыть MATLAB после отправки задания и получить результаты позже. Перед закрытием MATLAB запишите идентификатор задания.

job3ID = job(3).ID
job3ID = 25

При повторном открытии MATLAB можно найти задание с помощью findJob функция.

job(3) = findJob(c,'ID',job3ID);
wait(job(3));

Кроме того, для отслеживания задания можно использовать монитор заданий. Его можно открыть на вкладке Главная страница MATLAB в разделе Среда в меню Параллельный (Parallel) > Контролировать задания (Monitor Jobs).

Извлечение результатов и очистка данных

Для получения результатов пакетного задания используйте fetchOutputs функция. fetchOutputs возвращает массив ячеек с выходами функции, выполняемой с batch.

X = fetchOutputs(job(3))
X = 1×1 cell array
    {40×207 double}

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

delete(job)
clear job

Входные аргументы

свернуть все

Сценарий MATLAB, который должен вычисляться работником, указывается как символьный вектор или строка.

Пример: batch('aScript');

Типы данных: char | string

Кластер, указанный как parallel.Cluster объект, представляющий вычислительные ресурсы кластера. Для создания объекта используйте parcluster функция.

Пример: cluster = parcluster; batch(cluster,'aScript');

Типы данных: parallel.Cluster

Функция, вычисляемая работником, указанная как дескриптор функции или имя функции.

Пример: batch(@myFunction,1,{x,y});

Типы данных: char | string | function_handle

Количество ожидаемых выходов от оцененной функции fcn, указанное как неотрицательное целое число.

Пример: batch(@myFunction,1,{x,y});

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Входные аргументы функции fcn, задается как массив ячеек.

Пример: batch(@myFunction,1,{x,y});

Типы данных: cell

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: j = batch(@myFunction,1,{x,y},'Pool',3);

Рабочая область на работнике непосредственно перед вызовом сценария или функции, заданная как разделенная запятыми пара, состоящая из 'Workspace' и структура 1 на 1. Имена полей структуры определяют имена переменных, а значения полей назначаются переменным рабочей области. По умолчанию этот параметр имеет поле для каждой переменной в текущей рабочей области, где batch выполняется. Этот параметр поддерживает только выполнение сценариев.

Пример: workspace.myVar = 5; j = batch('aScript','Workspace',workspace);

Типы данных: struct

Профиль кластера, используемый для идентификации кластера, указанный как пара, разделенная запятыми, состоящая из 'Profile' и символьный вектор или строку. Если этот параметр опущен, профиль по умолчанию используется для идентификации кластера и применяется к свойствам задания и задачи.

Пример: j = batch('aScript','Profile','local');

Типы данных: char | string

Пути для добавления к пути поиска MATLAB работников перед выполнением сценария или функции, указанные как разделенная запятыми пара, состоящая из 'AdditionalPaths' и символьный вектор, строковый массив или массив ячеек символьных векторов.

Путь поиска по умолчанию для работников может отличаться от пути поиска для клиента; различие путей может быть результатом различных текущих рабочих папок (cwd), платформы или доступ к сетевой файловой системе. Указание 'AdditionalPaths' Аргумент пары «имя-значение» помогает гарантировать, что работники будут искать файлы, такие как файлы кода, файлы данных или файлы модели, в правильных расположениях.

Вы можете использовать 'AdditionalPaths' для доступа к файлам в общей файловой системе. Обратите внимание, что представления путей могут изменяться в зависимости от целевых машин. 'AdditionalPaths' должны быть путями, видимыми машинами в кластере. Например, если Z:\data на локальном компьютере Windows ® /network/data в кластер Linux ®, затем добавить последний в 'AdditionalPaths'. При использовании хранилища данных используйте 'AlternateFileSystemRoots' вместо этого, чтобы иметь дело с другими представлениями. Дополнительные сведения см. в разделе Настройка хранилища данных для обработки на различных машинах или кластерах.

Обратите внимание, что AdditionalPaths помогает находить файлы только при ссылке на них с использованием относительного пути или имени файла, а не абсолютного пути.

Пример: j = batch(@myFunction,1,{x,y},'AdditionalPaths','/network/data/');

Типы данных: char | string | cell

Файлы или папки для передачи работникам, указанные как разделенная запятыми пара, состоящая из 'AttachedFiles' и символьный вектор, строковый массив или массив ячеек символьных векторов.

Пример: j = batch(@myFunction,1,{x,y},'AttachedFiles','myData.dat');

Типы данных: char | string | cell

Флаг для добавления добавленных пользователем записей на пути клиента к рабочим путям, указанный как разделенная запятыми пара, состоящая из 'AutoAddClientPath' и логическое значение.

Пример: j = batch(@myFunction,1,{x,y},'AutoAddClientPath',false);

Типы данных: logical

Флажок для включения анализа зависимостей и автоматического присоединения файлов кода к заданию, указанному как разделенная запятыми пара, состоящая из 'AutoAttachFiles' и логическое значение. Если задано значение true, пакетный сценарий или функция анализируются, и файлы кода, от которых они зависят, автоматически передаются работникам.

Пример: j = batch(@myFunction,1,{x,y},'AutoAttachFiles',true);

Типы данных: logical

Папка, в которой выполняется сценарий или функция, указанная как разделенная запятыми пара, состоящая из 'CurrentFolder' и символьный вектор или строку. Нет гарантии, что эта папка существует на работнике. Значением по умолчанию для этого свойства является текущий каталог MATLAB, когда batch выполняется команда. Если аргумент имеет значение '.', папка не изменяется перед выполнением пакета.

Пример: j = batch(@myFunction,1,{x,y},'CurrentFolder','.');

Типы данных: char | string

Флаг для сбора дневника из вызова функции, указанного как пара, разделенная запятыми, состоящая из 'CaptureDiary' и логическое значение. Сведения о собранных данных см. в разделе diary.

Пример: j = batch('aScript','CaptureDiary',false);

Типы данных: logical

Переменные среды для копирования из клиентского сеанса в рабочие, указанные как разделенная запятыми пара, состоящая из 'EnvironmentVariables' и символьный вектор, строковый массив или массив ячеек символьных векторов. Указанные здесь имена добавляются к EnvironmentVariables свойство, указанное в соответствующем параллельном профиле, для формирования полного списка переменных среды. Перечисленные переменные, которые не заданы, не копируются в работников. Эти переменные среды устанавливаются для работников на время выполнения пакетного задания.

Пример: j = batch('aScript','EnvironmentVariables',"MY_ENV_VAR");

Типы данных: char | string | cell

Число работников, которые должны быть включены в параллельный пул, указанный как разделенная запятыми пара, состоящая из 'Pool' и либо:

  • Неотрицательное целое число.

  • 2-элементный вектор неотрицательных целых чисел, который интерпретируется как диапазон. Размер результирующего параллельного пула максимально велик в требуемом диапазоне.

Кроме того, обратите внимание, что batch использует другого работника для выполнения самого пакетного задания.

Сценарий или функция использует этот пул для выполнения таких инструкций, как parfor и spmd которые находятся внутри пакетного кода. Потому что пул требует N помимо работника, выполняющего пакет, кластер должен иметь не менее N+1 работники доступны. Для выполнения не требуется уже запущенный параллельный пул batchновый пул, создаваемый пакетами, не связан с пулом, который, возможно, уже открыт. Дополнительные сведения см. в разделе Запуск пакетного задания с параллельным пулом.

Если используется значение по умолчанию, 0сценарий или функция выполняется только на одном работнике, а не на параллельном пуле.

Пример: j = batch(@myFunction,1,{x,y},'Pool',4);

Пример: j = batch(@myFunction,1,{x,y},'Pool',[2,6]);

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Выходные аргументы

свернуть все

Задание, выполняющее сценарий или функцию, возвращаемое как parallel.Job объект.

Пример: j = batch('aScript');

Типы данных: parallel.Job

Совет

Для просмотра статуса или отслеживания хода выполнения пакетного задания используйте монитор заданий, как описано в разделе Монитор заданий. Монитор заданий можно также использовать для извлечения объекта задания для пакетного задания, созданного в другой сессии, или для пакетного задания, созданного без возврата объекта задания из batch звоните.

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

Вопросы совместимости

развернуть все

В R2021a изменилось поведение

Представлен в R2008a