批处理
运行MATLAB脚本或函数在工作者
语法
描述
例子
运行脚本作为批处理作业
这个例子展示了如何使用批处理
将工作卸载到后台运行的MATLAB工作会话。
在进行计算时,您可以继续使用MATLAB。
方法将脚本作为批处理作业运行批处理
函数。默认情况下,批处理
使用默认的集群配置文件。在MATLAB上检查默认的集群配置文件首页选项卡,环境部分,在平行>选择并行环境..方法指定集群配置文件“配置文件”
名称-值对的论点。
工作=批(“myScript”);
批处理
不会阻塞MATLAB,你可以继续工作,而计算发生。
如果您想阻塞MATLAB直到作业完成,请使用等待
函数在作业对象上。
等待(工作);
默认情况下,MATLAB将批处理作业的命令窗口输出保存到作业的日志中。要检索它,请使用日记
函数。
日记(工作)
——开始日记——n = 100——结束日记——
作业完成后,通过使用负载
函数。
负载(工作,“x”);情节(x)
如果要在批处理作业中加载所有变量,请使用加载(工作)
代替。
加载完所有必需的变量后,删除作业对象以清理其数据并避免不必要地消耗资源。
删除(工作);清晰的工作
请注意,如果您使用批处理
, MATLAB将所有的工作空间变量传输到集群,即使您的脚本不使用它们。对于大型工作空间,数据传输时间可能非常长。作为最佳实践,请将脚本转换为函数文件,以避免这种通信开销。有关使用函数的示例,请参见运行批处理作业并从工作者访问文件.
以获取更高级的选项批处理
,请参阅运行批处理作业并从工作者访问文件.
运行批处理作业并从工作者访问文件
可以将计算卸载到后台运行批处理
.如果您的代码需要访问文件,您可以使用其他选项,例如“AttachedFiles”
或“AdditionalPaths”
,以供查阅资料。在进行计算时,您可以关闭或继续在MATLAB中工作,稍后恢复结果。
准备的例子
使用配套功能prepareSupportingFiles
将此示例所需的数据复制到当前工作文件夹。
prepareSupportingFiles;
您当前的工作文件夹现在包含4个文件:A.dat
,B1.dat
,B2.dat
,B3.dat
.
运行批处理作业
使用创建集群对象parcluster
.默认情况下,parcluster
使用默认的集群配置文件。在MATLAB上检查默认的集群配置文件首页选项卡,环境部分,在平行>选择默认集群.
c = parcluster ();
将代码放在函数中,并将其作为批处理作业提交批处理
.有关自定义函数的示例,请参阅支持的函数divideData
.指定预期的输出参数数量和一个单元格数组,其中包含函数的输入。
注意,如果您使用批处理发送一个脚本文件,MATLAB会将所有的工作空间变量传输到集群,即使您的脚本不使用它们。如果您的工作空间很大,则会对数据传输时间产生负面影响。作为最佳实践,请将脚本转换为函数文件,以避免这种通信开销。您可以通过在脚本的开头添加一个函数行来实现这一点。为了减少本例中的开销,divideData
在此活动脚本之外的文件中定义。
如果代码使用并行池,请使用“池”
名称-值对参数,以使用指定的工作人员数量创建并行池。批处理
使用额外的工作线程来运行函数本身。
默认情况下,批处理
将工人的初始工作文件夹更改为MATLAB客户端的当前文件夹。在工作程序中控制初始工作文件夹是很有用的。例如,如果您的集群使用不同的文件系统,因此路径不同,您可能想要控制它,例如当您从Windows客户机提交到Linux集群时。
要保留工作者的初始工作文件夹并使用它们的默认值,请设置
“CurrentFolder”
来“。”
.若要更改初始工作文件夹,请设置
“CurrentFolder”
到你选择的文件夹。
这个示例使用一个包含三个工作程序的并行池,并为初始工作文件夹选择一个临时位置。使用批处理
来卸载计算divideData
.
工作=批(c @divideData 1 {}...“池”3,...“CurrentFolder”, tempdir);
批处理
运行divideData
在并行工作器上,所以当计算发生时,你可以继续在MATLAB中工作。
如果您想阻塞MATLAB直到作业完成,请使用等待
函数在作业对象上。
等待(工作);
要检索结果,请使用fetchOutputs
在作业对象上。作为divideData
取决于工人们找不到的文件,fetchOutputs
抛出一个错误。您可以使用getReport
在错误
的属性任务
作业中的对象。在本例中,代码依赖于工作人员无法找到的文件。
getReport (job.Tasks (1) . error)
ans = '使用divideData错误(第4行)无法读取文件'B2.dat'。没有这样的文件或目录。”
从工作者访问文件
默认情况下,批处理
自动分析您的代码并将所需的文件传输给工作程序。在某些情况下,您必须显式地传输这些文件——例如,当您在运行时确定文件的名称时。
在这个例子中,divideData
访问支持文件A.dat
,这批处理
自动检测和传输。函数还可以访问B1.dat
,但是它在运行时解析文件名,因此自动依赖分析不会检测到它。
类型divideData.m
函数X = divideData() A = load("A.dat");X = 0(翻转(大小(A)));B = load("B" + i + ".dat");X = X + a \ b;结束结束
如果数据位于工作者可以访问的位置,则可以使用名称-值对参数“AdditionalPaths”
指定位置。“AdditionalPaths
’将此路径添加到工人的MATLAB搜索路径中,并使数据对工人可见。
pathToData = pwd;工作(2)=批(c @divideData 1 {}...“池”3,...“CurrentFolder”tempdir,...“AdditionalPaths”, pathToData);等待(工作(2));
如果数据位于工作者无法访问的位置,则可以使用“AttachedFiles”
名称-值对的论点。如果客户端和工作者不共享相同的文件系统,或者您的集群在非共享模式下使用通用调度器接口,则需要传输文件。有关更多信息,请参见使用通用调度器接口配置(MATLAB并行服务器).
文件名=“B”字符串(1:3)+ +“.dat”;工作(3)=批(c @divideData 1 {}...“池”3,...“CurrentFolder”tempdir,...“AttachedFiles”文件名);
找到现有的工作
您可以在作业提交后关闭MATLAB并在稍后检索结果。在关闭MATLAB之前,请记下作业ID。
(3) job3ID =工作。ID
job3ID = 25
当你再次打开MATLAB,你可以通过使用findJob
函数。
工作(3)= findJob (c,“ID”, job3ID);等待(工作(3));
或者,您可以使用作业监视器来跟踪作业。你可以在MATLAB中打开它首页选项卡,环境部分,在平行>监控工作.
检索结果并清理数据
方法检索批处理作业的结果fetchOutputs
函数。fetchOutputs
返回带有运行函数的输出的单元格数组批处理
.
X = fetchOutputs(工作(3))
X =1×1单元阵列{40×207双}
当检索到所有必需的输出并且不再需要作业对象时,删除它以清理其数据并避免不必要地消耗资源。
删除(工作)清晰工作
输入参数
脚本
- - - - - -MATLAB®脚本
特征向量|字符串标量
MATLAB脚本,指定为字符向量或字符串标量。
默认情况下,当指定此参数时,工作区变量将从客户机复制到工作者。作业和任务对象不会复制到工作者。
例子:批处理(“aScript”);
数据类型:字符
|字符串
表达式
- - - - - -表现评估
特征向量|字符串标量
表达式要求值,指定为字符向量或字符串标量。
默认情况下,当指定此参数时,工作区变量将从客户机复制到工作者。作业和任务对象不会复制到工作者。
例子:批处理(y =魔法(3)');
数据类型:字符
|字符串
myCluster
- - - - - -集群
平行的。集群
对象
fcn
- - - - - -函数将由工作者进行评估
函数处理|特征向量
函数要由工作者求值,指定为函数句柄或函数名。
例子:批处理(@myFunction 1 {x, y});
数据类型:字符
|字符串
|function_handle
N
- - - - - -数量的输出
非负整数
被求值函数的期望输出数fcn
,指定为非负整数。
例子:批处理(@myFunction 1 {x, y});
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
{x1,…,xn}
- - - - - -输入参数
单元阵列
名称-值参数
指定可选参数对为Name1 = Value1,…,以=家
,在那里的名字
参数名称和价值
对应的值。名-值参数必须出现在其他参数之后,但对的顺序并不重要。
在R2021a之前,名称和值之间用逗号隔开,并括起来的名字
在报价。
例子:j =批(@myFunction 1 {x, y},“池”,3);
配置文件
- - - - - -集群配置文件
特征向量|字符串
用于标识集群的集群配置文件,指定为逗号分隔的对,由“配置文件”
和一个字符向量或字符串。如果省略此选项,则使用默认配置文件识别集群,并将其应用于作业和任务属性。
例子:j =批(“aScript”、“配置文件”,“过程”);
数据类型:字符
|字符串
AdditionalPaths
- - - - - -添加到工作者的路径
特征向量|字符串数组|字符向量的单元格数组
在脚本或函数执行之前添加到工作者的MATLAB搜索路径的路径,指定为逗号分隔的对,由“AdditionalPaths”
以及字符向量、字符串数组或字符向量的单元格数组。
工人上的默认搜索路径可能与客户端上的不一样;路径差异可能是由于不同的当前工作文件夹(慢性消耗病
)、平台或网络文件系统访问。指定“AdditionalPaths”
名称-值对参数有助于确保工作人员在正确的位置查找文件,例如代码文件、数据文件或模型文件。
您可以使用“AdditionalPaths”
访问共享文件系统中的文件。注意,路径表示可能因目标计算机的不同而不同。“AdditionalPaths”
必须是集群中的机器所看到的路径。例如,如果Z: \数据
在本地Windows上®机是/ /数据网络
你的Linux®群集,然后将后者添加到“AdditionalPaths”
.如果使用数据存储,请使用“AlternateFileSystemRoots”
而不是处理其他的表示。有关更多信息,请参见为不同机器或集群上的处理设置数据存储.
请注意,AdditionalPaths
只有当您使用相对路径或文件名而不是绝对路径引用文件时,才有助于查找它们。
例子:j =批(@myFunction 1 {x, y}, AdditionalPaths, ' /网络/数据/ ');
数据类型:字符
|字符串
|细胞
AttachedFiles
- - - - - -要传输的文件或文件夹
特征向量|字符串数组|字符向量的单元格数组
要传输给工作者的文件或文件夹,指定为逗号分隔的对“AttachedFiles”
以及字符向量、字符串数组或字符向量的单元格数组。
例子:j =批(@myFunction 1 {x, y},“AttachedFiles”、“myData.dat”);
数据类型:字符
|字符串
|细胞
AutoAddClientPath
- - - - - -标志将客户端路径上用户添加的条目添加到工作路径
真正的
(默认)|假
标志将客户端路径上的用户添加项添加到工作者路径,指定为逗号分隔的对,由“AutoAddClientPath”
和一个逻辑值。
例子:j =批(@myFunction 1 {x, y}, AutoAddClientPath,假);
数据类型:逻辑
AutoAttachFiles
- - - - - -标志以启用依赖性分析
真正的
(默认)|假
标志以启用依赖项分析并自动将代码文件附加到作业,指定为逗号分隔的对,由“AutoAttachFiles”
和一个逻辑值。如果将该值设置为真正的
,批处理脚本或函数被分析,它所依赖的代码文件被自动传输给工作者。
例子:j =批(@myFunction 1 {x, y}, AutoAttachFiles, true);
数据类型:逻辑
CurrentFolder
- - - - - -执行脚本或函数的文件夹
特征向量|字符串
执行脚本或函数的文件夹,指定为逗号分隔的对,由“CurrentFolder”
和一个字符向量或字符串。不能保证此文件夹存在于工作程序上。该属性的默认值是MATLAB的当前目录批处理
命令执行。如果论证是“。”
,批处理执行前文件夹没有变化。
例子:j =批(@myFunction 1 {x, y}, CurrentFolder, '。');
数据类型:字符
|字符串
CaptureDiary
- - - - - -标志来收集日志
真正的
(默认)|假
标志从函数调用中收集日志,指定为逗号分隔的一对,由“CaptureDiary”
和一个逻辑值。有关收集的数据的信息,请参见日记
.
例子:j =批(‘aScript’,‘CaptureDiary’,假);
数据类型:逻辑
EnvironmentVariables
- - - - - -要复制的环境变量
特征向量|字符串数组|字符向量的单元格数组
要从客户机会话复制到工作者的环境变量,指定为逗号分隔的对,由“EnvironmentVariables”
以及字符向量、字符串数组或字符向量的单元格数组。在此指定的名称被附加到EnvironmentVariables
属性,以形成环境变量的完整列表。未设置的列出的变量不会复制到工作者。这些环境变量是在批处理作业期间在工作者上设置的。
例子:j =批(“aScript”、“EnvironmentVariables”、“MY_ENV_VAR”);
数据类型:字符
|字符串
|细胞
池
- - - - - -将工人的数量做成一个平行池
0
(默认)|非负整数|非负整数的2元向量
要放入并行池的工人数量,指定为逗号分隔的对,由“池”
和:
一个非负整数。
非负整数的2元素向量,它被解释为一个范围。结果并行池的大小在请求的范围内尽可能大。
另外,请注意批处理
使用另一个worker来运行批处理作业本身。
脚本或函数使用此池执行语句,例如parfor
而且spmd
它们在批处理代码中。因为池需要N
除了运行批处理的worker之外,集群必须至少有N + 1
工人。执行时不需要一个已经在运行的并行池批处理
,并且批处理创建的新池与您可能已经打开的池无关。有关更多信息,请参见使用并行池运行批处理作业.
如果使用默认值,0
,脚本或函数只在单个worker上运行,而不是在并行池上。
例子:j =批(@myFunction 1 {x, y},“池”,4);
例子:j =批(@myFunction 1 {x, y},“池”,[2,6]);
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
提示
要查看批处理作业的状态或跟踪进度,请使用作业监视器,如中所述监控工作.还可以使用作业监视器检索在不同会话中创建的批处理作业的作业对象,或者检索未从批处理
调用。
删除不再需要的批处理作业,避免不必要地消耗集群存储资源。
版本历史
介绍了R2008aR2021a:批处理
现在计算单元格数组输入参数{C1,…,Cn}
作为C1,…,Cn
从R2021a开始,一个函数fcn
卸载与批处理
计算单元格数组输入参数{C1,…,Cn}
作为Cn fcn (C1,…)
.在以前的版本{C1,…,Cn}
抛出一个错误{{C1,…,Cn}}
被评估为Cn fcn (C1,…)
.
从R2021a开始,使用以下代码卸载fcn ({a、b}, {c, d})
在集群上myCluster
一个输出。
批处理(myCluster @fcn 1, {{a、b}, {c, d}});
批处理(myCluster @fcn 1, {{{a、b}, {c, d}}});
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。
您也可以从以下列表中选择网站:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。