【发布时间】: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
【问题讨论】: