AIStudio SSH 公钥管理,一处配置,处处可用AIStudio SSH 公钥管理,一处配置,处处可用 ,只为更佳开发体验如何配置
Skip to content
回到全部文章

在 AIStudio 开发机上安装和使用 Jupyter Lab

本指南将带你完成在 AIStudio 开发机上安装 Jupyter Lab,并像使用本地环境一样使用开发机上的 JupyterLab,提高在数据科学和机器学习项目中的生产力。

什么是 Jupyter Lab?

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

实验环境

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

手动安装 Jupyter Lab

由于 AIStudio 平台未集成 Jupyter Lab,也未提供包含 Jupyter Lab 的预置镜像,我们可以手动安装 Jupyter Lab。

以下实验步骤以 Ubuntu 基础镜像为例。

TIP

如果想要直接获取预装 Jupyter Lab 的镜像,也可以使用 构建自定义镜像 · 基于现有镜像中的示例创建一个自定义镜像。镜像构建完成后,使用该自定义镜像创建开发机,其中已安装 Jupyter Lab。

pip

最简单的方式,直接用 pip 安装 jupyterlab:

bash
python3 -m install jupyterlab

conda

建议先阅读 在开发机中使用 Conda。以下步骤推荐在开发机 Web Terminal 中完成。

  1. 初始化镜像自带的 Miniconda。

    bash
    conda init
  2. 创建虚拟环境

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

    bash
    conda activate jupyterlab
  4. 安装 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。

在智算云平台直接访问 Jupyter 界面

AIStudio 平台为了方便用户访问应用 UI 界面,提供了 Web 应用预览功能,可转发开发机实例内的 Web UI 服务。

  1. 创建或改配 AIStudio 开发机,填写预期使用的 Web 应用预览端口号(例如 9999)。开发机启动后生效。

  2. 启动 JupyterLab 服务,并绑定到所有网络接口(0.0.0.0)。

    bash
    # 假设当前开发机 Web 应用预览端口号已被配置为 9999,则需要使用 --port 指定同样的端口号
    jupyter lab --no-browser --ip 0.0.0.0 --port=9999 --allow-root

    IMPORTANT

    在启动 Web 服务时,请绑定到所有网络接口(0.0.0.0),否则无法预览。

NOTE

访问 Web 应用预览界面要求登录 AIStudio 账号。

远程访问

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

方案概述

我们将在远程开发机上安装 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。

本地 SSH 端口转发配置

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

IMPORTANT

推荐通过 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。

远程访问 Jupyter Lab 界面

采用「远程访问 Jupyter Lab 界面」方式,无需提前登录 AIStudio 账号,即可使用 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 工作目录。

集成 Remote Kernel

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

配置完 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,并通过三种方式使用 Jupyter Lab。

  • 在智算云平台通过跳转方式,直接打开 Jupyter Lab 界面。
  • 通过 SSH 端口转发在本地安全地访问 Jupyter Lab 界面。
  • 通过 SSH 端口转发集成远程 Jupyter 内核,在本地的 Notebook 中直接使用 AIStudio 开发机上的 GPU。

参考资料