没有节点约束的 SLURM 计划任务
SLURM Schedule Tasks Without Node Constraints
我必须在非常繁忙的 GPU 集群上安排作业。我不太关心节点,更关心 GPU。我的代码的结构方式是,每个作业一次只能使用一个 GPU,然后它们进行通信以使用多个 GPU。我们通常安排这样的事情的方式是 gpus_per_task=1
、ntasks_per_node=8
、nodes=<number of GPUs you want / 8>
,因为每个节点都有 8 个 GPU。
因为不是每个人都需要 8 个 GPU,所以通常有一些节点周围有几个 (<8) 个 GPU,使用我的参数将无法调度。因为我不关心节点,有没有办法告诉 slurm 我想要 32 个任务,我不关心你使用多少节点来完成它?
例如,如果它想在一台机器上给我 2 个任务,剩下 2 个 GPU,剩下的 30 个分配在完全空闲的节点或任何其他可行的节点之间,以更好地利用集群。
我知道有一个 ntasks
参数可以执行此操作,但文档对此有点混乱。它指出
The default is one task per node, but note that the --cpus-per-task option will change this default.
cpus_per_task
与此有什么关系?
我也看到了
If used with the --ntasks option, the --ntasks option will take precedence and the --ntasks-per-node will be treated as a maximum count of tasks per node
但我也对这种互动感到困惑。这是否意味着如果我要求 --ntasks=32
--ntasks-per-node=8
它会在一台机器上最多放置 8 个任务,但如果它决定(基本上这就是我想要的)
试试 --gpus-per-task 1
和 --ntasks 32
。没有指定每个节点或节点数的任务。这使 slurm 可以根据需要在节点之间分配任务,并在未充分利用的节点上使用剩余的 GPU。
而且它不会在单个节点上放置超过 8 个任务,因为没有超过 8 个 GPU 可用。
关于 ntasks
与 cpus-per-task
:这对您的情况无关紧要。默认情况下,一项任务获得一个 CPU。如果你使用 --cpus-per-tasks x
保证 x CPUs 在一个节点上。如果您只说 --ntasks
,则情况并非如此,其中任务是分散的,但 slurm 决定。文档中有一个 example。
警告:这需要 slurm >= 19.05 的版本,因为所有 --gpu 选项都已添加到那里。
我必须在非常繁忙的 GPU 集群上安排作业。我不太关心节点,更关心 GPU。我的代码的结构方式是,每个作业一次只能使用一个 GPU,然后它们进行通信以使用多个 GPU。我们通常安排这样的事情的方式是 gpus_per_task=1
、ntasks_per_node=8
、nodes=<number of GPUs you want / 8>
,因为每个节点都有 8 个 GPU。
因为不是每个人都需要 8 个 GPU,所以通常有一些节点周围有几个 (<8) 个 GPU,使用我的参数将无法调度。因为我不关心节点,有没有办法告诉 slurm 我想要 32 个任务,我不关心你使用多少节点来完成它?
例如,如果它想在一台机器上给我 2 个任务,剩下 2 个 GPU,剩下的 30 个分配在完全空闲的节点或任何其他可行的节点之间,以更好地利用集群。
我知道有一个 ntasks
参数可以执行此操作,但文档对此有点混乱。它指出
The default is one task per node, but note that the --cpus-per-task option will change this default.
cpus_per_task
与此有什么关系?
我也看到了
If used with the --ntasks option, the --ntasks option will take precedence and the --ntasks-per-node will be treated as a maximum count of tasks per node
但我也对这种互动感到困惑。这是否意味着如果我要求 --ntasks=32
--ntasks-per-node=8
它会在一台机器上最多放置 8 个任务,但如果它决定(基本上这就是我想要的)
试试 --gpus-per-task 1
和 --ntasks 32
。没有指定每个节点或节点数的任务。这使 slurm 可以根据需要在节点之间分配任务,并在未充分利用的节点上使用剩余的 GPU。
而且它不会在单个节点上放置超过 8 个任务,因为没有超过 8 个 GPU 可用。
关于 ntasks
与 cpus-per-task
:这对您的情况无关紧要。默认情况下,一项任务获得一个 CPU。如果你使用 --cpus-per-tasks x
保证 x CPUs 在一个节点上。如果您只说 --ntasks
,则情况并非如此,其中任务是分散的,但 slurm 决定。文档中有一个 example。
警告:这需要 slurm >= 19.05 的版本,因为所有 --gpu 选项都已添加到那里。