[英]Is it possible to run SLURM jobs in the background using SRUN instead of SBATCH?
我试图在后台运行带有 srun 的 slurm 作业。 不幸的是,现在由于我必须通过 docker 运行它,所以使用 sbatch 有点烦人所以我试图找出是否可以一起避免它。
根据我的观察,每当我运行 srun 时,都会说:
srun docker image my_job_script.py
并关闭我运行命令的 window(以避免接收所有打印语句)并打开另一个终端 window 以查看命令是否仍在运行,似乎我的运行脚本由于某种原因被取消或其他原因。 由于它不是通过 sbatch,它不会向我发送带有错误日志的文件(据我所知),所以我不知道它为什么关闭。
我也试过:
srun docker image my_job_script.py &
在终端中将控制权还给我。 不幸的是,如果我这样做,它仍然会继续将内容打印到我的终端屏幕上,而我正试图避免这种情况。
本质上,我通过 ssh 登录到远程计算机,然后执行 srun 命令,但似乎如果我终止我的 ssh 连接的通信,srun 命令会自动终止。 有办法阻止这种情况吗?
理想情况下,我基本上希望发送脚本运行并且不会因为任何原因取消它,除非我通过scancel
取消它并且它不应该打印到我的屏幕上。 所以我理想的解决方案是:
这将是我的想法解决方案。
对于想知道 sbatch 问题的好奇人群,我希望能够做到(这是理想的解决方案):
sbatch docker image my_job_script.py
但是,正如人们所知,它不起作用,因为 sbatch 收到命令 docker,这不是“批处理”脚本。 本质上,一个简单的解决方案(对我的情况并不适用)是将 docker 命令包装在批处理脚本中:
#!/usr/bin/sh
docker image my_job_script.py
不幸的是,我实际上正在使用我的批处理脚本来编码我正在运行的任务的大量信息(有点像配置文件)。 所以这样做可能会影响我所做的工作,因为它们的基础文件正在发生变化。 通过将作业直接发送到 sbatch 可以避免这种情况,因为它实际上创建了批处理脚本的副本(如本问题所述: Changing the bash script sent to slurm during run a bad idea? )。 所以我的问题的真正解决方案是让我的批处理脚本包含我的脚本所需的所有信息,然后以某种方式在 python 中调用 docker 并同时将所有信息传递给它。 不幸的是,一些信息是 function 指针和对象,所以我什至不清楚如何将这样的东西传递给在 python 中运行的 docker 命令。
或者也许能够直接运行 docker 到 sbatch 而不是使用批处理脚本也可以解决问题。
输出可以使用选项-o stdout重定向, -e用于stderr 。
因此,可以在后台启动作业并重定向输出:
$ srun -o file.out -e file.errr docker image my_job_script.py &
我也想知道这一点,因为sbatch
和srun
之间的差异不是很清楚地解释或动机。 我查看了代码,发现:
sbatch
sbatch
几乎只是将 shell 脚本发送到 controller,告诉它运行它然后退出。 它不需要在作业进行时继续运行。 它确实有一个--wait
选项可以保持运行直到作业完成,但它所做的只是每 2 秒轮询一次 controller 以询问它。
sbatch
无法跨多个节点运行作业 - 代码根本不在sbatch.c
中。 sbatch
不是根据srun
实现的,这是完全不同的事情。
此外,它的参数必须是 shell 脚本。 有点奇怪的限制,但它确实有一个--wrap
选项,因此它可以自动为您将真实程序包装在 shell 脚本中。 祝所有 escaping 正确无误!
srun
srun
更像是一个 MPI 运行程序。 它直接在许多节点上启动任务(默认情况下每个节点一个任务,但您可以使用--ntasks
覆盖它)。 它适用于 MPI,因此所有作业都将同时运行。 直到所有节点都有空闲时,它才会开始。
它必须在作业进行时保持运行。 您可以使用&
将其发送到后台,但这仍然与sbatch
不同。 如果您需要启动一百万srun
,您就会遇到问题。 一百万sbatch
应该(理论上)可以正常工作。
没有办法让srun
退出并让作业继续运行,就像sbatch
。 srun
本身充当作业中所有节点的协调器,并更新作业状态等,因此它需要在整个过程中运行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.