Skip to content

远程服务器运行 Jupyter Notebook 的本地访问方法

本文将详细介绍如何在远程服务器上运行 Jupyter Notebook,并通过本地机器访问和管理它。这种方法特别适合计算资源有限的本地环境,能够利用远程服务器的强大计算能力。

问题背景

当本地机器内存不足无法运行多个 Jupyter Notebook 时,可以通过远程服务器运行 Notebook,然后在本地浏览器中访问。这不仅能提升任务执行速度,还能充分利用服务器的计算资源。

基础配置方法

标准 SSH 端口转发方案

这是最常用且稳定的方法,适用于大多数情况:

  1. 在远程服务器上启动 Jupyter Notebook

    bash
    jupyter notebook --no-browser --port=8888

    TIP

    参数说明:

    • --no-browser:不在服务器上打开浏览器
    • --port:指定端口号(可自定义)
  2. 在本地建立 SSH 隧道

    bash
    ssh -N -L localhost:8888:localhost:8888 username@remote_server_ip

    WARNING

    如果本地端口已被占用,可以更改第一个端口号(如 8889:localhost:8888

  3. 在本地浏览器中访问: 打开 http://localhost:8888,输入 Notebook 显示的 token 即可访问。

详细操作步骤

以下是在不同操作系统上的具体操作:

bash
# 第一步:连接到远程服务器
ssh username@remote_ip

# 第二步:在服务器上启动 Notebook
jupyter notebook --no-browser --port=8890

# 第三步:新开终端,建立 SSH 隧道
ssh -NfL localhost:8890:localhost:8890 username@remote_ip

# 第四步:本地浏览器访问
# http://localhost:8890
bash
# 步骤与 macOS/Linux 相同
# 确保使用 Git Bash 或支持 SSH 的终端

高级配置选项

多 Notebook 同时运行

如果需要同时运行多个 Notebook,可以使用不同端口:

bash
# 服务器端启动多个 Notebook
jupyter notebook --no-browser --port=8888 --ip=0.0.0.0
jupyter notebook --no-browser --port=8889 --ip=0.0.0.0

# 本地建立多个隧道
ssh -NfL localhost:8888:localhost:8888 username@remote_ip
ssh -NfL localhost:8889:localhost:8889 username@remote_ip

使用 SSH VPN 替代多个隧道

对于需要运行大量 Notebook 的情况,可以使用 sshuttle 工具创建 SSH VPN:

bash
# 安装 sshuttle
pip install sshuttle

# 创建 VPN 连接
sshuttle --dns -NHr username@remote_ip 0/0

# 然后可以直接通过服务器IP访问 Notebook
# http://remote_ip:8888

解决常见问题

权限问题

如果遇到权限错误,可以设置 Jupyter 环境变量:

bash
export JUPYTER_CONFIG_DIR=~/.jupyter
export JUPYTER_DATA_DIR=~/.local/share/jupyter
export JUPYTER_RUNTIME_DIR=~/.local/share/jupyter/runtime

jupyter notebook --no-browser --port=8888

连接稳定性

使用 -Nf 参数使 SSH 隧道在后台运行:

bash
ssh -NfL localhost:8888:localhost:8888 username@remote_ip

关闭连接

完成后正确关闭连接:

  1. 在 Notebook 界面选择 "Quit" 或使用 Ctrl+C
  2. 终止 SSH 隧道进程:
    bash
    # 查找进程ID
    lsof -ti:8888
    
    # 终止进程
    kill -9 <进程ID>

安全考虑

WARNING

确保远程服务器的防火墙设置允许相关端口的通信,同时注意不要将 Notebook 暴露在公共网络上 without 密码保护。

建议为 Jupyter Notebook 设置密码:

bash
jupyter notebook password

总结

通过 SSH 端口转发在远程服务器上运行 Jupyter Notebook 是一种高效利用计算资源的方案。关键步骤包括:在服务器上以无浏览器模式启动 Notebook、建立本地到服务器的 SSH 隧道、通过本地浏览器访问。这种方法适用于 macOS、Linux 和 Windows 系统,能够有效解决本地计算资源不足的问题。