gpt4 book ai didi

python - 是否可以使用 SRUN 而不是 SBATCH 在后台运行 SLURM 作业?

转载 作者:行者123 更新时间:2023-12-02 04:46:12 26 4
gpt4 key购买 nike

我试图在后台运行 srun 的 slurm 作业。不幸的是,现在由于我必须通过 docker 运行东西,使用 sbatch 有点烦人,所以我试图找出是否可以一起避免它。

根据我的观察,每当我运行 srun 时,都会说:

srun docker image my_job_script.py

并关闭我运行命令的窗口(以避免接收所有打印语句)并打开另一个终端窗口以查看命令是否仍在运行,似乎我正在运行的脚本由于某种原因被取消或其他原因。由于它不是通过 sbatch,它不会向我发送带有错误日志的文件(据我所知),所以我不知道它为什么关闭。

我也尝试过:

srun docker image my_job_script.py &

将终端的控制权交还给我。不幸的是,如果我这样做,它仍然会继续将内容打印到我的终端屏幕上,这是我试图避免的。

本质上,我通过 ssh 登录远程计算机,然后执行 srun 命令,但似乎如果我终止 ssh 连接的通信,srun 命令就会自动终止。有办法阻止这种情况吗?

理想情况下,我希望基本上发送脚本来运行,并且不会以任何原因取消它,除非我通过 scancel 取消它,并且它不应该打印到我的屏幕上。所以我理想的解决方案是:

  1. 即使我退出 ssh session ,仍继续运行 srun 脚本
  2. 即使关闭我发送命令的窗口,仍继续运行我的 srun 脚本
  3. 继续运行我的 srun 脚本,让我离开 srun session 而不打印到我的屏幕上(即本质上运行到后台)

这将是我的想法解决方案。

<小时/>

对于那些想了解 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 sbatch in slurm during run a bad idea? )。因此,我的问题的真正解决方案是让我的批处理脚本包含我的脚本所需的所有信息,然后以某种方式在 python 中调用 docker,同时传递所有信息。不幸的是,一些信息是函数指针和对象,所以我什至不清楚如何将这样的东西传递给在 python 中运行的 docker 命令。

<小时/>

或者也许能够直接运行 docker 到 sbatch 而不是使用批处理脚本也可以解决问题。

最佳答案

可以使用选项-ostdout-e(对于stderr)重定向输出。

因此,该作业可以在后台启动并重定向输出:

$ srun -o file.out -e file.errr docker image my_job_script.py &

关于python - 是否可以使用 SRUN 而不是 SBATCH 在后台运行 SLURM 作业?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42166446/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com