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, параллельно> Выбирает 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

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

Для большего количества расширенных настроек с batch, смотрите Пакетное задание Запуска и доступ к Файлам от Рабочих.

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

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

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

prepareSupportingFiles;

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

Запустите пакетное задание

Создайте кластерный объект с помощью parcluster. По умолчанию, parcluster использует ваш кластерный профиль по умолчанию. Проверяйте, что ваш кластерный профиль по умолчанию на вкладке MATLAB Home, в разделе Environment, параллельно> Выбирает 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, обратите внимание на ID задания.

job3ID = job(3).ID
job3ID = 25

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

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

В качестве альтернативы можно использовать Джоба Монитора, чтобы отследить задание. Можно открыть его от вкладки MATLAB Home, в разделе Environment, параллельно> Монитор Джобс.

Получите результаты и очистите данные

Чтобы получить результаты пакетного задания, используйте 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);

Типы данных: логический

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

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

Типы данных: логический

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

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

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

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

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

Типы данных: логический

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