Запустите скрипт MATLAB или функцию на рабочем
запускает файл скрипта j = batch(script)script на работнике в кластере, заданном профилем кластера по умолчанию. (Примечание: Не включать .m расширение файла с именем скрипта.) Функция возвращается j, указатель на объект задания, который запускает скрипт. Файл скрипта script копируется в рабочий процесс.
запускает функцию 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 jobscript - MATLAB® скриптСкрипт MATLAB, который должен быть оценен рабочим в виде вектора символов или строки.
Пример: batch('aScript');
Типы данных: char | string
myCluster - Кластерparallel.Cluster объектКластер, заданный как parallel.Cluster объект, который представляет вычислительные ресурсы кластера. Чтобы создать объект, используйте parcluster функция.
Пример: cluster = parcluster; batch(cluster,'aScript');
Типы данных: parallel.Cluster
fcn - Функция, подлежащая оценке работникомФункция, которая будет оценена работником, заданная как указатель на функцию или имя функции.
Пример: batch(@myFunction,1,{x,y});
Типы данных: char | string | function_handle
N - Количество выходовКоличество выходов, ожидаемых от вычисленной функции fcn, заданный как неотрицательное целое число.
Пример: batch(@myFunction,1,{x,y});
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
{x1,...,xn} - Входные параметрыВходные параметры в 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' - Рабочая область на работникеРабочая область на рабочем месте непосредственно перед вызовом скрипта или функции, заданная как разделенная разделенными запятой парами, состоящая из 'Workspace' и struct 1 на 1. Имена полей struct определяют имена переменных, а значения полей присваиваются переменным рабочей области. По умолчанию этот параметр имеет поле для каждой переменной в текущей рабочей области, где batch выполняется. Этот параметр поддерживает только выполнение скриптов.
Пример: workspace.myVar = 5; j = batch('aScript','Workspace',workspace);
Типы данных: struct
'Profile' - Профиль кластераПрофиль кластера, используемый для идентификации кластера, задается как разделенная разделенными запятой парами, состоящая из 'Profile' и вектор символов или строка. Если эта опция опущена, профиль по умолчанию используется для идентификации кластера и применяется к свойствам задания и задачи.
Пример: j = batch('aScript','Profile','local');
Типы данных: char | string
'AdditionalPaths' - Пути для добавления к работникамПути для добавления к пути поиска файлов 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' - Файлы или папки для передачиФайлы или папки для передачи работникам в виде разделенной разделенными запятой парами, состоящей из 'AttachedFiles' и вектор символов, строковые массивы или массив ячеек из векторов символов.
Пример: j = batch(@myFunction,1,{x,y},'AttachedFiles','myData.dat');
Типы данных: char | string | cell
'AutoAddClientPath' - Флаг для добавления добавленных пользователем записей в пути клиента к рабочему путиtrue (по умолчанию) | falseФлаг для добавления добавленных пользователем записей в пути клиента к рабочим путям, заданный как разделенная разделенными запятой парами, состоящая из 'AutoAddClientPath' и логическое значение.
Пример: j = batch(@myFunction,1,{x,y},'AutoAddClientPath',false);
Типы данных: logical
'AutoAttachFiles' - Флаг для включения анализа зависимостейtrue (по умолчанию) | falseФлаг, чтобы включить анализ зависимостей и автоматически прикрепить файлы кода к заданию, заданному как разделенная разделенными запятой парами, состоящая из 'AutoAttachFiles' и логическое значение. Если вы задаете значение true, пакетный скрипт или функция анализируется, и файлы кода, от которых он зависит, автоматически передаются работникам.
Пример: j = batch(@myFunction,1,{x,y},'AutoAttachFiles',true);
Типы данных: logical
'CurrentFolder' - Папка, в которой выполняется скрипт или функцияПапка, в которой выполняется скрипт или функция, заданная как разделенная разделенными запятой парами, состоящая из 'CurrentFolder' и вектор символов или строка. Нет гарантии, что эта папка существует в рабочем окне. Значение по умолчанию для этого свойства является текущей директорией MATLAB, когда batch команда выполняется. Если аргумент '.', нет изменений в папке перед пакетным выполнением.
Пример: j = batch(@myFunction,1,{x,y},'CurrentFolder','.');
Типы данных: char | string
'CaptureDiary' - Флаг для сбора дневникаtrue (по умолчанию) | falseФлаг для сбора дневника из вызова функции, заданный как разделенная разделенными запятой парами, состоящая из 'CaptureDiary' и логическое значение. Для получения информации о собранных данных смотрите diary.
Пример: j = batch('aScript','CaptureDiary',false);
Типы данных: logical
'EnvironmentVariables' - Переменные окружения для копированияПеременные окружения для копирования из сеанса клиента в рабочие, заданные как разделенная разделенными запятой парами, состоящая из 'EnvironmentVariables' и вектор символов, строковые массивы или массив ячеек из векторов символов. Имена, указанные здесь, добавляются к EnvironmentVariables свойство, заданное в применимом параллельном профиле, чтобы сформировать полный список переменных окружения. Перечисленные переменные, которые не установлены, не копируются в рабочие. Эти переменные окружения заданы для работников на время пакетного задания.
Пример: j = batch('aScript','EnvironmentVariables',"MY_ENV_VAR");
Типы данных: char | string | cell
'Pool' - Количество работников, которые будут работать в параллельном бассейне0 (по умолчанию) | неотрицательное целое число | 2-элементный вектор неотрицательных целых чиселКоличество рабочих для создания параллельного пула, заданное как разделенная разделенными запятой парами, состоящая из '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
j - Заданиеparallel.JobЗадание, которое запускает скрипт или функцию, возвращается как parallel.Job объект.
Пример: j = batch('aScript');
Типы данных: parallel.Job
Чтобы просмотреть состояние или отслеживать прогресс пакетного задания, используйте Монитор заданий, как описано в Мониторе заданий. Можно также использовать монитор заданий для извлечения объекта задания для пакетного задания, созданного в другом сеансе, или для пакетного задания, созданного без возврата объекта задания из batch вызов.
Удалите все пакетные задания, которые вам больше не нужно избегать ненужного использования ресурсов хранилища кластеров.
batch теперь оценивает входные параметры массива ячеек {C1,...,Cn} как C1,...,CnПоведение изменено в R2021a
Начиная с R2021a, функция fcn разгружается с batch оценивает входные параметры массива ячеек {C1,...,Cn} как fcn(C1,...,Cn). В предыдущих релизах {C1,...,Cn} выдал ошибку и {{C1,...,Cn}} оценивался как fcn(C1,...,Cn).
Начиная с R2021a, используйте следующий код для разгрузки fcn({a,b},{c,d}) на кластере myCluster с одним выходом.
batch(myCluster,@fcn,1,{{a,b},{c,d}});batch(myCluster,@fcn,1,{{{a,b},{c,d}}});У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.