2024-11-21 一站式 AI 平台生日大派对!2024-11-21 一站式 AI 平台生日大派对! 无问芯穹特别推出多项超值福利!立即参与
Skip to content
回到全部文章

通过 SSH 端口转发远程访问开发机上的 Jupyter Lab

本指南将带你完成在远程开发机上安装 Jupyter Lab 并通过 SSH 端口转发安全访问的过程。这种设置让你可以像使用本地环境一样使用远程环境,提高你在数据科学和机器学习项目中的生产力。

什么是 Jupyter Lab?

Jupyter Lab 是一个基于网络的交互式开发环境,支持笔记本、代码和数据可视化,特别适合数据科学和机器学习工作流程,为各种编程语言提供灵活且强大的界面。

方案概述

我们将在远程开发机上安装 Jupyter Lab,并通过 SSH 端口转发在本地机器上访问开发机上的 Jupyter Lab 实例。以下是该解决方案的架构图:

Jupyter Lab 有本地客户端吗?

“Jupyter Server” is Jupyter Notebook without a front end bundled in its installation. That is, it does not include a “client” web application and is merely a web server. Jupyter Lab, and its various extensions, utilize the REST API exposed by Jupyter Server. “Jupyter Server” is more than kernel management, in that it also provides content services for maintaining notebook files within a directory structure and exposes a Session manager through which most interactions occur.

Ref: https://discourse.jupyter.org/t/single-user-setups-for-local-client-remote-kernel/13882/6

如果使用 VS Code 的 Jupyter 插件,可以集成远程 Jupyter server 为 Remote Kernel。

实验环境

  • 开发机
  • Ubuntu 镜像:cr.infini-ai.com/infini-ai-dev/ubuntu:20.04-20231109。你也可选用其他镜像。
  • 可 SSH 远程登录开发机,如需帮助,可参考教程添加 SSH 公钥指南

安装 Jupyter Lab

平台预置的 Ubuntu 基础镜像已包含 Miniconda,我们选择使用 Miniconda 安装 Jupyter Lab。

初始化 Miniconda

bash
conda init

创建虚拟环境

bash
# 检查已安装的 python 版本
python --version
# 创建虚拟环境,指定 python 版本
conda create --name jupyterlab python=3.12.4

激活虚拟环境

bash
conda activate jupyterlab

安装 Jupyter Lab。根据 Jupyter 官方建议,以下命令通过 -c 指定使用 conda-forge channel

bash
conda config --add channels conda-forge
conda install -c conda-forge jupyterlab

启动 Jupyter Lab

TIP

如果你了解如何在 VS Code 中 SSH 远程连接开发机,建议使用 VS Code 集成终端启动 Jupyter Lab。Jupyter Lab 会自动完成端口转发配置。通过 Shift+Command+P(Win:Shift+Ctrl+P)打开命令面板,输入 forward a port,可查看当前端口转发配置。

SSH 连接到开发机,或从云平台访问开发机 Web Terminal 终端界面,启动 Jupyter Lab。

bash
# 直接启动 Jupyter Lab
jupyter lab --no-browser --port=9999 --allow-root
# 你也可以直接在 tmux 会话中启动 Jupyter Lab(实验镜像中已含 tmux)
tmux new-session -s jupyterlab9999 'jupyter lab --no-browser --port=9999 --allow-root'

参数说明:

  • --no-browser: 表示无需自动打开浏览器窗口。
  • --port=9999: 指定端口。不指定端口时,Jupyter Lab 默认使用 8888,这里指定使用非默认端口 9999

TIP

你可以在开发机中启动多个 Jupyter Lab 实例,并指定不同的端口。

获取 Jupyter Lab 验证 Token

启动 Jupyter Lab 后,开发机会输出类似以下的信息。复制其中的 Token,后续远程访问 Jupyter Lab 时需要使用该 Token 验证身份。

bash
[C 2024-08-01 14:04:27.028 ServerApp] 
    
    To access the server, open this file in a browser:
        file:///home/janedoe/.local/share/jupyter/runtime/jpserver-12155-open.html
    Or copy and paste one of these URLs:
        http://localhost:9999/lab?token=0b303eb33e5dec93448d7f64b8be496777323dfc09c52f3a
        http://127.0.0.1:9999/lab?token=0b303eb33e5dec93448d7f64b8be496777323dfc09c52f3a

TIP

你可以用 jupyter server 列出所有 Jupyter Lab 实例,查看端口及 Token。

本地配置

智算云平台仅开放 SSH 访问。如果需要远程访问 Jupyter Lab,需在本地机器上配置 SSH 端口转发。

TIP

如果通过 VS Code 连接到开发机,并在 VS Code 的集成终端启动 Jupyter Lab,VS Code 将自动在本地机器上配置 SSH 端口转发,无需手动配置。

获取开发机 SSH 连接信息

请登录智算云平台,查看开发机的 SSH 连接命令。

alt text

SSH 连接命令示例:-p 33260 root@8.140.242.203

其中包含当前开发机的 SSH 端口号、用户名、SSH 主机 IP,下一步中将会使用。root 为默认 SSH 登录用户名(部分旧版实例展示为非 root 普通用户名,请重启)。

配置 SSH 端口转发

WARNING

继续之前,请确保本地计算机可 SSH 远程访问开发机。如需帮助,请参考 添加 SSH 公钥指南 进行操作和验证。

手动配置 SSH 端口转发

在本地机器上运行以下命令,设置 SSH 端口转发(隧道)以安全连接到远程 Jupyter 服务器。

bash
ssh -N -f -L 8888:localhost:9999 -p 43500 root@8.140.242.203

上面命令中,有三个 SSH 命令选项。

  • -N:不发送任何命令,只用来建立连接。没有这个参数,会在 SSH 服务器打开一个 Shell。
  • -f:将 SSH 连接放到后台。没有这个参数,暂时不用 SSH 连接时,终端会失去响应。
  • -L 8888:localhost:9999:指定端口转发。8888 为本地端口,可按需改为其他端口号。目标是远程机器上的 localhost 上的端口 9999。Jupyter Lab 服务运行在 9999 端口)。
  • root@8.140.242.203: 替换为开发机的 SSH 连接信息。请从智算云平台获取。root 为默认 SSH 登录用户名(部分旧版实例展示为非 root 普通用户名,请重启)。

使用 Jupyter Lab

你可以通过两种方式使用远程的 Jupyter Lab。如果采用「本地集成 Remote Kernel」方式,支持将 Notebook 文件保存在本地计算机上,并通过 Remote Kernel 使用远程开发机上的 GPU。

本地集成 Remote Kernel

配置完 SSH 端口转发后,在 VS Code 界面中,点击右上角的选择内核按钮,选择现有 Jupyter 服务器

在弹出的对话框中,输入本地访问 Jupyter 服务器的地址。

在 SSH 端口转发配置中,如果你配置本地访问 Jupyter Server 的端口号为 8888, Jupyter 服务器的地址即为 http://localhost:8888。另外,你还需要从开发机上复制自己的 Token,追加在地址后。完整输入示例:

http://localhost:8888/?token=261a745f042ffa450cd4b9718098ba4a0e7b67251c844c91

点击确认,VS Code 将自动配置 Remote Kernel。下图展示了配置成功界面,可以在 MacOS 本地的 Notebook 文件中使用 Remote Kernel 运行 Cell。通过 nvidia-smi 命令,可以看到可以直接使用远程开发机上的 Nvidia GPU。

远程访问 Jupyter Lab 界面

在本地机器上打开网络浏览器,访问 http://localhost:8888。首次打开 Jupyter Notebook 界面后,输入之前复制的 Token。使用这种方式将直接登录远程主机,因此无法使用本地计算机上的 Notebook 文件。

连接成功后,Jupyter Lab 界面如下。

TIP

在开发机中运行 Jupyter Lab 服务时,Jupyter Lab 默认使用当前路径为 Notebook 工作目录,即 Jupyter Lab 界面左侧的根目录。你也可以在运行 jupyter lab 前设置环境变量 export JUPYTER_PATH="/path/to/your/desired/directory" 指定一个 Notebook 工作目录。

结论

通过以上步骤,你已经成功在远程开发机上安装了 Jupyter Lab,并通过 SSH 端口转发在本地安全地访问 Jupyter Lab 服务。

参考资料