slurm/sbatch/srun 多步骤串行运行多个依赖性任务

在slurm系统下,有时候需要按步骤运行A、B、C三个任务,但是直接写在脚本里会同时提交,所以需要建立依赖关系。

错误做法:

搜索网上做法及slurm串行教程,做法多为如下,使用bash或python来按顺序/循环内来串行多个任务。这种做法对于本地运行是没有问题的,上一个程序跑完再进行下一个程序,但是对于slurm而言,srun提交到远程即视为结束,并不检测job实际运行状态,就导致连续提交了3个任务,但是3个任务均在远程运行

# 这种情况下,任务提交视为完成,但是实际任务并没有运行完毕,导致按顺序同时提交了3个任务。
srun -p partition python a.py
srun -p partition python b.py
srun -p partition python c.py

正确做法

参考slurm教程,有个参数为dependency,可以设置上一个JOBID运行完再运行下一个。
在这里插入图片描述

#!/bin/sh
date=$(date "+%Y%m%d%H%M")
# -p为分区名,async可以后台运行,-o 将结果输出到定向文件
srun -p xx --gres=gpu:8 --job-name=yy --async -o log/${date}_yy.log python -m torch.distributed.run --nproc_per_node=8 --master_port=25431 a.py

jobid1=$(squeue -p xx --name yy| tail -1| awk '{print $1}')
srun -p xx --dependency=afterok:${jobid1} --gres=gpu:8 --job-name=yy2 --async -o log/${date}_yy2.log python -m torch.distributed.run --nproc_per_node=8 --master_port=25432 b.py

jobid2=$(squeue -p xx --name yy2| tail -1| awk '{print $1}')
srun -p xx --dependency=afterok:${jobid2} --gres=gpu:8 --job-name=yy3 --async -o log/${date}_yy3.log python -m torch.distributed.run --nproc_per_node=8 --master_port=25433 c.py

bash脚本获取JOBID:https://stackoverflow.com/questions/73186840/how-do-i-get-the-slurm-job-id
perl脚本运行可以参考:http://cn.voidcc.com/question/p-gktjwzvv-bkn.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值