【问题标题】:Why do my results become un-reproducible when run from qsub?为什么从 qsub 运行时我的结果无法重现?
【发布时间】:2013-12-27 22:57:09
【问题描述】:

我正在集群上运行 matlab。当我从集群上的交互式 matlab 会话运行我的 .m 脚本时,我的结果是可重现的。但是,当我从 qsub 命令运行相同的脚本时,作为阵列作业的一部分,我会得到可信但无法重现的结果。 .m 文件的作用完全相同,包括将结果保存为 .mat 文件。

有谁知道为什么以一种方式运行脚本给出可重现的结果,而以另一种方式运行它们变得不可重现?

这只是再现性问题还是表明结果不准确?

%%%%% 感谢 spuder 的帮助。以防万一有人偶然发现并感兴趣,这里有一些进一步的信息。 如果您在 Matlab 作业中使用多个线程,这可能会导致从其他作业中窃取资源,从而对结果造成严重破坏。所以你有2个选择: 1. 选择对节点的独占访问。我正在使用的集群当前不允许并行阵列作业,所以这样做对我来说非常浪费 - 我拿了一个整个节点但串行使用它。 2. 让 matlab 在 singleCompThread 上运行。这可能会使您的脚本需要更长的时间才能完成,但它会更快地通过队列获取作业。

【问题讨论】:

  • 这里的行话有点超出我的理解。但它是令人尴尬的并行,所以我串行运行每个脚本,而不使用并行计算。这有什么不同吗?
  • 输入还是输出?

标签: matlab cluster-computing qsub


【解决方案1】:

有很多变数在起作用。排除网络性能和负载等暂时性问题,这里有几个可能的解释:

当您运行与使用 qsub 时相比的交互式作业时,您将获得不同批次的节点。

我看到一些站点将“独占”策略分配给运行交互式作业的节点,而将“共享”策略分配给运行排队的“qsub”作业的节点。如果是这种情况,那么您几乎总是会在独占节点上看到更好的性能。

另一个答案可能是交互式作业被分配给网络拥塞较少的节点。

此外,如果您请求多个节点,并且您碰巧落在遍历多个跃点的节点上,那么您可能会看到网络显着变慢。解决方案是让集群管理员设置节点集。

您是否为作业使用多个节点?你是如何请求资源的?

【讨论】:

  • 谢谢!您对交互式作业与 qsub 作业的增强性能是对的,我注意到了这一点。我不要求独占节点,尽管我刚刚读到 Matlab 线程需要独占节点。您肯定在做某事,但我不明白这会如何影响可重复性?
  • 虽然实际上我的工作不是多线程的,所以不需要独占节点?
  • 如果脚本通过 qsub 重新运行,这似乎会给出可重现的结果。但是,结果与交互式 matlab 会话的结果仍然不同。有人可以为我澄清一下,如果您在使用 qsub 时不请求对节点的独占访问权,这是否意味着即使您的脚本中没有并行化,您的脚本也会在不同的节点上运行?为什么非排他性会导致不可重复性?
  • 这取决于您使用的调度程序。 (我熟悉摩押/毛伊岛和扭矩)。默认情况下,这些调度程序会找到最有效的处理器分组,即使它们不在同一个节点上。
  • 它是带有 Moab 调度器的 Torque 批量排队系统。所以我的脚本是串行的也没关系,我没有请求线程,它仍然会在不同的处理器上并行运行它?
猜你喜欢
  • 2020-02-14
  • 2015-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-07
相关资源
最近更新 更多