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

如何配置Slurm自动终止低使用率/闲置GPU的作业?

配置Slurm自动终止低使用率/闲置GPU作业的方案

当然可以实现,除了全局作业时限,有以下几种更智能的方案:

1. 自定义定时监控脚本

这是最易落地的方式,通过定时检查GPU使用率,自动终止满足闲置条件的作业:

  • 核心逻辑:
    • 用nvidia-smi或gpustat获取GPU上的进程及对应使用率
    • 通过进程PID关联到Slurm作业ID(利用scontrol show pid <pid>命令)
    • 设置闲置阈值(比如连续10分钟GPU使用率低于5%),满足条件时执行scancel <job_id>
    • 用cron或Slurm定时任务(sbatch循环执行)定期运行脚本
  • 示例脚本片段:
#!/bin/bash
# 检查间隔:1分钟
THRESHOLD=5
CHECK_COUNT=10

gpustat -cp | grep -v "PID" | while read line; do
    pid=$(echo "$line" | awk '{print $1}')
    gpu_util=$(echo "$line" | awk '{print $4}' | sed 's/%//')
    job_id=$(scontrol show pid "$pid" | grep -oP 'JobId=\K\d+')

    if [[ -n "$job_id" && "$gpu_util" -lt "$THRESHOLD" ]]; then
        state_file="/tmp/low_gpu_$job_id"
        if [[ -f "$state_file" ]]; then
            current_count=$(cat "$state_file")
            if [[ "$current_count" -ge "$CHECK_COUNT" ]]; then
                scancel "$job_id"
                rm "$state_file"
                echo "终止闲置作业:$job_id(GPU使用率持续低于${THRESHOLD}%达${CHECK_COUNT}分钟)"
            else
                echo $((current_count + 1)) > "$state_file"
            fi
        else
            echo 1 > "$state_file"
        fi
    fi
done

2. 基于Slurm插件的实时监控

如果团队有开发能力,可以编写Slurm插件实现更原生的监控:

  • 利用Slurm的JobSubmitPlugins或JobEpilog/JobProlog机制,或者基于Slurm API开发自定义插件
  • 插件可实时采集GPU使用数据(结合acct_gather_gpu插件的统计结果),当作业连续处于低使用率状态时,触发Slurm的作业终止接口
  • 这种方式需要修改Slurm配置并重新编译,适合大规模集群的统一管理

3. 作业级别的主动退出机制

让作业自身监控GPU使用率,满足闲置条件时主动退出:

  • 在作业脚本中加入后台监控逻辑,当GPU使用率低于阈值时主动调用exit
  • 配合Slurm的--signal选项(比如sbatch --signal=SIGUSR1@300),提前给作业发送通知,预留清理时间
  • 示例作业脚本片段:
#!/bin/bash
# 后台监控GPU使用率
monitor_gpu() {
    while true; do
        avg_util=$(nvidia-smi --query-gpu=utilization.gpu --format=csv,noheader,nounits | awk '{sum+=$1} END {print sum/NR}')
        if [[ "$avg_util" -lt 5 ]]; then
            echo "GPU使用率过低,作业将退出"
            exit 0
        fi
        sleep 60
    done
}
monitor_gpu &

# 主作业任务
python train.py

注意事项

  • 确保监控脚本拥有执行scancel和读取GPU信息的权限
  • 阈值和连续检查次数要根据集群作业类型调整,避免误杀初始化阶段或间歇性使用GPU的作业
  • 可以启用Slurm的acct_gather_gpu插件,通过sacct -o JobID,AllocGRES,MaxGPUUtilization查询历史GPU使用率,辅助优化阈值设置

内容的提问来源于stack exchange,提问作者Leo Gallucci

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 22:25:48