如何实现节点分配与命令执行分离并自动终止salloc作业?
可行,用Slurm的
salloc+srun --jobid组合就能实现 完全可以做到节点分配和命令执行分离,且无需手动执行scancel,具体步骤如下:
第一步:用
salloc分配并保留节点
执行salloc命令申请节点资源,比如要1个节点、8核:salloc --nodes=1 --cpus-per-task=8命令执行后,Slurm会分配节点并输出作业ID(比如
123456),同时在本地启动一个交互式shell——只要这个shell不退出,分配的节点就会一直保留,作业处于运行状态。第二步:用
srun --jobid在已分配节点上多次运行命令
不管是在当前终端(另开子shell)还是其他终端,都可以通过指定作业ID来在已分配的节点上执行任意命令,比如:# 第一次运行脚本 srun --jobid=123456 ./data_process.sh # 第二次运行分析程序 srun --jobid=123456 ./model_train.py每一次
srun执行完成后,作业不会终止,节点依然保持分配状态,你可以继续执行后续的命令。第三步:完成所有命令后自动终止作业
当所有需要运行的命令都执行完毕,只需要在salloc启动的交互式shell中输入exit并回车,Slurm就会自动终止作业、释放节点,完全不需要手动执行scancel。
补充说明
srun --jobid的作用是将任务附加到已存在的作业资源上执行,单个srun任务的完成不会触发作业终止——作业的生命周期由salloc启动的主shell控制,只有当主shell退出,作业才会结束。
内容的提问来源于stack exchange,提问作者Milad
相关产品推荐
相关产品推荐

