如何释放Slurm节点上残留的已分配GRES资源?
如何释放Slurm节点上残留的已分配GRES资源?
遇到Slurm节点上残留已分配GRES资源(比如你这里的GPU)但无运行作业的情况,我通常会按以下步骤排查和解决:
第一步:确认无异常作业残留
有时候作业异常终止后,Slurm的作业记录可能没有及时更新,导致资源被“占用”。先通过sacct查看该节点的所有作业记录,包括已完成、失败的状态:
sacct -n -X -w node2 --state=all
如果发现有显示为RUNNING但实际早已停止的异常作业,可以用scontrol手动更新其状态为已完成:
scontrol update job=<异常作业ID> state=COMPLETED
第二步:强制同步节点资源状态
如果确认没有残留作业,那就是Slurm控制节点和计算节点的资源状态不同步了。按以下操作重置:
- 先将节点设为
DRAIN状态,避免新作业被调度到该节点:scontrol update nodename=node2 state=DRAIN reason="清理残留GRES分配" - 强制清零节点的已分配资源记录:
scontrol update nodename=node2 AllocTRES=cpu=0,mem=0M,gres/gpu=0 - 最后将节点恢复为
IDLE状态,允许新作业调度:scontrol update nodename=node2 state=IDLE
第三步:验证资源释放结果
执行以下命令再次检查节点状态,确认AllocTRES中的gres/gpu已变为0:
scontrol show node node2
如果以上方法都无效,可能需要在业务低峰期重启slurmctld服务(注意这会影响整个集群的作业调度),不过大部分情况下前面的步骤就能解决问题。这种资源残留通常是作业异常终止(比如强制杀死、节点意外断电)导致Slurm未正确回收资源,后续可以查看Slurm控制节点的日志(如/var/log/slurm/slurmctld.log)来排查根本原因。
备注:内容来源于stack exchange,提问作者Gerald Schneider
相关产品推荐
相关产品推荐

