如何在HPC集群使用Jupyter Lab

2021-09-22 12:20:55 浏览数 (1)

在 PBS 任务递交系统的 HPC 集群上,我们需要在登录节点上用 qsub 命令递交任务,把计算任务投递到计算节点中运算。如果你想在集群上使用 Jupyter Lab 或者 Jupyter Notebook,该怎么办?

思路其实非常简单,可以先用 qsub 命令投递一个交互式任务,然后在交互式 shell 中打开 Jupyter Lab,设置好端口转发;也可以直接投递一个创建 Jupyter Lab 的任务,然后设置端口转发。

相对来说,第一种方法要简单一些,这里介绍第一种方法。如果想了解第二种方法,请在文章末尾查看相应链接。

投递交互式任务

使用 qsub 的 -I 可以创建交互式作业,这样你就能在终端上直接交互式使用计算节点。比如,递交的队列名字为 queueName,可以:

代码语言:javascript复制
qsub -I -q queueName

成功的话,终端会显示连接上的节点名字:

代码语言:javascript复制
shiyanhe@shiyanheNode23:~

这时候,你在终端上执行的各种命令,是在 shiyanheNode23 这个节点上运行的,而不是登录节点。

如要退出交互作业,可在终端输入 exit 命令,或使用按键 Ctrl D

在投递交互式任务时,可以配合更多参数使用,比如指定队列、节点和任务名字,:

代码语言:javascript复制
qsub -I -q cpu -l nodes=queueName -N jupyter

比如,指定队列和任务名字,申请 8 核 64 Gb 内存的资源:

代码语言:javascript复制
qsub -I -q queueName -l ncpus=8,mem=64gb -N jupyter

查询所有队列,可以使用 qstat -q。查询空闲节点,可以使用 pbsnodes -l free。更多参数和命令的使用,请查找 PBS 使用教程和文档。

启动 Jupyter Lab

以登录的节点名字为 shiyanheNode23 、连接端口号为 8888 举例,接下来启动 Jupyter Lab:

代码语言:javascript复制
jupyter lab --port=8888 --ip=shiyanheNode23 --no-browser

将会看得一长串文章,末尾包含连接信息。不过,这时候还不能直接连接,需要设置端口转发。

代码语言:javascript复制
    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 连接即可:

代码语言:javascript复制
ssh  -N -f -L localhost:port:computingNode:port userName@loginNodeip

比如:

代码语言:javascript复制
ssh -N -f -L localhost:8888:shiyanheNode23:8888 shiyanhe@192.168.1.100

参考

  1. 在HPC的节点上使用jupyter notebook:https://www.cnblogs.com/leezx/p/12009741.html
  2. 远程访问电脑或集群中的jupyter notebook:https://zhuanlan.zhihu.com/p/186217467

0 人点赞