之前,论坛中已经讨论过在 SGE 上提交作业以在完整节点上运行的问题。提出了几种解决方案,其中一种是配置 SGE 以允许使用选项 -l excl=TRUE,另一种解决方案是要求 SGE 提供硬内存或负载限制。
我正在使用我大学的集群来完成我的硕士论文,并行环境 openmpi 配置了填充策略。通常,集群的每个节点包含 16 或 20 个核心,问题是有些用户不是使用 16(或 20)的倍数个核心来启动计算,而是使用任意数量的核心来启动他们的作业。因此,当我使用 -pe openmpi 16 启动作业时,有时 SGE 会在 3 个节点(例如 6 + 1 + 10)上保留处理器,这会使计算非常慢。
我要求管理员配置集群以允许 -l excl=TRUE,但他拒绝在进行测试之前更改配置(我不知道持续了多久)。
现在我有了一个新的想法,可以让我得到与(-l excl = TRUE)类似的结果,但无需改变集群:
- 编写一个脚本来扫描队列并估计必须向 SGE 请求的核心数量,以便他填满所有正在运行的节点并且只让完全空闲的节点。
- 使用计算出的核心数启动一个虚假作业,该作业将等待一段时间。
- 开展我真正的工作(例如-pe openmpi 2*16=32)。
- 删除虚假作业以允许其他用户使用其核心
有人可以提供给我一个这样的代码的例子吗?
答案1
qsub -l cpu=0
对于我来说,使用(或)启动作业cpu=0.1
非常完美。