batch

Запустите скрипт 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 Home, в разделе Environment, в Parallel > Select a Default Cluster. Кроме того, можно задать профиль кластера с 'Profile' аргумент пары "имя-значение".

job = batch('myScript');

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

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

wait(job);

По умолчанию MATLAB сохраняет окно Command Window из пакетного задания в дневник задания. Чтобы извлечь его, используйте 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 Home, в разделе Environment, в Parallel > Select a Default Cluster.

c = parcluster();

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

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

Если ваш код использует параллельный пул, используйте '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 Parallel Server).

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 Home, в разделе Environment, в 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' и struct 1 на 1. Имена полей struct определяют имена переменных, а значения полей присваиваются переменным рабочей области. По умолчанию этот параметр имеет поле для каждой переменной в текущей рабочей области, где 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'. Если вы используете datastore, используйте 'AlternateFileSystemRoots' вместо этого для работы с другими представлениями. Для получения дополнительной информации смотрите Настройка Datastore для обработки на различных машинах или кластерах.

Обратите внимание, что 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