如何通知 SGE 具有多个进程的作业

How to notify the SGE of a job with several process

我们在 CentOS 从站上的 SGE 运行ning 上构建我们的软件,它运行良好。 我的问题是如何通过启动多个进程来告诉 SGE 一个作业在给定的 slave 上占用了多个内核?

解释:
该过程涉及训练模型,需要对(相对)大数据文件进行大量连续的小更改,作业数量超过 10k。我们使用的大多数工具都支持从 stdin/out 读取和写入。这将允许我们将数据从一个工具传输到另一个工具(测试表明这也很有效)。

问题是,当一个作业启动两个或多个通过管道连接的进程时,从属进程会过载。我怎样才能告诉 SGE 进程的数量以避免这种情况?这只是为了SGE和节点正常工作,而不是为了任何形式的记账。

示例:
2 个计算节点,NodeA 和 NodeB,每个节点有 10 个插槽,配置为在 'fill-up' 模式下分配作业。
工作 1 "tool1 -a A -b B | tool2 -c C | tool3 -d D"

当我启动'Job1' 并且它被分配给节点NodeA 三个进程运行 那里('tool1', 'tool2', 'tool3')。但是 SGE 只知道一个作业,仍然认为它可以将 9 个作业分配给节点 A,而不是 7 个,这会导致节点过载。

我确实看过 'pe_range',但它似乎指的是多个作业,而不是具有多个进程的作业。

谢谢。

您的 SGE 集群必须配置为 "parallel environment"。与您的系统管理员交谈以确保并行环境存在,以及它的名称。然后使用 qsub 提交您的作业,指定并行环境的名称和节点上所需的 CPU 核心数。例如,如果您的并行环境称为 "foo" 并且您需要 8 个 CPU 核心,请将这些选项添加到 qsub 命令行:

-pe foo 8