Slurm-ECHO输出文件以便在屏幕上打印?

pokxtpni  于 2022-09-21  发布在  Unix
关注(0)|答案(4)|浏览(238)

我们公司的服务器使用Slurm工作负载管理器。我正在使用sbatch提交脚本。目前,我使用#SBATCH -o /job_%j.out#SBATCH -e /job_%j.err将输出打印到一个文件。除了打印到-e文件之外,我还希望在屏幕上打印该文件。我希望能够实时跟踪进度,而不必不断打开和刷新.out和e1d5d1文件。

我尝试过echo,但这只会导致将信息打印到-o文件。我还试着不指定输出打印到的位置(即:没有#SBATCH -o命令),希望它默认打印到屏幕上。这也不管用。

我觉得有一个简单的解决办法,但我显然没有搜索到正确的术语。谢谢你的帮助!

mznpcxlj

mznpcxlj1#

sbatch将提交一个批处理作业,该作业在另一台计算机上运行,而不是在您打开终端的计算机上运行。因此,sbatch将stdout和stderr重定向到一个文件。最简单的选择是使用tail -f动态查看文件的内容。

否则,使用srun而不是sbatch使输出直接在终端上重定向,但这样它就不再批量运行,如果您断开连接,或者如果您关闭笔记本电脑或关闭终端窗口,您的作业将被终止。

kmpatx3s

kmpatx3s2#

如果您的sBatch文件包含srun命令,则可以使用sattach jobid.stepid查看输出-您可以指定一个选项来查看错误而不是输出。

2mbi3lxu

2mbi3lxu3#

watch -n 1 cat my_out_file.out将每秒打印文件的内容。

8zzbczxx

8zzbczxx4#

有一次,我遇到了完全相同的问题。一个有趣的例子是,当你训练一个不适定的机器学习模型时,你可以根据实时损失来决定何时停止训练。

我想实时查看输出,但很难找到.out文件,因为我已经有100个.out文件。

Slurm为您提供了交互会话。您需要使用salloc为自己分配资源。

salloc --nodes=1 --account=scw1901 --partition=accel_ai_mig --gres=gpu:2

根据您的需要修改此命令。然后运行该命令,直接在计算节点中打开一个外壳。

srun --pty bash

现在,您需要在作业分配之后复制sbatch作业文件中的所有内容。

例如,如果这是我的sbatch脚本。


# !/bin/bash

# SBATCH --nodes 1

# SBATCH --cpus-per-task 5

# SBATCH --time 03:00:00

# SBATCH --ntasks=1

# SBATCH --job-name jupyter-lab

# SBATCH -o /home/s.1915438/jupyter_log/jupyter-lab-%J.log

# SBATCH -e /home/s.1915438/jupyter_log/jupyter-lab-%J.log

# SBATCH --gres=gpu:1

# SBATCH --account=scw1901

# SBATCH --partition=accel_ai

# run jupyter notebook

module load anaconda/3
source activate ml

我将运行这个脚本文件,或者在进入计算节点的外壳后执行这些命令。

module load anaconda/3
source activate ml

现在,您可以运行一个文件并查看输出。这就是你问题的答案。

python file.py

或者,您可以保存输出并使用tail查看。

pwd # copy the output
python file.py >> output.txt

打开另一个ssh会话,并使用复制的pwd导航到该目录。然后使用tail -n命令查看最后几行或使用cat查看整个文件。

另一种可能性是运行一个端口转发的木星实验室。然后,您可以创建多个ssh连接,jupyter-lab将自动导航到较新版本中的pwd

相关问题