我们公司的服务器使用Slurm工作负载管理器。我正在使用sbatch
提交脚本。目前,我使用#SBATCH -o /job_%j.out
和#SBATCH -e /job_%j.err
将输出打印到一个文件。除了打印到-e
文件之外,我还希望在屏幕上打印该文件。我希望能够实时跟踪进度,而不必不断打开和刷新.out
和e1d5d1文件。
我尝试过echo
,但这只会导致将信息打印到-o
文件。我还试着不指定输出打印到的位置(即:没有#SBATCH -o
命令),希望它默认打印到屏幕上。这也不管用。
我觉得有一个简单的解决办法,但我显然没有搜索到正确的术语。谢谢你的帮助!
4条答案
按热度按时间mznpcxlj1#
sbatch
将提交一个批处理作业,该作业在另一台计算机上运行,而不是在您打开终端的计算机上运行。因此,sbatch
将stdout和stderr重定向到一个文件。最简单的选择是使用tail -f
动态查看文件的内容。否则,使用
srun
而不是sbatch
使输出直接在终端上重定向,但这样它就不再批量运行,如果您断开连接,或者如果您关闭笔记本电脑或关闭终端窗口,您的作业将被终止。kmpatx3s2#
如果您的sBatch文件包含srun命令,则可以使用
sattach jobid.stepid
查看输出-您可以指定一个选项来查看错误而不是输出。2mbi3lxu3#
watch -n 1 cat my_out_file.out
将每秒打印文件的内容。8zzbczxx4#
有一次,我遇到了完全相同的问题。一个有趣的例子是,当你训练一个不适定的机器学习模型时,你可以根据实时损失来决定何时停止训练。
我想实时查看输出,但很难找到
.out
文件,因为我已经有100个.out
文件。Slurm为您提供了交互会话。您需要使用
salloc
为自己分配资源。根据您的需要修改此命令。然后运行该命令,直接在计算节点中打开一个外壳。
现在,您需要在作业分配之后复制
sbatch
作业文件中的所有内容。例如,如果这是我的
sbatch
脚本。我将运行这个脚本文件,或者在进入计算节点的外壳后执行这些命令。
现在,您可以运行一个文件并查看输出。这就是你问题的答案。
或者,您可以保存输出并使用
tail
查看。打开另一个ssh会话,并使用复制的
pwd
导航到该目录。然后使用tail -n
命令查看最后几行或使用cat
查看整个文件。另一种可能性是运行一个端口转发的木星实验室。然后,您可以创建多个ssh连接,jupyter-lab将自动导航到较新版本中的
pwd
。