【问题标题】:tasknumber in MATLAB distributed jobs?MATLAB分布式作业中的tasknumber?
【发布时间】:2011-02-28 22:47:51
【问题描述】:

我正在集群上运行分布式作业。我需要执行一个脚本,在最后一个任务完成时向我发送一封电子邮件(确切地说,所有任务都完成了)。我已经准备好我的脚本,但我不知道如何去寻找任务完成。是否有类似于 labindex 的任务 ID?

我想将此电子邮件功能构建到工作中的原因是,我可以在提交后退出 MATLAB 并在完成后收集我的数据。这样我就不会浪费资源经常 ping 它来获取它的状态。

【问题讨论】:

  • 您使用的是哪个调度程序? MathWorks“jobmanager”,还是别的什么? (jobmanager 中的回调依赖于仍在执行的 MATLAB,所以我认为您将无法使用它 - 其他调度程序(例如 LSF)具有支持电子邮件的内置功能)

标签: matlab parallel-processing distributed-computing cluster-computing


【解决方案1】:
jobMgr = findResource(parameters for your cluster's job manager...);

job = createJob(jobMgr);
set(job, 'JobData', yourdata);
set(job, 'MaximumNumberOfWorkers', yourmaxworkers);
set(job, 'PathDependencies', yourpathdeps);
set(job, 'FileDependencies', yourfiledeps);
set(job, 'Timeout', yourtimeout);

for m = 1:numjobs
   task(m) = createTask(job, @parallelfoo, 1, {m});

   % Calls taskFinish when the task completes
   set(task(m), 'FinishedFcn', {@taskFinish, m});
end

在其他地方,您将定义一个函数 taskFinish,它会在每个任务完成时获取回调。

function taskFinish(taskObj, eventData, tasknum)
   disp(['Task ' num2str(tasknum) ' completed']);
end

请注意,此代码是为分布式计算工具箱(后来更名为并行计算工具箱)的原始版本编写的,因此可能有更优雅的方式来完成您正在尝试做的事情。不过,这可以完成工作,但需要注意的是——我的理解是,只有在集群上运行 MATLAB 作业管理器(不是第三方 MPI 作业管理器,例如 TORQUE 之一)时,此回调功能才有效。

【讨论】:

  • 这有点混乱。这里混淆了两个概念。所有 PCT 任务都会寻找一个名为 taskFinish.m 的函数,并在完成任务后在 worker 中评估该函数;这可能对 d00b 有用。但是 FinishedFcn 回调仅在客户端 MATLAB 中进行评估,并且要求客户端 MATLAB 仍在运行。在 d00b 的情况下,他/她想在工作完成之前退出客户端 MATLAB,因此使用 FinishedFcn 不是一个好主意。
  • OP 退出 MATLAB 的理由是他们不想浪费系统资源轮询以了解任务是否已完成。此处不进行轮询。 taskFinish 函数是一个由任务完成触发的回调。 “no polling”指令和“quit Matlab”指令是互斥的。 “退出 Matlab”指令要求您稍后回来并轮询以查看工作是否完成。我提出的解决方案尊重“无轮询”指令并忽略“退出 Matlab”指令。
【解决方案2】:

我不确定这是否能回答您的大部分问题,但您可以在这样的工作人员上运行时获取任务 ID:

t = getCurrentTask();
tid = t.ID;

但是,请注意,大多数调度程序以任意顺序执行任务...

【讨论】:

  • 感谢您提供有关获取 ID 的提示。但是,如果任务以任意顺序执行,是否有办法知道所有任务何时完成?我不知道集群使用什么调度程序,因为我使用它自己的调度程序包装函数调用它。虽然它看起来像 matlab 的 jobmanager(它是康奈尔的 Teragrid,所以如果你碰巧知道他们使用什么,它会有所帮助)。
  • 我的目标是在所有任务完成后发送一封电子邮件(他们有一个包装功能),以便我可以去获取我的工作结果。到目前为止,我刚刚在我的最终任务定义中包含了一个标志,它告诉我的函数发送电子邮件。但是,如果如您所说,任务是任意执行的,那么这可能是个坏主意。
猜你喜欢
  • 2011-11-20
  • 2019-10-05
  • 2011-08-12
  • 1970-01-01
  • 2015-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多