在 PBS 任务递交系统的 HPC 集群上,我们需要在登录节点上用 qsub
命令递交任务,把计算任务投递到计算节点中运算。如果你想在集群上使用 Jupyter Lab 或者 Jupyter Notebook,该怎么办?
思路其实非常简单,可以先用 qsub
命令投递一个交互式任务,然后在交互式 shell 中打开 Jupyter Lab,设置好端口转发;也可以直接投递一个创建 Jupyter Lab 的任务,然后设置端口转发。
相对来说,第一种方法要简单一些,这里介绍第一种方法。如果想了解第二种方法,请在文章末尾查看相应链接。
投递交互式任务
使用 qsub 的 -I
可以创建交互式作业,这样你就能在终端上直接交互式使用计算节点。比如,递交的队列名字为 queueName
,可以:
qsub -I -q queueName
成功的话,终端会显示连接上的节点名字:
shiyanhe@shiyanheNode23:~
这时候,你在终端上执行的各种命令,是在 shiyanheNode23
这个节点上运行的,而不是登录节点。
如要退出交互作业,可在终端输入 exit
命令,或使用按键 Ctrl+D
。
在投递交互式任务时,可以配合更多参数使用,比如指定队列、节点和任务名字,:
qsub -I -q cpu -l nodes=queueName -N jupyter
比如,指定队列和任务名字,申请 8 核 64 Gb 内存的资源:
qsub -I -q queueName -l ncpus=8,mem=64gb -N jupyter
查询所有队列,可以使用 qstat -q
。查询空闲节点,可以使用 pbsnodes -l free
。更多参数和命令的使用,请查找 PBS 使用教程和文档。
启动 Jupyter Lab
以登录的节点名字为 shiyanheNode23
、连接端口号为 8888
举例,接下来启动 Jupyter Lab:
jupyter lab --port=8888 --ip=shiyanheNode23 --no-browser
将会看得一长串文章,末尾包含连接信息。不过,这时候还不能直接连接,需要设置端口转发。
To access the server, open this file in a browser:
file:///home/shiyanhe/.local/share/jupyter/runtime/jpserver-15959-open.html
Or copy and paste one of these URLs:
http://shiyanheNode23:8888/lab?token=4t6e4c3046g89b16659cae6e5b1a6ede262a05953f4e7aev
or http://127.0.0.1:8888/lab?token=4t6e4c3046g89b16659cae6e5b1a6ede262a05953f4e7aev
设置端口转发
Xshell
打开登录 HPC 登录节点的会话属性,按图片设置端口转发规则:
再新建一个 SSH 窗口,连接至 HPC 的登录节点。然后打开 http://127.0.0.1:8888/lab?token=XXXX
链接,就能使用 Jupyter Lab。
如果你提前知道计算节点或者指定了计算节点,可以直接在打开第一个 SSH 连接前就设置好端口转发,而不需要新建一个连接。
如果你不能提前知道使用的计算节点名称,建议在打开的第一个 SSH 连接时不要设置端口转发,以免跟这一步的新建的连接发生冲突。
MobaXterm
MobaXterm 的操作同样很简单,直接打开 Tunneling 选项,点击 New SSH tunnel
, 填入端口转发信息:
保存好点一下 start 启动 SSH 隧道,再打开http://127.0.0.1:8888/lab?token=XXXX
链接就能使用 Jupyter Lab。
相对 XShell,MobaXterm 的设置要更为灵活,可以随时修改转发的信息,而无需新建 SSH 连接。
Shell
如果是在 Mac 或者 Linux 中操作,本地新建一个设置了端口转发规则的 SSH 连接即可:
ssh -N -f -L localhost:port:computingNode:port userName@loginNodeip
比如:
ssh -N -f -L localhost:8888:shiyanheNode23:8888 shiyanhe@192.168.1.100