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

如何编写脚本批量提交不同子目录中的Slurm作业?

自动批量提交Slurm作业脚本(支持分批/范围指定)

完整脚本

#!/bin/bash

# 参数检查:至少需要输入文件基名
if [ $# -lt 1 ]; then
    echo "用法:$0 <输入文件基名> [目录范围,如001-020] [每批数量,默认20] [延迟秒数,默认30]"
    echo "示例:"
    echo "  提交所有Dxxx目录:$0 tma.h2s-2-vpt2-b97m-d4-qz"
    echo "  提交D001到D020:$0 tma.h2s-2-vpt2-b97m-d4-qz 001-020"
    echo "  每批提交15个,间隔20秒:$0 tma.h2s-2-vpt2-b97m-d4-qz 001-084 15 20"
    exit 1
fi

BASE_NAME=$1
DIR_RANGE=${2:-"001-999"}  # 默认覆盖001到999的目录
BATCH_SIZE=${3:-20}
DELAY=${4:-30}

# 解析目录范围,处理前导零
IFS='-' read -r START END <<< "$DIR_RANGE"
START=$(printf "%03d" "$START")
END=$(printf "%03d" "$END")

WORK_DIR=$(pwd)
SUBMIT_COUNT=0

# 遍历指定范围的目录
for (( N=$(echo "$START" | sed 's/^0*//'); N<=$(echo "$END" | sed 's/^0*//'); N++ )); do
    DIR_NAME=$(printf "D%03d" "$N")
    
    # 跳过不存在的目录
    if [ ! -d "$DIR_NAME" ]; then
        echo "警告:目录 $DIR_NAME 不存在,跳过"
        continue
    fi

    cd "$DIR_NAME"
    # 检查是否有.inp输入文件
    INP_FILE=$(ls *.inp 2>/dev/null)
    if [ -z "$INP_FILE" ]; then
        echo "警告:目录 $DIR_NAME 无.inp文件,跳过"
        cd "$WORK_DIR"
        continue
    fi

    # 生成与手动提交一致的作业名
    JOB_NAME="${BASE_NAME}_${DIR_NAME}"
    # 提交作业
    sbatch -J "$JOB_NAME" slurm-run-orca.job
    
    if [ $? -eq 0 ]; then
        echo "已提交作业:$JOB_NAME"
        SUBMIT_COUNT=$((SUBMIT_COUNT + 1))
        # 每提交BATCH_SIZE个任务后延迟,避免集群拥堵
        if [ $((SUBMIT_COUNT % BATCH_SIZE)) -eq 0 ] && [ $SUBMIT_COUNT -ne 0 ]; then
            echo "已提交$SUBMIT_COUNT个任务,等待$DELAY秒..."
            sleep "$DELAY"
        fi
    else
        echo "提交失败:$JOB_NAME"
    fi

    cd "$WORK_DIR"
done

echo "批量提交完成,共成功提交$SUBMIT_COUNT个任务"

脚本说明

核心功能

  • 自动遍历指定范围的Dxxx目录,提交Slurm作业
  • 支持分批提交:每提交指定数量的任务后自动延迟,避免集群队列拥堵
  • 兼容带前导零的目录命名(如D001、D010)
  • 错误处理:跳过不存在的目录或无输入文件的目录

修复原脚本的问题

  • 修正work_dir="pwd"的错误:改用$(pwd)获取当前工作目录的实际路径
  • 替换错误的while循环逻辑:用for循环遍历数字范围,自动补前导零生成目录名
  • 替换错误的squeue命令:改用sbatch提交作业
  • 增加参数验证和错误提示,提升脚本健壮性

使用方法

  1. 将脚本保存为job-submission.sh,赋予执行权限:
chmod +x job-submission.sh
  1. 根据需求运行脚本:
  • 提交所有存在的Dxxx目录:
    ./job-submission.sh tma.h2s-2-vpt2-b97m-d4-qz
    
  • 提交指定范围的目录(如D001到D020):
    ./job-submission.sh tma.h2s-2-vpt2-b97m-d4-qz 001-020
    
  • 自定义分批规则(每批15个任务,间隔20秒):
    ./job-submission.sh tma.h2s-2-vpt2-b97m-d4-qz 001-084 15 20
    

内容的提问来源于stack exchange,提问作者isolated matrix

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 14:43:14