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

如何通过单个bash脚本在不同GPU运行程序并生成独立Slurm .out文件

核心问题原因

你当前写的合并脚本存在两个本质错误,所以达不到预期效果:

  • 仅申请了1块V100 GPU(#SBATCH --gres=gpu:v100:1),Slurm只会给该作业开放1块GPU的可见权限,两个后台运行的程序自然只能共用同一块GPU
  • 单个Slurm作业默认只会生成一个.out输出文件,该作业内所有进程的标准输出、错误输出都会默认写入同一个文件

该需求完全可以实现,以下是两种可直接使用的方案:


方案一:单脚本提交两个独立Slurm作业(推荐)

该方案完全复用你原有的作业配置逻辑,和分开提交两个脚本的效果完全一致,仅需执行一个总脚本即可完成提交:

#!/bin/bash
# 提交program1作业,指定独立输出文件
sbatch --output=program1_%j.out << 'EOF'
#!/bin/bash -l
#SBATCH --time=1:00:00
#SBATCH --gres=gpu:v100:1
#SBATCH --mem=90g
#SBATCH --cpus-per-task=6
#SBATCH -N 1

program1
EOF

# 提交program2作业,指定独立输出文件
sbatch --output=program2_%j.out << 'EOF'
#!/bin/bash -l
#SBATCH --time=1:00:00
#SBATCH --gres=gpu:v100:1
#SBATCH --mem=90g
#SBATCH --cpus-per-task=6
#SBATCH -N 1

program2
EOF

该方案优势:两个作业独立调度,Slurm会自动分配不同的GPU资源(集群资源充足的前提下),互不影响,且各自生成独立的输出日志。


方案二:单Slurm作业申请多GPU,手动绑定分配

如果你要求两个任务必须运行在同一个节点上,可以用该方案,先申请2块GPU,再手动绑定每个程序的GPU设备,同时重定向输出:

#!/bin/bash -l
#SBATCH --time=1:00:00
#SBATCH --gres=gpu:v100:2  # 申请2块V100 GPU
#SBATCH --mem=180g  # 两个任务各需90G内存,总申请180G
#SBATCH --cpus-per-task=12  # 两个任务各需6核,总申请12核
#SBATCH -N 1

# 指定program1用第1块GPU,输出到独立日志
CUDA_VISIBLE_DEVICES=0 program1 > program1_${SLURM_JOB_ID}.out 2>&1 &
# 指定program2用第2块GPU,输出到独立日志
CUDA_VISIBLE_DEVICES=1 program2 > program2_${SLURM_JOB_ID}.out 2>&1 &

wait

该方案注意点:两个任务会被调度到同一个节点,GPU序号0、1对应Slurm给该作业分配的两张独立显卡,可保证互不抢占。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:45:04