Slurm(cons_res配置)下如何为单多线程进程分配整个节点
解决Slurm中为单多线程进程分配整个节点的问题
问题背景
实验室Slurm配置为SelectType=select/cons_res,需求是在单个节点上运行多线程程序并使用该节点的所有harts及对应内存,但之前的提交命令存在资源分配不足或不匹配的问题:
- 执行
sbatch -N 1 --ntasks-per-node=1 pz-train.batch仅分配2个harts和约3800MB内存,程序因内存不足崩溃,节点状态显示为mix - 执行
sbatch -N 1 --cpus-per-task=56 --mem=100G pz-train.batch在56harts/128GB节点上正常,但在104harts/256GB节点上仅能使用56个harts,剩余资源无法被多线程程序利用
解决方案
针对select/cons_res的资源分配模式,以下两种方式可确保单多线程进程获取整个节点的全部资源:
方式一:使用--exclusive参数提交作业
直接添加--exclusive参数强制Slurm分配整个节点的所有资源,避免资源闲置:
sbatch -N 1 --exclusive pz-train.batch
该参数会锁定目标节点,让作业独占所有harts和内存,节点状态将变为alloc,多线程程序可充分利用节点全部资源。
方式二:在批处理脚本中配置独占节点
也可以在pz-train.batch脚本开头添加Slurm指令,无需每次提交时输入参数:
#!/bin/bash #SBATCH -N 1 #SBATCH --exclusive # 其他作业配置(如输出路径、队列等) # 你的多线程程序执行命令
补充说明
- 之前硬编码
--cpus-per-task=56的方式仅适配特定节点,无法动态匹配不同配置的节点资源 select/cons_res模式下,未明确指定的资源不会自动分配给作业,--exclusive是最直接的独占节点方式,无需手动计算节点的CPU和内存数量
内容的提问来源于stack exchange,提问作者hdante
相关产品推荐
相关产品推荐

