【问题标题】:SLURM script to run indefinitely to avoid session timeoutSLURM 脚本无限期运行以避免会话超时
【发布时间】:2021-09-13 00:19:44
【问题描述】:

背景:

  • 我需要远程访问全国各地的 HPC(这个地方不对公众开放,我正在实习暑假)
  • 完成此操作后,我会加载一个脚本,为此我们将其命名为 jupyter.sh
  • 此 HPC 中有多个节点,每次运行 .sh 脚本时,我都会被分配到一个节点,比如 N123
  • 从浏览器上的 Jupyter notebook,我必须使用 python 运行实际代码/计算/模拟。我正在处理的数据大约需要 2 个小时才能完全运行,以便我可以处理它并完成我的工作
  • 很多时候,我会从该节点 N123 断开连接,因为“用户没有正在运行的活动作业”,即使我的 jupyter 笔记本仍在运行/我正在处理它
  • 这导致我不得不再次运行该 .sh 脚本,这意味着我将获得一个不同的节点,例如 N456(然后必须再次输入 jupyter 的 ssh 命令行,这次使用不同的节点号)李>
  • Jupyter 将与主机断开连接,这迫使我重新启动内核并再次运行整个代码,这使我花费了 1 小时以及运行 python 代码所需的时间。 (因为我不知道我可以分享什么而不会惹上麻烦,所以不能谈太多细节)

我的问题是, 有没有一种方法可以让我运行一个带有无限循环的 sh 脚本,以便节点将其视为正在运行的活动作业,并且不会因为“不活动”而将我踢出去? 我尝试过运行不同的笔记本,总共需要大约 10 分钟才能运行,但这似乎不足以被视为一项活跃的工作(我不确定它是否算数)

我对 slurm、终端和 ssh 进程的经验非常有限,所以如果这是一个愚蠢的问题,请原谅。

感谢任何帮助。

#!/bin/bash
#SBATCH --nodes=1
#SBATCH --tasks-per-node=1
#SBATCH --job-name=pytorch
#SBATCH --mail-type=ALL
#SBATCH --mail-user== NO NEED TO SEE THIS
#SBATCH --partition=shared-gpu
#SBATCH --qos=long
#SBATCH --ntasks=1
#SBATCH --mem=2G
#SBATCH --time=04:00:00
export PORT=8892
kill -9 $(lsof -t -i:$PORT)
# Config stuff
module purge
module load anaconda/Anaconda3
module load cuda/10.2
source activate NO NEED FOR THIS
# Print stuff
echo Working directory is $SLURM_SUBMIT_DIR
cd $SLURM_SUBMIT_DIR
echo Running on host `hostname`
echo Time is `date`
### Define number of processors
echo This job has allocated $SLURM_JOB_NUM_NODES nodes
# Tell me which nodes it is run on
echo " "
echo This jobs runs on the following processors:
echo $SLURM_JOB_NODELIST
echo " "
jupyter notebook --no-browser --port=$PORT
echo Time is `date

【问题讨论】:

    标签: ssh terminal hpc slurm


    【解决方案1】:

    会是这样的:

    #!/bin/bash
    #SBATCH --job-name=jupyter               # Job name
    #SBATCH --nodes=1                        # Run all processes on a single node.  
    #SBATCH --ntasks=1                       # Run a single task        
    #SBATCH --cpus-per-task=1                # Number of CPU cores per task (multithreaded tasks)
    #SBATCH --mem=2G                         # Job memory request. If you do not ask for enough your program will be killed.
    #SBATCH --time=04:00:00                  # Time limit hrs:min:sec. If your program is still running when this timer ends it will be killed.
    
    srun jupyter.sh
    

    工作?您在文本编辑器中编写它,将其保存为 .slurm,然后使用 sbatch jobname.slurm Salloc 也可能是解决此问题的好方法。

    【讨论】:

    • salloc 行是我正在运行的主 sh 文件的一部分,它显示:salloc -p shared gpu 这是你的意思吗?我将编写并运行该脚本,并希望它有效。感谢您的帮助!
    • 如果您需要 GPU,您需要添加 #SBATCH --gres=gpu:N 行,其中 N 是您需要多少 GPU。您可能还应该在此处添加#SBATCH -p shared gpu。更好的选择可能是编辑 salloc 行,但默认情况下它不应该有截止日期。
    • 我也刚刚意识到您正在提供我可以添加到我的 sh 文件中的行。基本上它给了它一个运行的时间长度。我可能必须尝试一下,看看它是否有帮助,因为我刚刚运行了我当天的第一个 sbatch 文件,在等待两个小时运行之前,不妨现在杀死它并使用这些行运行 sh 文件然后像往常一样移动到 jupyter
    • 添加了实际代码以及您提供的行。我想知道它是否需要等待 4 个小时才能让我从浏览器启动 jupyter...
    • 4 小时是一个时间限制——它基本上告诉调度程序“我需要 x 数量的资源,但我保证最多只需要 4 小时。”如果超过 4 小时,它会杀死工作。我希望添加时间限制会阻止它在那之前杀死它 - 我不确定您的管理员对系统有什么限制,我不认为我的工作只是因为这样的空而杀死工作。尝试在 Jupyter 行添加 srun,例如 srun jupyter --no-browser 等。
    猜你喜欢
    • 1970-01-01
    • 2014-05-15
    • 1970-01-01
    • 2012-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    相关资源
    最近更新 更多