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

如何在SLURM中让单作业多任务分配至不同类型节点

SLURM单作业多任务跨不同节点类型分配实现方法

针对你需要单作业拆分的两个任务分别跑在lpn和hpn节点的需求,以下是两种可行方案:

方案1:使用SLURM异构作业(Heterogeneous Jobs)

SLURM的异构作业特性专门用于单作业内的任务分配到不同配置/类型的节点,完全匹配你的需求。

提交命令示例:

sbatch --job-name=cross-node-task --ntasks=2 --nodes=2 --ntasks-per-node=1 --het-group=0:constraint=lpn --het-group=1:constraint=hpn your_task_script.sh

或者在SLURM脚本中配置:

#!/bin/bash
#SBATCH --job-name=cross-node-task
#SBATCH --ntasks=2
#SBATCH --nodes=2
#SBATCH --ntasks-per-node=1
# 定义第0个节点组使用lpn类型节点
#SBATCH --het-group=0:constraint=lpn
# 定义第1个节点组使用hpn类型节点
#SBATCH --het-group=1:constraint=hpn

# 此处执行你的任务逻辑,每个任务会自动分配到对应组的节点
srun --ntasks=1 task1.sh &
srun --ntasks=1 task2.sh &
wait

说明:--het-group参数明确指定每个节点组的约束条件,强制SLURM为每个组分配对应类型的节点,避免调度优化导致的同节点分配。

方案2:在作业脚本内用srun分别指定节点约束

如果你的集群使用较旧SLURM版本不支持异构作业,可以在主作业脚本内通过srun单独指定每个任务的节点约束,同时强制SLURM分配2个节点。

SLURM脚本示例:

#!/bin/bash
#SBATCH --job-name=cross-node-task
#SBATCH --ntasks=2
#SBATCH --nodes=2
# 允许调度lpn或hpn类型的节点
#SBATCH --constraint="lpn|hpn"

# 启动第一个任务到lpn节点
srun --constraint=lpn --ntasks=1 task1.sh &
# 启动第二个任务到hpn节点
srun --constraint=hpn --ntasks=1 task2.sh &
wait

说明:--nodes=2强制SLURM分配两个独立节点,配合--constraint="lpn|hpn"确保节点覆盖两种类型,再通过srun的--constraint将每个任务绑定到对应类型节点。

为什么之前的方法无效

你之前尝试的nodelist或单一constraint参数无法生效,是因为SLURM默认调度策略会尽量将任务紧凑分配到同一节点以提高资源利用率。必须通过--nodes=2强制多节点分配,或用异构作业明确节点组约束,才能绕过这个优化逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 08:22:39