You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Slurm中自动终止闲置作业或按需延长作业时限?

在Slurm中实现交互式会话闲置自动终止的方案

Slurm本身没有直接通过slurm.conf配置就能实现基于用户交互/CPU闲置时长自动终止作业的原生参数,但可以通过以下几种实用方法达成你提到的需求:

方法一:结合timeout命令与终端闲置检测

提交交互式会话时,直接用timeout包裹终端交互检测逻辑,同时配合Slurm的基础作业时限设置:

srun --pty --time=4:00:00 bash -c 'timeout -s SIGTERM 4h bash -c "while true; do if [[ -n \$(who | grep \$(tty | cut -d/ -f3-)) ]]; then sleep 60; else break; fi; done; exit"'
  • 核心逻辑:每60秒检查当前终端是否有用户连接,连续4小时无交互则触发SIGTERM终止会话
  • 注意:需确保计算节点上安装了who、timeout等基础工具

方法二:自定义监控脚本配合scancel

  1. 编写监控脚本(比如idle_job_monitor.sh),定期检查作业的CPU使用率和终端活跃状态:
#!/bin/bash
CHECK_INTERVAL=300  # 每5分钟检查一次
IDLE_THRESHOLD=4    # 闲置4小时后终止

while true; do
    # 获取所有运行中的交互式作业ID
    INTERACTIVE_JOBS=$(squeue -t RUNNING -o "%A %t %u" | grep -i "interactive" | awk '{print $1}')
    for JOB_ID in $INTERACTIVE_JOBS; do
        # 获取作业关联的终端
        TTY=$(sacct -j $JOB_ID --format=TTY | tail -n1 | xargs)
        # 检查终端是否有活跃用户
        IS_ACTIVE=$(who | grep "$TTY" | wc -l)
        # 检查作业CPU使用率(取最近5分钟平均值)
        CPU_USAGE=$(sstat -j $JOB_ID --format=CPUUtilization | tail -n1 | awk '{print int($1)}')
        
        if [[ $CPU_USAGE -lt 5 && $IS_ACTIVE -eq 0 ]]; then
            # 累计闲置时长,超过阈值则终止作业
            if [[ -f /tmp/slurm_idle_$JOB_ID ]]; then
                CURRENT_IDLE=$(cat /tmp/slurm_idle_$JOB_ID)
                NEW_IDLE=$((CURRENT_IDLE + CHECK_INTERVAL/3600))
                if [[ $NEW_IDLE -ge $IDLE_THRESHOLD ]]; then
                    scancel $JOB_ID
                    rm /tmp/slurm_idle_$JOB_ID
                else
                    echo $NEW_IDLE > /tmp/slurm_idle_$JOB_ID
                fi
            else
                echo 0 > /tmp/slurm_idle_$JOB_ID
            fi
        else
            # 作业活跃时重置闲置计时
            rm -f /tmp/slurm_idle_$JOB_ID
        fi
    done
    sleep $CHECK_INTERVAL
done
  1. 将脚本部署到Slurm控制器或计算节点,用systemd等工具作为后台服务长期运行
  • 优势:可灵活自定义“闲置”判定规则,比如结合内存占用、磁盘IO等指标

方法三:Slurm插件开发(进阶)

如果需要更原生的集群级集成,可以开发Slurm作业Hook插件,通过Slurm的插件机制监控作业的资源使用和交互状态,触发自动终止逻辑。这种方法需要具备Slurm插件开发能力,适合大规模集群的定制化需求。


内容的提问来源于stack exchange,提问作者Eddy Xiao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 22:57:19