本帖最后由 shuiningzhu 于 2023-4-16 12:36 编辑
Slurm执行的CPU管理步骤 SLURM使用四个基本步骤来管理作业/步骤的CPU资源: 步骤1:选择节点。 步骤2:从所选节点分配CPU。 步骤3:将任务分配到所选节点。 步骤4:将任务可选地分发和绑定到节点内的CPU。
步骤1:选择节点。 Slurm选择要将CPU资源分配给作业或作业步骤的节点集。因此,节点选择受到控制CPU分配的许多配置和命令行选项的影响(下面的步骤2)。如果配置了SelectType=SELECT/LINEAR,则所选节点上的所有资源都将分配给作业/步骤。如果将SelectType配置为SELECT/CONS_RES或SELECT/CONS_TRES,则可以从所选节点中分配单个CPU、内核和线程作为消耗资源。消耗资源类型由SelectTypeParameters定义。
步骤1由slurmctld和选择插件执行。 slurm.conf parameter | | | | <name of the node> Plus additional parameters. See man page for details. | 定义节点。这包括节点上主板、插槽、内核、线程和处理器(逻辑CPU)的数量和布局。 | | <name of the partition> Plus additional parameters. See man page for details. | 定义分区。分区定义的几个参数会影响节点的选择(例如,nodes, OverSubscribe, MaxNodes) | | | | | select/linear | select/cons_res | select/cons_tres | 控制CPU资源是以整个节点为单位分配给作业和作业步骤,还是作为可消耗资源(插槽、核心或线程)。 | | CR_CPU | CR_CPU_Memory | CR_Core | CR_Core_Memory | CR_Socket | CR_Socket_Memory Plus additional options. See man page for details. | 定义可消耗的资源类型,并通过select插件控制CPU资源分配的其他方面。 |
srun/salloc/sbatch控制步骤1的命令行选项: Command line option | | | | <sockets[:cores[:threads]]> | 将节点选择限制为具有指定的插槽、核心和线程布局的节点。 | | | | | | Restricts node selection to contiguous nodes | | | | | | | | | 防止与其他作业共享已分配的节点。为作业步骤分配子cpu。 | | | 包含要为作业选择的特定节点列表的文件(仅限salloc和batch) | | compute_bound | memory_bound | [no]multithread | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | <host1,host2,... or filename> | | | <host1,host2,... or filename> | | | | 绕过正常分配(特权选项仅提供给“SlurmUser”和“root”用户) |
步骤2:从选定的节点分配cpu Slurm从步骤1中选择的节点集中为作业/步骤分配CPU资源。因此,与节点选择相关的配置和命令行选项会影响CPU分配。如果配置了SelectType=select/linear,则所选节点上的所有资源都将分配给作业/步骤。如果SelectType配置为select/ con_res或select/ con_tres,则可以从所选节点分配独立的套接字、内核和线程作为可消耗资源。可消耗资源类型由SelectTypeParameters定义。 当使用select/ con_res或select/ con_tres的SelectType时,跨节点的默认分配方法是块分配(在使用另一个节点之前,分配一个节点中所有可用的cpu)。节点内的默认分配方法是循环分配(在节点内的套接字之间以循环方式分配可用cpu)。用户可以使用下面描述的适当命令行选项覆盖默认行为。分配方法的选择可能会影响将哪些特定cpu分配给作业/步骤。 步骤2由slurmctld和select插件执行。 slurm.conf控制步骤2的选项: slurm.conf parameter | | | | <name of the node> Plus additional parameters. See man page for details. | 定义一个节点。这包括节点上的单板、插槽、核心、线程和处理器(逻辑cpu)的数量和布局。 | | <name of the partition> Plus additional parameters. See man page for details. | 定义分区。分区定义的几个参数会影响CPU资源对作业的分配(例如,Nodes, OverSubscribe, MaxNodes)。 | | | | | select/linear | select/cons_res | select/cons_tres | 控制CPU资源是以整个节点为单位分配给作业和作业步骤,还是作为可消耗资源(套接字、核心或线程)。 | | CR_CPU | CR_CPU_Memory | CR_Core | CR_Core_Memory | CR_Socket | CR_Socket_Memory Plus additional options. See man page for details. | 定义可消耗的资源类型,并通过select插件控制CPU资源分配的其他方面。 |
srun/salloc/sbatch控制步骤2的命令行选项: Command line option | | | | <sockets[:cores[:threads]]> | 限制 节点选择到具有指定cpu、内核布局的节点 和线程。 | | | | | | | | | | | | | | block|cyclic |arbitrary|plane=<options>[:block|cyclic] | 第二个指定的分布(在 “:” 之后) 可用于覆盖节点内的默认分配方法 | | | | | | 文件 包含要为作业选择的特定节点的列表(仅限 Salloc 和 Sbatch) | | compute_bound | memory_bound | [no]multithread | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | <host1,host2,... or filename> | | | <host1,host2,... or filename> | | | | 旁路 正常分配(用户可用的特权选项 仅限“诽谤用户”和“根”) |
步骤3:将任务分配到选定的节点 在步骤3中,Slurm将任务分配到步骤1中为作业/步骤选择的节点。每个任务仅分布到一个节点,但每个节点可以分布多个任务。除非task指定了cpu复用,否则分配到节点上的任务数量受节点上分配的cpu数量和每个任务的cpu数量的约束。如果配置了可消耗的资源,或者允许资源共享,那么来自多个作业/步骤的任务可以同时运行在同一个节点上。 步骤3由slurmctld执行。 slurm.conf控制步骤3的选项: srun/salloc/sbatch控制步骤3的命令行选项: Command line option | | | | block|cyclic |arbitrary|plane=<options>[:block|cyclic] | 第一个指定的分布(在 “:” 之前) 控制将任务分发到每个选定节点的顺序。请注意, 此选项不会影响分发到每个节点的任务数,而只影响 分配。 | | | | | | | | | | | | |
步骤4:可选的任务分配和绑定到节点内的cpu 在可选的步骤4中,Slurm将每个任务分配并绑定到在步骤3中分配任务的节点上分配的cpu的指定子集。分布在同一节点上的不同任务可以绑定到相同的cpu子集或不同的子集。这一步被称为任务关联或任务/CPU绑定。 步骤4由slurmd和任务插件执行。 slurm.conf控制步骤3的选项: slurm.conf parameter | | | | task/none | task/affinity | task/cgroup | |
cgroup.conf选项控制步骤4(仅task/cgroup插件): srun/salloc/sbatch控制步骤4的命令行选项: Command line option | | | | | | | | | | block|cyclic |arbitrary|plane=<options>[:block|cyclic] | 第二个指定的分布(在“:”之后)控制任务的顺序 分发到节点内分配的 CPU,以便将任务绑定到 CPU |
CPU管理步骤附加说明 对于消耗性资源,了解cpu分配(步骤2)和任务关联/绑定(步骤4)之间的区别非常重要。cpu作为消耗性资源的独占(非共享)分配限制了可以同时使用节点的作业/步骤/任务的数量。但是它并没有限制节点上分配给该节点的每个任务可以使用的cpu集。除非使用某种形式的CPU/任务绑定(例如,任务或spank插件),否则分配到节点上的所有任务都可以使用该节点上的所有CPU,包括未分配给它们的作业/步骤的CPU。这可能会对性能产生意想不到的不利影响,因为它允许一个作业使用专门分配给另一个作业的cpu。因此,在配置可消耗资源的同时不配置任务关联可能是不可取的。注意,在配置select/linear(整个节点分配)时,任务关联也很有用,可以通过将每个任务限制在某个节点上的特定插槽或CPU资源的其他子集来提高性能。
|