Запустите скрипт 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
Обратите внимание, что если вы отправляете файл скрипта с помощью batch
MATLAB переносит все переменные рабочей области в кластер, даже если ваш скрипт их не использует. Время передачи данных для большой рабочей области может быть существенным. Как лучшая практика, преобразуйте ваш скрипт в файл функции, чтобы избежать этих накладных расходов на коммуникацию. Для примера, который использует функцию, см. «Запуск пакетного задания и доступ к файлам от работников».
Для более продвинутых опций с 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
script
- 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.