主要内容

批处理

运行MATLAB脚本或函数在工作者

描述

例子

j=批(脚本运行脚本文件脚本在由默认集群配置文件指定的集群中的一个工作者上。(注意:不包括.m带有脚本名称的文件扩展名。)函数返回j,是运行脚本的作业对象的句柄。该脚本文件脚本复制到工作线程。

默认情况下,在运行时将工作空间变量从客户机复制到工作者批处理(脚本).作业和任务对象不会复制到工作者。

j=批(表达式运行表达式作为默认集群配置文件指定的集群中的工作者上的表达式。函数返回j,是运行表达式的作业对象的句柄。

默认情况下,在运行时将工作空间变量从客户机复制到工作者批处理(表达).作业和任务对象不会复制到工作者。

j=批(myCluster脚本是一样批处理(脚本)除非脚本运行在由cluster对象指定的集群中的一个worker上myCluster

j=批(myCluster表达式是一样批处理(表达)除非该表达式运行在由cluster对象指定的集群中的一个worker上myCluster

例子

j=批(fcnN{x1,…,xn}运行函数fcn在由默认集群配置文件指定的集群中的一个工作者上。函数返回j,是运行函数的作业对象的句柄。函数用给定的参数求值,x1,…,xn,并返回N输出参数。的函数文件fcn复制到工作线程。(注意:不包括.m带有函数名参数的文件扩展名。)

例子

j=批(myClusterfcnN{x1,…,xn}是一样批处理(fcn N, {x1,…,xn})除非该函数运行在cluster对象指定的集群中的一个worker上myCluster

例子

j=批(___名称,值指定使用一个或多个名称-值对参数修改作业行为的选项。除非另有说明,否则这些选项支持函数和脚本的批处理。除了使用前面语法中的任何输入参数组合外,还可以使用此语法。

例子

全部折叠

这个例子展示了如何使用批处理将工作卸载到后台运行的MATLAB工作会话。

在进行计算时,您可以继续使用MATLAB。

方法将脚本作为批处理作业运行批处理函数。默认情况下,批处理使用默认的集群配置文件。在MATLAB上检查默认的集群配置文件首页选项卡,环境部分,在平行>选择并行环境..方法指定集群配置文件“配置文件”名称-值对的论点。

工作=批(“myScript”);

批处理不会阻塞MATLAB,你可以继续工作,而计算发生。

如果您想阻塞MATLAB直到作业完成,请使用等待函数在作业对象上。

等待(工作);

默认情况下,MATLAB将批处理作业的命令窗口输出保存到作业的日志中。要检索它,请使用日记函数。

日记(工作)
——开始日记——n = 100——结束日记——

作业完成后,通过使用负载函数。

负载(工作,“x”);情节(x)

如果要在批处理作业中加载所有变量,请使用加载(工作)代替。

加载完所有必需的变量后,删除作业对象以清理其数据并避免不必要地消耗资源。

删除(工作);清晰的工作

请注意,如果您使用批处理, MATLAB将所有的工作空间变量传输到集群,即使您的脚本不使用它们。对于大型工作空间,数据传输时间可能非常长。作为最佳实践,请将脚本转换为函数文件,以避免这种通信开销。有关使用函数的示例,请参见运行批处理作业并从工作者访问文件

以获取更高级的选项批处理,请参阅运行批处理作业并从工作者访问文件

可以将计算卸载到后台运行批处理.如果您的代码需要访问文件,您可以使用其他选项,例如“AttachedFiles”“AdditionalPaths”,以供查阅资料。在进行计算时,您可以关闭或继续在MATLAB中工作,稍后恢复结果。

准备的例子

使用配套功能prepareSupportingFiles将此示例所需的数据复制到当前工作文件夹。

prepareSupportingFiles;

您当前的工作文件夹现在包含4个文件:A.datB1.datB2.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脚本,指定为字符向量或字符串标量。

默认情况下,当指定此参数时,工作区变量将从客户机复制到工作者。作业和任务对象不会复制到工作者。

例子:批处理(“aScript”);

数据类型:字符|字符串

表达式要求值,指定为字符向量或字符串标量。

默认情况下,当指定此参数时,工作区变量将从客户机复制到工作者。作业和任务对象不会复制到工作者。

例子:批处理(y =魔法(3)');

数据类型:字符|字符串

集群,指定为平行的。集群对象,表示集群计算资源。要创建对象,请使用parcluster函数。

例子:集群= parcluster;批处理(集群,“aScript”);

数据类型:平行的。集群

函数要由工作者求值,指定为函数句柄或函数名。

例子:批处理(@myFunction 1 {x, y});

数据类型:字符|字符串|function_handle

被求值函数的期望输出数fcn,指定为非负整数。

例子:批处理(@myFunction 1 {x, y});

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

为函数输入参数fcn,指定为单元格数组。

例子:批处理(@myFunction 1 {x, y});

数据类型:细胞

名称-值参数

指定可选参数对为Name1 = Value1,…,以=家,在那里的名字参数名称和价值对应的值。名-值参数必须出现在其他参数之后,但对的顺序并不重要。

在R2021a之前,名称和值之间用逗号隔开,并括起来的名字在报价。

例子:j =批(@myFunction 1 {x, y},“池”,3);

要复制到工作者的变量,指定为逗号分隔的对,由“工作区”一个结构标量。

默认值是一个结构标量,其字段对应于客户机工作区中的变量。将变量指定为结构标量中的字段。

如果指定,工作区变量只会从客户端复制到工作者脚本表达式.作业和任务对象不会复制到工作者。

例子:工作区。myvar# = 5;j =批(“aScript”、“工作空间”,工作空间);

数据类型:结构体

用于标识集群的集群配置文件,指定为逗号分隔的对,由“配置文件”和一个字符向量或字符串。如果省略此选项,则使用默认配置文件识别集群,并将其应用于作业和任务属性。

例子:j =批(“aScript”、“配置文件”,“过程”);

数据类型:字符|字符串

在脚本或函数执行之前添加到工作者的MATLAB搜索路径的路径,指定为逗号分隔的对,由“AdditionalPaths”以及字符向量、字符串数组或字符向量的单元格数组。

工人上的默认搜索路径可能与客户端上的不一样;路径差异可能是由于不同的当前工作文件夹(慢性消耗病)、平台或网络文件系统访问。指定“AdditionalPaths”名称-值对参数有助于确保工作人员在正确的位置查找文件,例如代码文件、数据文件或模型文件。

您可以使用“AdditionalPaths”访问共享文件系统中的文件。注意,路径表示可能因目标计算机的不同而不同。“AdditionalPaths”必须是集群中的机器所看到的路径。例如,如果Z: \数据在本地Windows上®机是/ /数据网络你的Linux®群集,然后将后者添加到“AdditionalPaths”.如果使用数据存储,请使用“AlternateFileSystemRoots”而不是处理其他的表示。有关更多信息,请参见为不同机器或集群上的处理设置数据存储

请注意,AdditionalPaths只有当您使用相对路径或文件名而不是绝对路径引用文件时,才有助于查找它们。

例子:j =批(@myFunction 1 {x, y}, AdditionalPaths, ' /网络/数据/ ');

数据类型:字符|字符串|细胞

要传输给工作者的文件或文件夹,指定为逗号分隔的对“AttachedFiles”以及字符向量、字符串数组或字符向量的单元格数组。

例子:j =批(@myFunction 1 {x, y},“AttachedFiles”、“myData.dat”);

数据类型:字符|字符串|细胞

标志将客户端路径上的用户添加项添加到工作者路径,指定为逗号分隔的对,由“AutoAddClientPath”和一个逻辑值。

例子:j =批(@myFunction 1 {x, y}, AutoAddClientPath,假);

数据类型:逻辑

标志以启用依赖项分析并自动将代码文件附加到作业,指定为逗号分隔的对,由“AutoAttachFiles”和一个逻辑值。如果将该值设置为真正的,批处理脚本或函数被分析,它所依赖的代码文件被自动传输给工作者。

例子:j =批(@myFunction 1 {x, y}, AutoAttachFiles, true);

数据类型:逻辑

执行脚本或函数的文件夹,指定为逗号分隔的对,由“CurrentFolder”和一个字符向量或字符串。不能保证此文件夹存在于工作程序上。该属性的默认值是MATLAB的当前目录批处理命令执行。如果论证是“。”,批处理执行前文件夹没有变化。

例子:j =批(@myFunction 1 {x, y}, CurrentFolder, '。');

数据类型:字符|字符串

标志从函数调用中收集日志,指定为逗号分隔的一对,由“CaptureDiary”和一个逻辑值。有关收集的数据的信息,请参见日记

例子:j =批(‘aScript’,‘CaptureDiary’,假);

数据类型:逻辑

要从客户机会话复制到工作者的环境变量,指定为逗号分隔的对,由“EnvironmentVariables”以及字符向量、字符串数组或字符向量的单元格数组。在此指定的名称被附加到EnvironmentVariables属性,以形成环境变量的完整列表。未设置的列出的变量不会复制到工作者。这些环境变量是在批处理作业期间在工作者上设置的。

例子:j =批(“aScript”、“EnvironmentVariables”、“MY_ENV_VAR”);

数据类型:字符|字符串|细胞

要放入并行池的工人数量,指定为逗号分隔的对,由“池”和:

  • 一个非负整数。

  • 非负整数的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

输出参数

全部折叠

工作,作为一个平行的。工作对象。

例子:j =批(“aScript”);

数据类型:平行的。工作

提示

要查看批处理作业的状态或跟踪进度,请使用作业监视器,如中所述监控工作.还可以使用作业监视器检索在不同会话中创建的批处理作业的作业对象,或者检索未从批处理调用。

删除不再需要的批处理作业,避免不必要地消耗集群存储资源。

版本历史

介绍了R2008a

全部展开

Baidu
map