如何通过作业提交在远程服务器运行Jupyter Notebook并实现本地访问?
解决方案
前置准备
先在超算登录节点执行jupyter notebook password,按提示设置访问密码,避免后续用token登录的麻烦。
步骤1:编写qsub作业脚本
创建PBS作业脚本,命名为jupyter_job.pbs,内容参考如下(按需调整资源参数):
#PBS -N jupyter_notebook #PBS -l nodes=1:ppn=4 # 按需调整申请的核数 #PBS -l walltime=24:00:00 # 按需调整作业最长运行时间 #PBS -j oe #PBS -o jupyter.log # 加载超算上的Jupyter运行环境,根据超算实际模块配置调整 module load anaconda3 # 启动Jupyter Notebook,指定监听IP、端口、不启动远程浏览器 jupyter notebook --ip=0.0.0.0 --port=8888 --no-browser
步骤2:提交作业并获取运行信息
- 登录超算登录节点,执行
qsub jupyter_job.pbs提交作业 - 等待作业调度成功后,打开生成的日志文件
jupyter.log,可以看到两个关键信息:- 作业运行的计算节点域名/IP,比如
node07 - Jupyter实际绑定的端口(如果预设的8888端口被占用会自动更换,比如日志显示
http://0.0.0.0:8889/则对应端口为8889)
- 作业运行的计算节点域名/IP,比如
步骤3:本地配置端口转发
打开本地终端,执行以下命令,通过登录节点做跳板,将计算节点的Jupyter端口转发到本地:ssh -L 本地端口:计算节点名:Jupyter端口 你的超算登录账号@超算登录地址
举个实际示例:假设你本地用8888端口,计算节点是node07,Jupyter端口是8889,超算登录账号是me,登录地址是remoteserver,命令为:ssh -L 8888:node07:8889 me@remoteserver
执行后保持这个终端窗口不要关闭。
步骤4:本地访问Jupyter
打开本地浏览器,访问http://localhost:8888,输入之前设置的Jupyter密码即可使用。所有读写操作都直接在超算节点上执行,不需要下载数据到本地。
常见注意事项
- 如果本地端口8888被占用,可以换其他未被占用的端口(比如8890),只需要修改转发命令里的本地端口即可,访问时对应改成
http://localhost:8890 - 作业运行时长到期前可以重新提交作业续期,重复上述步骤即可
- 如果你的超算用的是Slurm调度而非PBS,把作业脚本的头部改成Slurm对应的参数即可,Jupyter启动命令、端口转发逻辑完全一致
内容的提问来源于stack exchange,提问作者mgmf46
相关产品推荐
相关产品推荐

