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;

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

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

c = parcluster();

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

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

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

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

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

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

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

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

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

wait(job);

Чтобы получить результаты, используйте fetchOutputs на объекте задания.

Если ваш код имеет ошибку, то fetchOutputs выдает ошибку. Можно получить доступ к информации об ошибке путем проверки Error свойство Task объекты в задании. В этом примере код зависит от файла, который не могут найти рабочие.

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

Доступ к файлам от рабочих

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

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

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

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

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

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

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

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

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

job3ID = job(3).ID
job3ID = 19

Когда вы открываете 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
    {420×1680 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 для Обработки на Различных Машинах или Кластерах (MATLAB).

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

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

Смотрите также

| | | | |

Введенный в R2008a

Для просмотра документации необходимо авторизоваться на сайте