主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

与工作单元共享代码

当您提交一份作业时,软件会评估不同计算机上该作业的任务。每台计算机必须能够访问评估其任务所需的所有文件。以下部分解释了与工作单元共享代码的基本机制。

注意

有关如何使用 batch 与工作单元共享代码的示例,请参阅 运行批处理作业并从工作单元访问文件

工作单元直接访问文件

如果所有工作单元都可以访问网络上的相同驱动器,它们就可以访问这些共享资源上的必要文件。这是共享数据的首选方法,因为它可以最大限度地减少网络流量。

您必须定义每个工作单元会话的搜索路径,以便它在正确的位置查找文件。您可以定义路径:

  • 通过使用作业的 AdditionalPaths 属性。这是设置路径的首选方法,因为它特定于作业。

    AdditionalPaths 标识要添加到此作业的工作单元会话的命令搜索路径顶部的文件夹。如果还指定了 AttachedFiles,则 AttachedFiles 在工作单元路径上位于 AdditionalPaths 上方。

    当您在创建作业时指定 AdditionalPaths 时,这些设置将与适用的集群配置文件中指定的设置相结合。在创建作业对象后对其进行设置 AdditionalPaths 不会将新设置与配置文件设置相结合,但会覆盖该作业的现有设置。

    AdditionalPaths 默认为空。对于混合平台环境,字符向量可以指定 UNIX® 和 Microsoft® Windows® 样式路径;那些不适合或无法在特定计算机上找到的设置会生成警告并被忽略。

    此示例在混合平台环境中设置 MATLAB® 工作单元路径,以使用中央存储库 /central/funcs 和部门存档 /dept1/funcs 中的函数,它们各自也具有 Windows UNC 路径。

    c = parcluster(); % Use default
    job1 = createJob(c);
    ap = {'/central/funcs','/dept1/funcs', ...
         '\\OurDomain\central\funcs','\\OurDomain\dept1\funcs'};
    job1.AdditionalPaths = ap;
    
  • 通过将 path 命令放入工作单元的任何适当的启动文件中:

    • matlabroot\toolbox\local\startup.m

    • matlabroot\toolbox\parallel\user\jobStartup.m

    • matlabroot\toolbox\parallel\user\taskStartup.m

    可以通过作业的 AttachedFilesAdditionalPaths 属性将这些文件的访问权限传递给工作单元。否则,所使用的每个文件的版本都是工作单元路径上最高的版本。

共享资源中的文件访问可能取决于基于用户名的权限。您可以在启动服务之前通过设置 MJSUSER 文件中的 mjs_def 值来设置 MATLAB 作业调度器和 MATLAB Parallel Server™ 软件的工作单元服务运行时的用户名。对于 Microsoft Windows 操作系统,还有 MJSPASS 用于为指定用户提供帐户密码。有关服务默认设置和 mjs_def 文件的说明,请参阅 MATLAB Parallel Server 系统管理员指南中的 修改 mjs_def 文件 (MATLAB Parallel Server)

与工作单元会话之间传递数据

任务和作业对象上的许多属性被设计用于将代码或数据从客户端传递到调度器、工作单元,并返回。此信息可能包含用于任务评估的 MATLAB 代码,或用于处理的输入数据,或是任务评估产生的输出数据。以下属性有助于实现这种通信:

  • InputArguments - 每个任务的这个属性包含您在创建任务时指定的输入数据。当工作单元进行评估时,这些数据就会传递到函数中。

  • OutputArguments - 每个任务的这个属性包含函数评估的结果。

  • JobData - 作业对象的此属性包含发送给评估该作业任务的每个工作单元的数据。此属性非常有效,因为对于每个作业,数据仅传递给工作单元一次,如果该工作单元正在评估该作业的多个任务,则可以节省时间。(注意:请勿将此属性与 MATLAB 客户端中的任何对象上的 UserData 属性混淆。UserData 中的信息仅在客户端可用,并且不适用于调度器或工作单元。)

  • AttachedFiles - 作业对象的这个属性是一个元胞数组,您可以在其中手动指定发送给工作单元的所有文件夹和文件。在工作单元上,文件被安装,并且属性中指定的条目被添加到工作单元会话的搜索路径中。

    AttachedFiles 包含工作单元评估工作任务需要访问的文件夹和文件列表。该属性的值(默认为空)在集群配置文件或客户端会话中定义。您将属性的值设置为字符向量元胞数组。每个字符向量都是文件夹或文件的绝对或相对路径名。(注意:如果这些文件或文件夹在传输过程中发生变化,或者任何文件夹为空,则可能导致失败或错误。如果指定不存在的路径名,则会生成错误。)

    当工作单元第一次评估某项特定作业的任务时,调度器会将 AttachedFiles 属性中的文件和文件夹传递给工作单元。在工作单元计算机上,会创建一个文件夹结构,该结构与在设置该属性的客户端计算机上访问的文件夹结构完全相同。属性值中列出的那些条目被添加到工作单元会话中的命令搜索路径的顶部。(即使条目的子文件夹包含在文件夹结构中,也不会将其添加到路径中。)要找出文件在工作单元计算机上的位置,请使用在工作单元上运行的代码中的函数 getAttachedFilesFolder

    当工作单元为同一项作业运行后续任务时,它会使用该作业的 AttachedFiles 属性为该作业运行的第一个任务已经设置的文件夹结构。

    当您在创建作业时指定 AttachedFiles 时,该设置将与适用配置文件中指定的设置相结合。在创建作业对象后对其进行设置 AttachedFiles 不会将新设置与配置文件设置相结合,但会覆盖该作业的现有设置。

    AttachedFiles 的转移发生在每个在计算机上运行该特定作业的任务的工作单元身上,无论该计算机上运行了多少个工作单元。通常,当作业完成或下一个作业开始时,附加的文件将从工作单元计算机上删除。

  • AutoAttachFiles - 作业对象的此属性使用逻辑值来指定您希望 MATLAB 对作业中的任务函数和手动附加的文件执行分析,以确定哪些代码文件对工作单元是必要的,并自动将这些文件发送到工作单元。您可以使用配置文件管理器在集群配置文件中设置此属性值,也可以在命令行上的作业对象上以编程方式设置它。

    c = parcluster();
    j = createJob(c);
    j.AutoAttachFiles = true;

    自动附加的受支持代码文件格式包括 MATLAB 文件(.m 扩展名)、P-code 文件 (.p) 和 MEX 文件 (.mex)。请注意,AutoAttachFiles 不包含您的作业的数据文件;使用 AttachedFiles 属性将这些文件明确传输给工作单元。

    使用 listAutoAttachedFiles 获取自动附加到作业的代码文件列表。

    如果启动并行池时使用的集群配置文件的 AutoAttachFiles 设置为 true,则 MATLAB 将对 spmd 代码块、parfor 循环以及其他附加文件进行分析,以确定执行还需要哪些其他代码文件,然后自动将这些文件附加到并行池,以便工作单元可以使用这些代码。

传递 MATLAB 代码用于启动和结束

作为 MATLAB 的会话,工作单元会话每次启动时都会执行其 startup.m 文件。您可以将 startup.m 文件放在工作单元 MATLAB 搜索路径上的任何文件夹中,例如 toolbox/parallel/user

这些附加文件可以在工作会话开始或完成作业任务评估时初始化和清理工作单元会话:

  • 当工作单元运行其作业的第一个任务时,jobStartup.m 会自动在工作单元上执行。

  • 每次工作单元开始评估一项任务时,taskStartup.m 就会工作单元执行。

  • 每次当工作单元被纳入新启动的并行池时,poolStartup.m 都会自动在工作单元上执行。

  • 每次工作单元完成一项任务的评估时,taskFinish.m 就会工作单元执行。

文件夹中提供了这些文件的空版本:

matlabroot/toolbox/parallel/user

您可以编辑这些文件,以包含您希望工作单元在指定时间执行的任何 MATLAB 代码。

或者,您可以创建这些文件的自己的版本并将它们作为 AttachedFiles 属性的一部分传递给作业,或者将其位置的路径名包含在 AdditionalPaths 属性中。

工作单元优先考虑 AttachedFiles 属性中提供的版本,然后考虑 AdditionalPaths 属性中指向的版本。如果这些文件中的任何一个未包含在这些属性中,则工作单元将使用工作单元的 MATLAB 安装的 toolbox/parallel/user 文件夹中的文件版本。

另请参阅

| | |

主题