如何在超算上跑 jupyter notebook

tutorial
remote
jupyter
Author

Shan Jin

Published

November 24, 2021

这里我总结一下在超算上运行 jupyter notebook(或者lab)的方法。jnb可以在登录节点和远程节点运行,其中登录节点只适合做一些简单的运算,数据量大的运算应在远程节点进行。

这两个方法在并行科技的超算上都能成功。我在广州超算(天河)上做了试验,jupyter 的监听端口在连接成功几秒钟过后就会自动关闭,应该是广超不允许用户私自建立节点上的监听端口,在广超上跑jupyter只能通过官方的星光网站。

在登录节点跑 jupyter notebook

先在本地配置好ssh登录信息,例如

Host YourHost
    Hostname ssh.example.com
    User someone
    Port 22

然后用ssh连接远程服务器后者超算,并做本地的端口映射,例如

ssh YourHost -L 8890:127.0.0.1:8000

其中 8890 对应的是本地端口,8000 是远程端口,在登录节点上运行

jupyter-notebook --no-browser --port=8000

注意端口要与ssh连接的端口保持一致。最后在本地浏览器里访问 127.0.0.1:8890 即可打开登录节点运行的 jupyter notebook.

Important

在登录节点跑 jupyter 一定程度上能节省计算资源,但仅适用于内存占用较少的程序,一般处理数据都需要提交任务到远程节点跑。

用远程节点跑 jupyter notebook

在远程服务器创建如下脚本(假设命名为 jupyter.job

#!/bin/bash
#SBATCH --nodes 1
#SBATCH -n 24 # number of processors in a node
#SBATCH -p amd_512  # partition name
#SBATCH --time 12:00:00
#SBATCH --job-name jupyter-notebook
#SBATCH -o /path/to/logfile/jupyter-output.log
#SBATCH -e /path/to/logfile/jupyter-error.log

# get tunneling info
XDG_RUNTIME_DIR=""
port=$(shuf -i8000-9999 -n1)
node=$(hostname -s)
user=$(whoami)
cluster=$(hostname -f | awk -F"." '{print $2}')

# print tunneling instructions jupyter-log
echo -e "
   MacOS or linux terminal command to create your ssh tunnel
   ssh YourHost -N -L 8890:${node}:${port}

   Use a Browser on your local machine to go to:
   localhost:${port}  (prefix w/ https:// if using password)
   "

# load modules or conda environments here

cd /public1/home/scg1335/jins # where you run this job
jupyter lab --no-browser --port=${port} --ip=${node}
# jupyter-notebook --no-browser --port=${port} --ip=${node}

将其中的 /path/to/logfile/ 替换为你想要的路径,将 YourHost 改为你定义的 Host. 用 sbatch jupyter.job 提交任务,而后在输出文件 jupyter-output.log 中复制ssh的连接信息ssh YourHost -N -L 8890:${node}:${port},在本地终端中运行,进行端口映射。最后在本地浏览器中访问 127.0.0.1:8890,即可连接到超算上的jnb.

Important

并行科技一般的账户都是按节点计费的,不管你是否用满了所有的核,所以跑 jupyter 一定注意机时消耗!!!尽量多人用同一个任务。也可以申请让客服开一个按核计费的账户。