插件脚本通用的调度器

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

下表列出了支持插件脚本函数和它们在评估阶段:金宝app

文件名称 阶段
independentSubmitFcn.m 提交一个独立的工作
communicatingSubmitFcn.m 提交一个工作交流
getJobStateFcn.m 查询的状态工作
canceJobFcn.m 取消工作
cancelTaskFcn.m 取消任务
deleteJobFcn.m 删除一个工作
deleteTaskFcn.m 删除一个任务
postConstructFcn.m 在创建一个parallel.cluster.Generic实例

这些插件脚本只评估是否有预期的文件名和位于指定的文件夹PluginScriptsLocation集群的属性。有关如何配置一个通用的更多信息集群配置文件,看看使用通用调度程序接口配置(MATLAB并行服务器)。

请注意

independentSubmitFcn.m必须存在于一个独立的工作,communicatingSubmitFcn.m必须提交一份沟通工作。

示例插件脚本

支持使金宝app用通用调度程序接口,插件脚本可用于以下第三方调度器:

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

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

  • 远程客户端和集群节点有一个共享的文件系统,但客户端机器不能直接提交给调度器,当客户端公用事业等的调度程序没有安装。这个模式使用ssh协议提交命令调度器使用远程主机。

  • 非共享——客户端和集群节点没有一个共享文件系统。这个模式使用ssh协议提交命令调度器使用远程主机,它使用sftp协议的工作和任务文件复制到集群文件系统。

每个提交模式都有自己的子文件夹内的安装文件夹。这个文件夹包含一个自述文件提供具体说明如何使用脚本。在使用脚本之前,决定哪些提交模式描述了你的网络设置。

运行安装程序,下载适当的支持包调度器,并在MATLAB客户端打开它。金宝app安装程序包括一个向导指导您完成创建一个集群配置文件为您的集群配置。

如果你想定制插件的行为脚本,您可以设置附加属性,例如AdditionalSubmitArgs。有关更多信息,请参见定制示例插件脚本的行为(MATLAB并行服务器)。

如果你的调度器或集群配置不支持的一个支持包,建议您修改其中一个的脚本包。金宝app为更多的信息关于如何编写一组插件脚本通用的调度器,明白了编写自定义插件脚本

包装器脚本

示例插件脚本使用包装器脚本简化的实现independentSubmitFcn.mcommunicatingSubmitFcn.m。然而,这些脚本不需要使用它们是一个很好的实践使你的代码更加可读。此表描述了这些脚本:

文件名称 描述
independentJobWrapper.sh 中使用的independentSubmitFcn.m嵌入调用MATLAB执行适当的参数。它使用环境变量对可执行文件的位置及其参数。其使用的一个示例,请参阅粘调度器很多示例脚本
communicatingJobWrapper.sh 中使用的communicatingSubmitFcn.m在集群分发一个沟通工作。这个脚本实现的步骤提交作业调度器推出MPI的过程。其使用的一个示例,请参阅粘调度器很多示例脚本

编写自定义插件脚本

请注意

在编写自己的插件脚本时,这是一个很好的练习开始通过修改的一个示例插件脚本最匹配你的设置(请参阅示例插件脚本)。

independentSubmitFcn

当你提交一份独立的工作,一个通用的集群independentSubmitFcn.m在MATLAB函数执行客户端会话。

这个函数的声明线必须:

函数independentSubmitFcn(集群、工作environmentProperties)

MATLAB独立工作中的每个任务对应于一个工作在你的调度器。这个函数是提交的目的N工作到第三方调度器,N任务的数量在独立工作。这些工作必须:

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

  2. 调用合适的MATLAB执行启动MATLAB工人和运行任务。有关更多信息,请参见提交调度器MATLAB运行工人的就业机会

配置工作环境。这个表识别五个环境变量和值必须设置职工MATLAB运行一个单独的任务:

环境变量名称 环境变量值
PARALLEL_SERVER_DECODE_FUNCTION “parallel.cluster.generic.independentDecodeFcn”
PARALLEL_SERVER_STORAGE_CONSTRUCTOR environmentProperties.StorageConstructor
PARALLEL_SERVER_STORAGE_LOCATION
  • 如果你有一个共享文件系统客户端和集群节点之间,使用environmentProperties.StorageLocation

  • 如果你没有一个共享文件系统客户端和集群节点之间,选择一个文件夹可见到所有集群节点。对复制的工作指令和任务文件客户端和集群节点之间,明白了没有共享文件系统提交

PARALLEL_SERVER_JOB_LOCATION environmentProperties.JobLocation
PARALLEL_SERVER_TASK_LOCATION environmentProperties.TaskLocation {n}n任务

许多调度程序支持复制客户端环境作金宝app为提交命令的一部分。如果是这样,你可以在客户端设置之前的环境变量,所以调度器可以将其复制到工作环境。如果没有,你必须修改提交命令这些变量。

提交运行调度工作MATLAB工人。一旦所需的五参数对于一个给定的工作和任务上定义一个工人,任务是通过调用MATLAB运行可执行文件与合适的参数。MATLAB调用定义在可执行environmentProperties.MatlabExecutable。通过定义的参数environmentProperties.MatlabArguments

请注意

如果你不能直接提交调度程序从客户端机器,看看提交从远程主机说明如何提交使用ssh

粘调度器很多示例脚本。这个脚本显示了粘调度器很多基本提交函数共享文件系统。更完整的示例,请参阅示例插件脚本

函数independentSubmitFcn(集群、工作environmentProperties)%指定所需的环境变量。setenv (“PARALLEL_SERVER_DECODE_FUNCTION”,“parallel.cluster.generic.independentDecodeFcn”);setenv (“PARALLEL_SERVER_STORAGE_CONSTRUCTOR”,environmentProperties.StorageConstructor);setenv (“PARALLEL_SERVER_STORAGE_LOCATION”,environmentProperties.StorageLocation);setenv (“PARALLEL_SERVER_JOB_LOCATION”,environmentProperties.JobLocation);%指定MATLAB可执行和运行参数的工人。这些用于independentJobWrapper %。sh脚本。setenv (“PARALLEL_SERVER_MATLAB_EXE”,environmentProperties.MatlabExecutable);setenv (“PARALLEL_SERVER_MATLAB_ARGS”,environmentProperties.MatlabArguments);2 = 1:environmentProperties.NumberOfTasks%指定环境变量需要确定哪些任务运行。setenv (“PARALLEL_SERVER_TASK_LOCATION”,environmentProperties.TaskLocations{二});%指定命令提交工作粘调度器很多。%粘会自动将环境变量复制到很多工人。commandToRun =“sbatch——ntasks = 1 independentJobWrapper.sh”;[cmdFailed, cmdOut] =系统(commandToRun);结束结束

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

#/ bin / sh# PARALLEL_SERVER_MATLAB_EXE - MATLAB可执行的使用# PARALLEL_SERVER_MATLAB_ARGS - MATLABarg游戏使用执行" $ {PARALLEL_SERVER_MATLAB_EXE} "$ {PARALLEL_SERVER_MATLAB_ARGS}

communicatingSubmitFcn

当你提交到一个通用的集群通信工作,communicatingSubmitFcn.m在MATLAB函数执行客户端会话。

这个函数的声明线必须:

函数communicatingSubmitFcn(集群、工作environmentProperties)

这个函数的目的是提交一个工作你的调度器。这个工作必须:

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

  2. 调用MPI分配你的工作NMATLAB的工人。N对应于指定的最大值NumWorkersRangeMATLAB的工作的性质。有关更多信息,请参见提交作业调度器推出MPI的过程

配置工作环境。这个表列出了这四个环境变量和值必须设置工人MATLAB运行任务的沟通工作:

环境变量名称 环境变量值
PARALLEL_SERVER_DECODE_FUNCTION “parallel.cluster.generic.communicatingDecodeFcn”
PARALLEL_SERVER_STORAGE_CONSTRUCTOR environmentProperties.StorageConstructor
PARALLEL_SERVER_STORAGE_LOCATION
  • 如果你有一个共享文件系统客户端和集群节点之间,使用environmentProperties.StorageLocation

  • 如果你没有一个共享文件系统客户端和集群节点之间,存在于所有集群节点选择一个文件夹。对复制的工作指令和任务文件客户端和集群节点之间,明白了没有共享文件系统提交

PARALLEL_SERVER_JOB_LOCATION environmentProperties.JobLocation

许多调度程序支持复制客户端环境作金宝app为提交命令的一部分。如果是这样,你可以在客户端设置之前的环境变量,所以调度器可以将其复制到工作环境。如果没有,你必须修改提交命令这些变量。

提交作业调度器推出MPI的过程。在您定义所需的四个参数对于一个给定的工作,通过推出运行您的工作N工人用MATLAB程序使用mpiexecmpiexec是软件附带的并行计算工具箱™实现消息传递接口(MPI)标准,允许工人MATLAB之间的通信过程。更多信息mpiexec,请参阅MPICH主页

运行你的工作,你必须提交作业调度程序,执行以下步骤。请注意,matlabroot指的是MATLAB在你的工人节点上安装位置。

  1. 请求N进程调度程序。N对应于指定的最大值NumWorkersRangeMATLAB的工作的性质。

  2. 调用mpiexec开始工人的MATLAB程序。工人数量的MATLAB程序开始每个主机上应该匹配过程的数量分配你的调度器。的mpiexec可执行文件位于matlabroot / bin / mw_mpiexec

    mpiexec命令自动转发环境变量来启动流程。因此,确保环境变量中列出配置工作环境之前设置运行mpiexec

    了解更多关于选择mpiexec,请参阅使用Hydra进程管理器

请注意

前面的步骤的一个完整的示例,请参阅communicatingJobWrapper.sh脚本提供任何示例插件的脚本示例插件脚本。使用这个脚本作为起点如果您需要编写自己的脚本。

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

提交的工作包含在一个bash脚本,communicatingJobWrapper.sh。这个脚本实现的相关步骤提交作业调度器推出MPI的过程粘调度器很多。更完整的示例,请参阅示例插件脚本

函数communicatingSubmitFcn(集群、工作environmentProperties)%指定所需的四个环境变量。setenv (“PARALLEL_SERVER_DECODE_FUNCTION”,“parallel.cluster.generic.communicatingDecodeFcn”);setenv (“PARALLEL_SERVER_STORAGE_CONSTRUCTOR”,environmentProperties.StorageConstructor);setenv (“PARALLEL_SERVER_STORAGE_LOCATION”,environmentProperties.StorageLocation);setenv (“PARALLEL_SERVER_JOB_LOCATION”,environmentProperties.JobLocation);%指定MATLAB可执行和运行参数的工人。% MATLAB的指定位置安装在集群节点。这些用于communicatingJobWrapper %。sh脚本。setenv (“PARALLEL_SERVER_MATLAB_EXE”,environmentProperties.MatlabExecutable);setenv (“PARALLEL_SERVER_MATLAB_ARGS”,environmentProperties.MatlabArguments);setenv (“PARALLEL_SERVER_CMR”,cluster.ClusterMatlabRoot);numberOfTasks = environmentProperties.NumberOfTasks;%指定命令提交作业的粘调度器很多%的要求尽可能多的流程任务的工作。%粘会自动将环境变量复制到很多工人。commandToRun = sprintf (“sbatch——ntasks = % d communicatingJobWrapper.sh ',numberOfTasks);[cmdFailed, cmdOut] =系统(commandToRun);结束

getJobStateFcn

当你查询的状态工作创建一个通用的集群getJobStateFcn.m在MATLAB函数执行客户端会话。这个函数的声明线必须:

函数状态= getJobStateFcn(集群、工作状态)

当使用一个第三方的调度器,它是可能的,调度程序可以有更多最新的信息关于你的工作是什么可以工具箱从本地存储位置的工作。这种情况尤其如此,如果使用非共享的文件系统,远程文件系统可能是缓慢的地方传播大型数据文件回到你的本地数据的位置。

从调度器来检索信息,添加一个函数调用getJobStateFcn.mPluginScriptsLocation你的集群。

国家传递给这个函数是国家来自本地工作存储。这个函数的身体可以查询调度程序来确定更准确的工作状态并返回它的存储状态。为此写的函数必须返回一个有效的值为一个工作对象的状态。允许的值是“等待”,“排队”,“奔跑”,“完成”,或“失败”

为说明配对MATLAB与相应的调度工作任务ID,明白了管理工作与通用的调度器

cancelJobFcn

当你取消工作创建一个通用的集群cancelJobFcn.m在MATLAB函数执行客户端会话。这个函数的声明线必须:

函数好吧= cancelJobFcn(集群,工作)

当你取消工作使用通用调度程序创建的接口,默认情况下这个动作只会影响工作的数据存储。取消相应的工作调度程序,您必须提供说明要做什么和什么时候去做调度器。为了达到这个目标,添加一个函数调用cancelJobFcn.mPluginScriptsLocation你的集群。

这个函数的身体可以发送命令调度程序,例如,从队列中删除相应的工作。函数必须返回一个逻辑标量表示取消工作的成功或失败的调度器。

为说明配对MATLAB与相应的调度工作任务ID,明白了管理工作与通用的调度器

cancelTaskFcn

当你取消任务创建一个通用的集群,cancelTaskFcn.m在MATLAB函数执行客户端会话。这个函数的声明线必须:

函数好吧= cancelTaskFcn(集群,任务)

当你取消一个任务使用通用调度程序创建的接口,默认情况下,这只会影响任务的数据存储。取消相应的工作调度程序,您必须提供说明要做什么和什么时候去做调度器。为了达到这个目标,添加一个函数调用cancelTaskFcn.mPluginScriptsLocation你的集群。

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

为说明配对MATLAB与相应的调度工作任务ID,明白了管理工作与通用的调度器

deleteJobFcn

当你删除一个工作创建一个通用的集群deleteJobFcn.m在MATLAB函数执行客户端会话。这个函数的声明线必须:

函数deleteTaskFcn(集群,任务)

当你删除一个工作使用通用调度程序创建的接口,默认情况下,这只会影响工作的数据存储。删除对应的工作调度程序,您必须提供说明要做什么和什么时候去做调度器。为了达到这个目标,添加一个函数调用deleteJobFcn.mPluginScriptsLocation你的集群。

这个函数的身体可以发送命令调度程序,例如,从调度器队列删除相应的工作。

为说明配对MATLAB与相应的调度工作任务ID,明白了管理工作与通用的调度器

deleteTaskFcn

当你删除一个任务创建一个通用的集群deleteTaskFcn.m在MATLAB函数执行客户端会话。这个函数的声明线必须:

函数deleteTaskFcn(集群,任务)

当你删除一个任务使用通用调度程序创建的接口,默认情况下,这只会影响任务的数据存储。删除相应的工作调度程序,您必须提供说明要做什么和什么时候去做调度器。为了达到这个目标,添加一个函数调用deleteTaskFcn.mPluginScriptsLocation你的集群。

这个函数的身体可以发送命令调度程序,例如,删除相应的工作从队列调度器。

为说明配对MATLAB与相应的调度工作任务ID,明白了管理工作与通用的调度器

postConstructFcn

在您创建的实例集群在MATLABpostConstructFcn.m在MATLAB函数执行客户端会话。例如,下面的代码创建一个集群,运行一个实例postConstructFcn相关函数“myProfile”群简介:

c = parcluster (“myProfile”);

宣言的postConstructFcn函数必须:

函数postConstructFcn(集群)

如果您需要执行自定义的配置集群在使用它之前,添加一个函数调用postConstructFcn.mPluginScriptsLocation你的集群。这个函数的身体可以包含任何额外的设置步骤你需要。

添加用户自定义

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

作为一个例子,考虑粘调度器很多。提交命令粘接受很多——节点列表观点:允许您指定您想要的节点上运行。你可以改变这个参数的值而不必修改你的插件的脚本。添加这个功能,包括在你的下面的代码模式independentSubmitFcn.mcommunicatingSubmitFcn.m脚本:

%基本粘提交很多命令submitCommand =“sbatch”;%检查属性的定义如果isprop (cluster.AdditionalProperties的节点列表)%添加合适的参数和值提交字符串submitCommand = [submitCommand”——节点列表= 'cluster.AdditionalProperties.NodeList];结束

对于如何使用这个编码模式的一个例子,看到非公用提交脚本的功能示例插件脚本

设置AdditionalProperties从集群配置文件管理器

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

添加节点列表您的集群配置文件属性:

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

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

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

  4. 输入节点列表随着的名字

  5. 字符串随着类型

  6. 设置价值节点的列表。

设置AdditionalProperties从MATLAB命令行

与修改脚本添加用户自定义的列表,您可以编辑节点从MATLAB命令行通过设置适当的集群对象的属性之前提交一份工作:

c = parcluster;c.AdditionalProperties。节点列表=“gpuNodeName”;j = c.batch (“myScript”);

显示AdditionalProperties所有当前定义对象属性和它们的值:

> > c。添加itionalProperties ans = AdditionalProperties with properties: ClusterHost: 'myClusterHost' NodeList: 'gpuNodeName' RemoteJobStorageLocation: '/tmp/jobs'

管理工作与通用的调度器

作业管理的第一个必要条件是确定相对应的工作调度器MATLAB的工作对象。当你提交作业调度器,并提交你的提交的命令函数可以返回一些数据调度的工作。ID。这些数据通常包括工作通过存储调度器工作ID与MATLAB的工作对象,您稍后可以参考调度程序工作时通过这份工作ID给调度器管理命令。类似地,您可以存储一个MATLAB任务id映射到调度器id来帮助管理个人工作任务。工具箱函数,存储集群数据setJobClusterData

保存作业调度器数据

这个例子展示了如何修改independentSubmitFcn.m函数解析每个命令的输出提交粘调度器很多。您可以使用正则表达式来提取每个任务调度器任务ID,然后将其存储使用setJobClusterData

%模式提取ID从粘sbatch很多输出调度工作searchPattern =”。*提交批处理作业([0 - 9]+)*’。;jobIDs =细胞(numberOfTasks, 1);2 = 1:numberOfTasks setenv (“PARALLEL_SERVER_TASK_LOCATION”,environmentProperties.TaskLocations{二});commandToRun =“sbatch——ntasks = 1 independentJobWrapper.sh”;[cmdFailed, cmdOut] =系统(commandToRun);jobIDs {2} = regexp (cmdOut searchPattern,“令牌”,“一次”);结束%设置集群id的工作数据的工作集群。setJobClusterData(工作、结构(“ClusterJobIDs”,{jobIDs}));

检索作业调度器数据

这个例子中修改cancelJobFcn.m取消在粘调度器很多相应的工作。本例使用getJobClusterData检索作业调度器数据。

函数好吧= cancelJobFcn(集群,工作)%得到这份工作的调度信息data = cluster.getJobClusterData(工作);jobIDs = data.ClusterJobIDs;2 = 1:长度(jobIDs)%告诉粘调度器取消很多工作commandToRun = sprintf (“scancel“% s”,jobIDs{二});[cmdFailed, cmdOut] =系统(commandToRun);结束好吧= true;

提交从远程主机

如果MATLAB客户端不能直接提交你的调度程序,使用parallel.cluster.RemoteClusterAccess建立一个连接和在远程主机上运行命令。

这个对象使用ssh协议,因此需要一个ssh守护进程运行在远程主机上的服务。要建立一个连接,您必须提供一个远程主机的用户名和密码,或一个有效的身份文件。

下面的代码执行一个命令在远程主机上,remoteHostname作为用户,用户

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

使用远程主机插件脚本的一个示例提交,看到远程提交模式示例插件脚本

没有共享文件系统提交

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

这个对象使用ssh协议,因此需要一个ssh守护进程运行在远程主机上的服务。要建立一个连接,您必须提供一个用户名和密码远程主机或有效身份证明文件。

当使用非共享提交时,您必须指定一个地方工作存储位置上使用客户端和远程工作存储位置在集群上使用。远程工作存储位置必须用于集群的所有节点。

parallel.cluster.RemoteClusterAccess使用文件镜像连续同步本地工作和任务文件在集群上。当文件镜像第一次启动时,上传本地工作和任务文件到远程工作存储位置。工作执行,文件镜像不断检查远程工作存储位置为新文件和更新,并将文件复制到本地存储在客户机上。这个过程保证了MATLAB客户总是有一个最新的视图的工作和任务调度程序执行。

这个例子连接到远程主机,remoteHostname作为用户,用户,建立/远程/存储随着远程集群存储位置同步。然后它开始文件镜像工作,复制的本地文件的工作/远程/存储在集群上,然后同步回本地机器的任何更改。

%这将提示输入用户的密码访问= parallel.cluster.RemoteClusterAccess.getConnectedAccessWithMirror (“remoteHostname”,/远程/存储的,“用户”);%开始为工作文件镜像access.startMirrorForJob(工作);

例如插件脚本没有共享文件系统,看到非公用提交模式示例插件脚本

相关的话题