这里我总结一下在超算上运行 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.
在登录节点跑 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.
并行科技一般的账户都是按节点计费的,不管你是否用满了所有的核,所以跑 jupyter 一定注意机时消耗!!!尽量多人用同一个任务。也可以申请让客服开一个按核计费的账户。