单独释放 CPU 资源的 sbatch slurm 作业
sbatch slurm jobs which release CPU resources individually
我有一个由许多节点和许多内核组成的集群,我只想 运行 数千个作业,每个作业只需要一个 CPU。最好用 sbatch
。在浏览文档几个小时后,我仍然 运行 遇到问题。我当前的设置是:
#SBATCH --nodes=4
#SBATCH --tasks-per-node=25
#SBATCH --distribution=block
srun ./my_experiment
我用 sbatch
开始其中几个,它们似乎排得很好。
此脚本会启动 100 个 my_experiment
实例,这是有意的。不幸的是,他们似乎占用了所有 100 CPU 的资源,即使 99 个实验已经结束。我该如何缓解这种情况?
其次,它们之间似乎不共享节点。即使节点有 +40 个核心。
甚至可以 sbatch
一堆任务并让它们单独释放资源吗?
Unfortunately they seem to hog the resources of all 100 CPUs even if
99 experiments already ended.
那是因为您创建了一个作业,跨越至少 4 个节点,每个节点为 25 个任务请求 25 个 CPU。作业在所有任务结束时释放它们的分配。
假设您的流程之间没有通信,您的工作流程似乎更适合 job arrays。使用作业数组的想法是创建许多独立但易于管理的作业。
#SBATCH --ntasks=1
#SBATCH --array=1-100
srun ./my_experiment
你最终会得到 100 个作业,一个一个独立地开始和结束,但你可以用一个命令将其终止。
如果您的程序 my_experiment
使用了 SLURM_PROC_ID
环境变量,您可以将其替换为 SLURM_ARRAY_TASK_ID
。
Secondly they don't seem to share nodes with each other. Even though
the nodes have +40 cores.
对于每个作业,您明确要求每个节点有 25 个内核,因此如果内核数不是至少 50 个,Slurm 就不能将两个这样的作业放在同一个节点上。如果核心数大于 50,则可能是由于内存要求。
我有一个由许多节点和许多内核组成的集群,我只想 运行 数千个作业,每个作业只需要一个 CPU。最好用 sbatch
。在浏览文档几个小时后,我仍然 运行 遇到问题。我当前的设置是:
#SBATCH --nodes=4
#SBATCH --tasks-per-node=25
#SBATCH --distribution=block
srun ./my_experiment
我用 sbatch
开始其中几个,它们似乎排得很好。
此脚本会启动 100 个 my_experiment
实例,这是有意的。不幸的是,他们似乎占用了所有 100 CPU 的资源,即使 99 个实验已经结束。我该如何缓解这种情况?
其次,它们之间似乎不共享节点。即使节点有 +40 个核心。
甚至可以 sbatch
一堆任务并让它们单独释放资源吗?
Unfortunately they seem to hog the resources of all 100 CPUs even if 99 experiments already ended.
那是因为您创建了一个作业,跨越至少 4 个节点,每个节点为 25 个任务请求 25 个 CPU。作业在所有任务结束时释放它们的分配。
假设您的流程之间没有通信,您的工作流程似乎更适合 job arrays。使用作业数组的想法是创建许多独立但易于管理的作业。
#SBATCH --ntasks=1
#SBATCH --array=1-100
srun ./my_experiment
你最终会得到 100 个作业,一个一个独立地开始和结束,但你可以用一个命令将其终止。
如果您的程序 my_experiment
使用了 SLURM_PROC_ID
环境变量,您可以将其替换为 SLURM_ARRAY_TASK_ID
。
Secondly they don't seem to share nodes with each other. Even though the nodes have +40 cores.
对于每个作业,您明确要求每个节点有 25 个内核,因此如果内核数不是至少 50 个,Slurm 就不能将两个这样的作业放在同一个节点上。如果核心数大于 50,则可能是由于内存要求。