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

如何在无Slurm的Linux服务器提交类似Slurm的批量作业?

无Slurm的Linux服务器批量作业提交方案

此前使用配备Slurm的服务器时,提交的批量作业脚本如下:

#!/bin/bash
#SBATCH --job-name=sdmodel
#SBATCH --output=logs/out/%a
#SBATCH --error=logs/err/%a
#SBATCH --nodes=1
#SBATCH --partition=common,scavenger
#SBATCH -c 10
#SBATCH --mem-per-cpu=12GB
#SBATCH --array=1-236

module load Matlab/R2021a
matlab -nodisplay -r "run('main.m'); exit"

现更换为未安装Slurm的纯Linux服务器,sbatch命令无法使用,请问是否存在类似的批量作业提交方式?

1. 基础循环+后台运行

这是最易实现的替代方案,用bash循环遍历任务ID,把每个任务放到后台执行,同时复刻原脚本的日志和资源限制逻辑:

首先提前创建日志目录:

mkdir -p logs/out logs/err

然后编写批量执行脚本:

#!/bin/bash
# 遍历1到236的任务ID
for task_id in {1..236}; do
    # 用子shell封装单个任务,后台执行
    (
        # 限制任务使用10个CPU核心(对应原脚本的-c 10)
        taskset -c 0-9
        # 限制单任务内存为12GB(对应原脚本的--mem-per-cpu=12GB)
        ulimit -v $((12 * 1024 * 1024))
        # 加载Matlab模块(如果服务器没有module环境,直接写Matlab的绝对路径即可)
        module load Matlab/R2021a && \
        matlab -nodisplay -r "run('main.m'); exit"
    ) > logs/out/${task_id} 2> logs/err/${task_id} &

    # 可选:控制并发数,比如每启动5个任务就等待一批完成,避免资源耗尽
    if (( task_id % 5 == 0 )); then
        wait
    fi
done
# 等待所有后台任务执行完毕
wait

2. GNU Parallel(高效批量管理)

如果服务器安装了GNU Parallel,用它来管理批量任务会更省心,支持并发控制、资源限制,语法更简洁:

# 先创建日志目录
mkdir -p logs/out logs/err

# 批量执行1-236号任务,设置并发数为5(可根据服务器配置调整)
parallel --jobs 5 \
    "taskset -c 0-9 && ulimit -v $((12 * 1024 * 1024)) && module load Matlab/R2021a && matlab -nodisplay -r 'run(''main.m''); exit'" \
    > logs/out/{1} 2> logs/err/{1} ::: {1..236}

3. 注意事项

  • 如果服务器没有module命令,直接替换成Matlab的绝对路径,比如/usr/local/matlab/R2021a/bin/matlab;
  • taskset的核心范围(0-9)可以根据服务器实际CPU数量调整,比如服务器有20核心,可分配不同任务用不同核心段;
  • 并发数不要设置过高,避免CPU、内存被占满导致系统卡顿。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 14:45:48