主要内容

通用调度器的插件脚本

通用调度器接口为配置MATLAB的交互提供了完全的灵活性®客户,matlab工人和第三方调度程序。插件脚本定义了MATLAB如何与您的设置交互。

下表列出了支持的插件脚本函数和它们的计算阶段:金宝app

文件名 阶段
独立人员 提交独立工作
communicatingSubmitFcn.m 提交沟通工作
getJobStateFcn.m 查询工作状态
canceJobFcn.m 取消工作
canceltaskfcn.m.m. 取消任务
deletejobfcn.m. 删除作业
deleteTaskFcn.m 删除任务
施工后CN.m 在创建一个parallel.cluster.Generic实例

这些插件脚本只有在它们有预期的文件名并且位于指定的文件夹中时才会被评估插件脚本位置属性。有关如何配置通用集群配置文件的详细信息,请参见配置使用通用调度程序接口(MATLAB并行服务器)

请注意

独立人员必须存在才能提交一个独立的工作,以及communicatingSubmitFcn.m必须存在以提交通信工作。

示例插件脚本

为了支金宝app持通用调度程序界面的使用,Plugin脚本可用于以下第三方计划程序:

每个安装程序为三种可能的提交模式提供脚本:

  • Shared—客户端可以直接提交给调度程序,并且客户端和集群节点(或机器)有一个共享的文件系统。

  • 远程 - 客户端和群集节点具有共享文件系统,但客户端计算机无法直接提交到调度程序,例如未安装调度程序的客户端实用程序。此模式使用s协议使用远程主机向计划程序提交命令。

  • 非共享—客户端和集群节点没有共享的文件系统。此模式使用s协议使用远程主机将命令提交到调度程序,并使用它sftp协议将作业和任务文件复制到群集文件系统。

每个提交模式在安装文件夹中都有自己的子文件夹。这个子文件夹包含一个自述提供有关如何使用脚本的特定说明的文件。在使用脚本之前,请确定描述网络设置的提交模式。

要运行安装程序,请为调度程序下载相应的支持包,然后在MATLAB客户端中打开它。金宝app安装程序包含一个向导,用于指导您创建群集配置的群集配置文件。

如果你想自定义插件脚本的行为,你可以设置额外的属性,例如FARGNALUBMITARGS..有关更多信息,请参见自定义示例插件脚本的行为(MATLAB并行服务器)

如果其中一个支持包不支持调度程序或群集配置,建议您修改其中一个包的脚本。金宝app有关如何为通用调度程序编写一组插件脚本的详细信息,请参阅编写自定义插件脚本

包装脚本

示例插件脚本使用包装纸简化实现的脚本独立人员communicatingSubmitFcn.m.但是,不需要这些脚本,但是,使用它们是一种很好的做法,使您的代码更可读。此表介绍了这些脚本:

文件名 描述
independentJobWrapper.sh 用于独立人员要使用适当的参数嵌入对MATLAB可执行的调用。它使用环境变量用于可执行文件的位置及其参数。有关它的使用示例,请参见幻灯管调度程序的示例脚本
communicatedjobwrapper.sh. 用于communicatingSubmitFcn.m在群集中分发通信作业。此脚本实现了步骤提交调度程序作业以启动MPI进程.有关它的使用示例,请参见幻灯管调度程序的示例脚本

编写自定义插件脚本

请注意

写自己的插件脚本时,首先要修改最匹配的设置的示例插件脚本是一个很好的做法(参见示例插件脚本).

independentSubmitFcn

当您向通用集群提交独立作业时,独立人员函数在MATLAB客户端会话中执行。

这个函数的声明行必须是:

功能independentSubmitFcn(集群、工作environmentProperties)

Matlab独立作业中的每个任务对应于调度程序上的单个作业。此功能的目的是提交N工作到您的第三方调度程序,其中N是独立作业中的任务数。每项工作必须:

  1. 设置Worker MATLAB所需的五个环境变量,以识别要运行的单个任务。有关更多信息,请参见配置工作环境

  2. 调用适当的MATLAB可执行文件以启动MATLAB工作者并运行任务。有关更多信息,请参见提交调度程序作业以运行MATLAB工作程序

配置工作环境。此表确定了运行单个任务必须在worker MATLAB上设置的五个环境变量和值:

环境变量名称 环境变量值
parallel_server_decode_function. “parallel.cluster.generic.independentDecodeFcn”
parallel_server_storage_constructor. EnvironyProperties.StorageConstructor.
parallel_server_storage_location.
  • 如果客户端和集群节点之间有一个共享的文件系统,则使用environmentProperties。StorageLocation

  • 如果在客户端和群集节点之间没有共享文件系统,请选择对所有群集节点可见的文件夹。有关在客户端和群集节点之间复制作业和任务文件的说明,请参阅在没有共享文件系统的情况下提交

parallel_server_job_location. environmentProperties。JobLocation
并行服务器任务位置 EnvironyProperties.TaskLocations {n}对于N任务

许多调度器支持将复制客户端环境作金宝app为提交命令的一部分。如果是这样,您可以在客户端中设置以前的环境变量,以便调度器可以将它们复制到工作环境中。如果没有,则必须修改提交命令以转发这些变量。

提交要运行的调度程序作业马铃薯工人。一旦在worker上定义了给定作业和任务的5个必需参数,就可以通过调用MATLAB可执行文件来运行该任务。要调用的MATLAB可执行文件定义在environmentProperties.Matlab可执行文件.要传递的参数定义在environmentProperties.MatlabArguments

请注意

如果您无法从客户端计算机直接向您的调度程序提交,请参阅从远程主机提交有关如何使用提交的说明,请参阅s

SLURM调度器的示例脚本。这个脚本显示了带有共享文件系统的SLURM调度器的基本提交函数。有关更完整的示例,请参见示例插件脚本

功能independentSubmitFcn(集群、工作environmentProperties)%指定所需的环境变量。setenv (“PARALLEL_SERVER_DECODE_FUNCTION”“parallel.cluster.generic.independentDecodeFcn”);setenv (“并行\u服务器\u存储\u构造函数”, environmentProperties.StorageConstructor);setenv (“PARALLEL_SERVER_STORAGE_LOCATION”,forionalproperties.storageLocation);setenv ('parallel_server_job_location',EnvironyProperties.joBlocation);指定要在worker上运行的MATLAB可执行文件和参数。%这些在independentJobWrapper.sh脚本中使用。setenv (“PARALLEL_SERVER_MATLAB_EXE”,环境预备..matlabexecutable);setenv ('parallel_server_matlab_args', environmentProperties.MatlabArguments);II = 1:EnvironalProperties.numberoftasks%指定标识要运行的任务所需的环境变量。setenv ('parallel_server_task_location', environmentProperties.TaskLocations{二});%指定将作业提交给SLURM调度程序的命令。% SLURM将自动将环境变量复制到workers。commandToRun ='sbatch --ntasks = 1独立jobwrapper.sh';[cmdFailed, cmdOut] = system(commandrun);结束结束

前面的示例提交了一个简单的bash脚本,independentJobWrapper.sh,给调度员。的independentJobWrapper.sh脚本使用环境变量嵌入MATLAB可执行文件和参数:

/ bin / sh#并行服务器MATLAB EXE-MATLAB可执行的使用#PARALLEL_SERVER_MATLAB_ARGS-MATLABarg游戏使用执行“$ {parallel_server_matlab_exe}”$ {PARALLEL_SERVER_MATLAB_ARGS}

communicatingSubmitFcn

当您向通用集群提交通信作业时communicatingSubmitFcn.m函数在MATLAB客户端会话中执行。

这个函数的声明行必须是:

功能communicatingsubmitfcn(群集,工作,环境议程)

此函数的目的是向调度程序提交单个作业。这个工作必须:

  1. 设置MATLAB工作人员识别要运行的作业所需的四个环境变量。有关更多信息,请参见配置工作环境

  2. 调用MPI来分配您的工作NMatlab工人。N对应于中指定的最大值numworkersrange.MATLAB作业的属性。有关详细信息,请参阅提交调度程序作业以启动MPI进程

配置工作环境。该表确定了运行通信作业的任务时必须在worker MATLAB上设置的四个环境变量和值:

环境变量名称 环境变量值
parallel_server_decode_function. “parallel.cluster.generic.communicatingDecodeFcn”
parallel_server_storage_constructor. EnvironyProperties.StorageConstructor.
parallel_server_storage_location.
  • 如果客户端和集群节点之间有一个共享的文件系统,则使用environmentProperties。StorageLocation

  • 如果客户机和群集节点之间没有共享文件系统,请选择存在于所有群集节点上的文件夹。有关在客户端和群集节点之间复制作业和任务文件的说明,请参阅在没有共享文件系统的情况下提交

parallel_server_job_location. environmentProperties。JobLocation

许多调度器支持将复制客户端环境作金宝app为提交命令的一部分。如果是这样,您可以在客户端中设置以前的环境变量,以便调度器可以将它们复制到工作环境中。如果没有,则必须修改提交命令以转发这些变量。

提交计划程序作业以启动MPI进程。定义给定作业的四个必需参数后,通过启动运行您的作业N工人Matlab流程使用mpiexecmpiexec软件与并行计算工具箱™一起提供,它可以实现消息传递接口(MPI)标准,以允许Worker Matlab进程之间的通信。有关的更多信息mpiexec,看看MPICH主页

要运行您的工作,您必须将作业提交到调度程序,执行以下步骤。注意matlabroot.指工作节点上的MATLAB安装位置。

  1. 要求N从调度程序的进程。N对应于中指定的最大值numworkersrange.Matlab工作的财产。

  2. 称呼mpiexec启动工作者MATLAB流程。从每个主机启动的工作者MATLAB进程的数量应匹配调度程序分配的进程数。的mpiexec可执行位于matlabroot/bin/mw\u mpiexec

    mpiexec命令自动将环境变量转发给启动的进程。因此,请确保所列环境变量配置工作环境在运行前设置mpiexec

    要了解有关的选项的更多信息,请执行以下操作:mpiexec,请参阅使用Hydra Process Manager

请注意

有关前面步骤的完整示例,请参阅communicatedjobwrapper.sh.具有任何示例插件脚本的脚本示例插件脚本.如果您需要编写自己的脚本,可以使用此脚本作为起点。

SLURM调度器的示例脚本。下面的脚本显示了带有共享文件系统的SLURM调度器的基本提交函数。

提交的作业包含在Bash脚本中,communicatedjobwrapper.sh..此脚本实现相关步骤提交调度程序作业以启动MPI进程对于幻灯管调度程序。有关更完整的示例,请参见示例插件脚本

功能communicatingsubmitfcn(群集,工作,环境议程)%指定四个必需的环境变量。setenv (“PARALLEL_SERVER_DECODE_FUNCTION”“parallel.cluster.generic.communicatingDecodeFcn”);setenv (“并行\u服务器\u存储\u构造函数”, environmentProperties.StorageConstructor);setenv (“PARALLEL_SERVER_STORAGE_LOCATION”,forionalproperties.storageLocation);setenv ('parallel_server_job_location',EnvironyProperties.joBlocation);指定要在worker上运行的MATLAB可执行文件和参数。%指定群集节点上MATLAB安装的位置。%这些在通信的jobwrapper .sh脚本中使用。setenv (“PARALLEL_SERVER_MATLAB_EXE”,环境预备..matlabexecutable);setenv ('parallel_server_matlab_args', environmentProperties.MatlabArguments);setenv (“PARALLEL_SERVER_CMR”,cluster.clustermatlabroot);numberoftasks = EnvironalProperties.numberoftasks;%指定将作业提交给Slurm Scheduler的命令%请求与作业中的任务数量相同的进程。% SLURM将自动将环境变量复制到workers。commandToRun = sprintf (“sbatch——ntasks = % d communicatingJobWrapper.sh ', numberOfTasks);[cmdFailed, cmdOut] = system(commandrun);结束

getjobstatefcn.

查询使用泛型群集创建的作业的状态时,getJobStateFcn.m函数在MATLAB客户端会话中执行。这个函数的声明行必须是:

功能state=getJobStateFcn(集群、作业、状态)

当使用第三方计划程序时,计划程序可能拥有比工具箱从本地作业存储位置可用的更多有关作业的最新信息。如果使用非共享文件系统,这种情况尤其如此,远程文件系统可能会在将大型数据文件传播回本地数据位置时速度较慢。

要从调度程序检索信息,请添加一个调用的函数getJobStateFcn.m插件脚本位置你的集群。

传递给该函数的状态是从本地作业存储派生的状态。然后,该函数体可以查询调度程序,以确定作业的更准确的状态,并在存储状态的位置返回该状态。为此目的编写的函数必须返回作业对象状态的有效值。允许的值是'待办的'“排队”“跑步”“完成”, 要么'失败的'

有关将MATLAB任务与其相应的调度程序作业ID配对的说明,请参见使用通用调度程序管理作业

canceljobfcn.

当您取消使用泛型群集创建的作业时,cancelJobFcn.m函数在MATLAB客户端会话中执行。这个函数的声明行必须是:

功能好吧= cancelJobFcn(集群,工作)

取消使用通用计划程序界面创建的作业时,默认情况下,此操作仅影响存储器中的作业数据。若要取消计划程序上的相应作业,必须向计划程序提供有关执行内容和时间的说明。为此,添加一个名为cancelJobFcn.m插件脚本位置你的集群。

然后,此函数的主体可以向调度程序发送命令,例如,从队列中删除相应的作业。函数必须返回一个逻辑标量,指示取消调度程序上作业的成功或失败。

有关将MATLAB任务与其相应的调度程序作业ID配对的说明,请参见使用通用调度程序管理作业

cancelTaskFcn

取消使用常规群集创建的任务时canceltaskfcn.m.m.函数在MATLAB客户端会话中执行。这个函数的声明行必须是:

功能OK = CANCOTTASKFCN(群集,任务)

当您取消使用通用调度器接口创建的任务时,默认情况下,这只影响存储中的任务数据。若要取消调度程序上的相应作业,必须向调度程序提供关于做什么以及何时做的说明。为此,添加一个被调用的函数canceltaskfcn.m.m.插件脚本位置你的集群。

然后,该函数体可以向调度程序发送命令,例如,从调度程序队列中删除相应的作业。该函数必须返回一个逻辑标量,指示在调度器上取消作业的成功或失败。

有关将MATLAB任务与其相应的调度程序作业ID配对的说明,请参见使用通用调度程序管理作业

deleteJobFcn

删除使用泛型群集创建的作业时,deletejobfcn.m.函数在MATLAB客户端会话中执行。这个函数的声明行必须是:

功能DELOTETASKFCN(群集,任务)

默认情况下,删除使用通用调度程序接口创建的作业时,这仅影响存储中的作业数据。要删除调度程序上的相应作业,您必须提供有关该做什么以及何时对调度程序执行的说明。为此,添加一个被调用的函数deletejobfcn.m.插件脚本位置你的集群。

然后,该函数的主体可以向调度器发送命令,例如,以从调度程序队列中删除相应的作业。

有关将MATLAB任务与其相应的调度程序作业ID配对的说明,请参见使用通用调度程序管理作业

删除任务FCN

当您删除使用泛型群集创建的任务时,deleteTaskFcn.m函数在MATLAB客户端会话中执行。这个函数的声明行必须是:

功能DELOTETASKFCN(群集,任务)

删除使用通用调度程序界面创建的任务时,默认情况下,这仅影响存储中的任务数据。要在调度程序上删除相应的作业,您必须提供有关该做什么以及何时将其执行到调度程序的说明。为此,添加一个被调用的函数deleteTaskFcn.m插件脚本位置你的集群。

然后,该函数体可以向调度程序发送命令,例如,从调度程序队列中删除相应的作业。

有关将MATLAB任务与其相应的调度程序作业ID配对的说明,请参见使用通用调度程序管理作业

postconstructfcn.

在MATLAB中创建集群实例后施工后CN.m函数在MATLAB客户端会话中执行。例如,以下代码行创建了群集的实例并运行postconstructfcn.与之相关的功能“myProfile”群简介:

c = parcluster ('我的简历');

宣言线postconstructfcn.函数必须:

功能postConstructFCN(群集)

如果在使用集群之前需要对其执行自定义配置,请添加一个名为施工后CN.m插件脚本位置你的集群。这个函数体可以包含您需要的任何额外的设置步骤。

添加用户自定义

如果您需要在运行时修改插件脚本的功能,那么使用AdditionalProperties属性的通用调度器接口。

以SLURM调度器为例。SLURM的submit命令接受a——节点列表允许您指定要运行的节点的参数。您可以在不必修改插件脚本的情况下更改此参数的值。要添加此功能,请包括以下代码模式独立人员communicatingSubmitFcn.m脚本:

%Basic Slurm提交命令submitcommand =“斯拜奇”%检查是否定义了属性如果ISPROP(cluster.additionalproperties,“NodeList”%添加适当的参数和值提交字符串submitCommand = [submitCommand’--诺德利斯特cluster.additionalproperties.nodelist];结束

有关如何使用此编码模式的示例,请参阅脚本的非正式提交功能示例插件脚本

从群集概要文件管理器设置附加属性

在上一个示例中对脚本的修改,可以添加一个AdditionalProperties进入您的通用群集配置文件以指定要使用的节点列表。这提供了一种在您共享群集配置文件的任何人的版本中添加到插件脚本的自定义的方法。

要添加节点主义者属性到您的群集个人资料:

  1. 通过选择,从MATLAB桌面启动集群配置文件管理器平行的>管理群集配置文件

  2. 选择通用集群的配置文件,然后单击编辑

  3. 导航到AdditionalProperties表格,然后单击添加

  4. 进入节点主义者随着名称

  5. 字符串随着类型

  6. 设定价值到节点列表。

属性设置AdditionalProperties马铃薯命令行

修改你的脚本添加用户自定义,您可以通过在提交作业之前设置群集对象的相应属性来编辑来自MATLAB命令行的节点列表:

c = parcluster;c.AdditionalProperties.NodeList ='gpunodename'; j=c.batch('myscript');

显示AdditionalProperties对象以查看所有当前定义的属性及其值:

>> c.AdditionalProperties ans = AdditionalProperties with properties: ClusterHost: 'myClusterHost' NodeList: 'gpuNodeName' RemoteJobStorageLocation: '/tmp/jobs'

使用通用调度程序管理作业

作业管理的第一个要求是确定调度程序上对应于MATLAB作业对象的作业。当您向调度程序提交作业时,在submit函数中执行提交的命令可以从调度程序返回有关作业的一些数据。该数据通常包括一个作业ID。通过将调度程序作业ID与MATLAB作业对象存储在一起,您以后可以在向调度程序发送管理命令时通过该作业ID引用调度程序作业。类似地,您可以存储MATLAB任务id映射到调度程序任务id,以帮助管理单个任务。存储集群数据的工具箱函数为setJobClusterData

保存作业调度程序数据

这个例子展示了如何修改独立人员函数解析提交给Slurm Scheduler的每个命令的输出。您可以使用正则表达式来提取每个任务的调度程序作业ID,然后将其存储使用setJobClusterData

从SLURM sbatch输出中提取调度程序作业ID的模式searchPattern ='。*提交批处理作业([0-9] +)。*';jobIDs = cell(numberOfTasks, 1);II = 1:numberoftasks setEnv('parallel_server_task_location', environmentProperties.TaskLocations{二});commandToRun ='sbatch --ntasks = 1独立jobwrapper.sh';[cmdFailed, cmdOut] = system(commandrun);jobids {ii} = regexp(cmdout,searchpattern,“令牌”“一次”);结束%在作业群集数据上设置作业IDsetJobClusterData(作业,结构('clusterjobids', {jobIDs}));

检索作业计划程序数据

这个例子修改了cancelJobFcn.m取消SLURM调度程序上相应的作业。本例使用getJobClusterData检索作业计划程序数据。

功能OK = CANCELJOBFCN(群集,作业)%获取此作业的计划程序信息data = cluster.getjobclusterData(作业);jobids = data.clusterjobids;II = 1:长度(乔迪斯)%告诉Slurm Scheduler取消作业commandToRun = sprintf (“scancel“% s”,乔迪斯{II});[cmdFailed, cmdOut] = system(commandrun);结束好的=真;

从远程主机提交

如果MATLAB客户端无法直接提交给您的调度程序,请使用parallel.cluster.remoteClustraccess.在远程主机上建立连接并运行命令。

此对象使用s协议,因此需要s远程主机上运行的守护服务。要建立连接,必须提供远程主机的用户名和密码,或者提供有效的标识文件。

以下代码在远程主机上执行命令,remoteHostname,作为用户,用户

%这将提示输入用户的密码访问= parallel.cluster.RemoteClusterAccess.getConnectedAccess ('remotehostname'“用户”);%在remoteHostname上执行命令[cmdFailed, cmdOut] = access.runCommand(commandToRun);

有关使用远程主机提交的插件脚本示例,请参阅示例插件脚本

在没有共享文件系统的情况下提交

如果MATLAB客户端与集群节点没有共享文件系统,请使用parallel.cluster.remoteClustraccess.要在客户端和群集节点之间建立连接和复制作业和任务文件。

此对象使用s协议,因此需要s远程主机上运行的守护服务。要建立连接,必须提供远程主机的用户名和密码,或者提供有效的标识文件。

当使用非共享提交时,必须同时指定要在客户机上使用的本地作业存储位置和要在集群上使用的远程作业存储位置。远程作业存储位置必须对集群的所有节点可用。

parallel.cluster.remoteClustraccess.使用文件镜像将本地作业和任务文件与集群上的文件镜像连续同步。当文件镜像首次启动时,本地作业和任务文件将上载到远程作业存储位置。由于作业执行,文件镜像持续检查新文件和更新的远程作业存储位置,并将文件复制到客户端上的本地存储。此过程确保MATLAB客户端始终具有在调度程序上执行的作业和任务的最新视图。

此示例连接到远程主机,remoteHostname,作为用户,用户,并建立/远程/存储作为要进行同步的远程集群存储位置。然后启动作业的文件镜像,将作业的本地文件复制到/远程/存储然后将所有更改同步回本地机器。

%这将提示输入用户的密码访问= parallel.cluster.RemoteClusterAccess.getConnectedAccessWithMirror ('remotehostname''/远程/存储'“用户”);%启动文件镜像为作业访问.startmirrorforjob(作业);

有关没有共享文件系统的插件脚本的示例,请参阅示例插件脚本

相关话题