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

如何用Slurm在同一节点运行多个独立Python脚本?

解决同一Slurm节点运行多个Python实验的方案

核心修改思路

你的需求是在同一节点、单GPU上运行4个独立Python实验,只需调整Slurm资源参数并通过合适方式启动多任务即可。以下是两种规范且可行的修改方案:


方案一:基于Slurm srun 任务调度(推荐)

这种方式符合Slurm的任务管理逻辑,能让系统自动分配CPU资源,避免资源竞争。

修改后的完整脚本:

#!/bin/bash

#SBATCH --nodes=1 
#SBATCH --ntasks=4          # 任务数改为4,对应4个实验
#SBATCH --time=12:00:00
#SBATCH --job-name=multi-exps
#SBATCH --gres=gpu:1        # 保持单GPU不变,所有实验共享
#SBATCH --cpus-per-task=2   # 每个实验分配2核CPU,总核数4*2=8,与原脚本总CPU资源一致
source .venv/bin/activate # 激活虚拟环境

# 定义4个实验的参数(根据你的实际需求修改)
EXP_ARGS=("exp_config1" "exp_config2" "exp_config3" "exp_config4")

# 循环启动每个实验任务
for ARG in "${EXP_ARGS[@]}"; do
    # --exclusive 确保每个任务独占分配的CPU核心,避免干扰
    srun --exclusive --ntasks=1 python test.py --args=$ARG > log_$ARG.txt 2>&1 &
done

# 等待所有后台任务执行完成,避免Slurm提前终止脚本
wait

方案二:直接后台运行(适合简单场景)

如果不需要Slurm精细的任务调度,也可以直接用后台进程方式启动,手动分配CPU核心避免竞争。

修改后的完整脚本:

#!/bin/bash

#SBATCH --nodes=1 
#SBATCH --ntasks=1          # 保持单任务,由脚本自行管理多进程
#SBATCH --time=12:00:00
#SBATCH --job-name=multi-exps
#SBATCH --gres=gpu:1
#SBATCH --cpus-per-task=8   # 保留原总CPU资源
source .venv/bin/activate # 激活虚拟环境

# 用taskset绑定每个实验到不同CPU核心,后台运行并生成独立日志
taskset -c 0-1 python test.py --args=exp_config1 > log_exp1.txt 2>&1 &
taskset -c 2-3 python test.py --args=exp_config2 > log_exp2.txt 2>&1 &
taskset -c 4-5 python test.py --args=exp_config3 > log_exp3.txt 2>&1 &
taskset -c 6-7 python test.py --args=exp_config4 > log_exp4.txt 2>&1 &

# 等待所有实验完成
wait

注意事项

  • 确保每个Python实验的GPU内存占用之和不超过单GPU的可用显存,避免OOM错误
  • 日志输出部分(> log_$ARG.txt 2>&1)可根据需求保留或删除,用来单独记录每个实验的输出和错误
  • 如果每个实验需要更多CPU资源,可调整--cpus-per-task参数,但需保证总核数不超过节点可用CPU数

内容的提问来源于stack exchange,提问作者Thanh Long Phan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 19:38:21