我需要在 PBS 集群上运行 Java 应用程序,但我不太清楚它应该如何运行。
应用程序启动了几个线程,线程的数量取决于运行它的节点上的内核数量。然后它为每个核心启动 2 个线程。
对我来说最好的事情是请求对 PBS 集群中的一个节点的完全访问权限,以便让这个东西运行。即保留一个节点上的所有核心。我还没有看到如何做到这一点。我所看到的只是 ppn 参数,它请求每个节点的特定内核数,但节点是异构的,所以我不想指定单个 ppn 编号,这取决于我获得的节点类型。
如果这不可能,我需要了解指定 ppn 时作业的行为方式。我可以指示 Java 应用程序只创建 X 个线程,但我认为我无法控制这些线程在哪些内核上运行。每个核心创建 2 个线程是我们的经验法则,可能会发生所有线程都想一直运行的情况,在这种情况下,我将使用比我请求的多 100% 的 CPU 资源。我的理解是否正确,PBS 不会对我的进程施加任何限制,但实际上可能会监视它,如果它超过指定的资源使用量,甚至会终止我的进程?
长话短说;
总结一下:
- 我可以请求对一个节点的完全访问权限(保留我获得的节点上的所有核心用于工作)吗?
- 如果我只请求节点上的一部分核心,如果超过该限制,PBS 会终止我的工作吗?
最佳答案
Can I request full access to a node (reserve all the cores on the node I get for a job)?
结合 Moab,您可以使用您在评论中声明的参数:
#PBS -W x=NACCESSPOLICY:SINGLEJOB
这保证了 Moab 不会向同一节点发送更多作业。这不会使每个节点的所有处理器都显示在 $PBS_NODEFILE
中,但它允许您使用整个节点而无需踩到任何其他东西。
If I request only some fraction of the cores on a node, will PBS kill my job if I exceed that limit?
不,不会。默认情况下,TORQUE 不会强制您只使用您请求的内核。这里需要注意的是,如果您将 TORQUE 配置为使用 cpuset,则 cpuset 会将您的进程限制为仅分配给您的处理器。如果您使用的是 3.0.0 或更高版本的 TORQUE,您可以添加
#PBS -E
到你的作业脚本来解决这个问题。这告诉妈妈您对节点具有独占访问权,并指示妈妈将机器中的所有 cpus 放入您的 cpuset 中。
关于pbs - 请求节点的所有处理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22789056/