跳到主要内容

Jupyter 工作空间

最新版本的 Gear 将使用「Jupyter 工作空间」(后面也会直接称为「工作空间」)替换原有的「JupyterLab」,「Jupyter 工作空间」是对原有的 JupyterLab 的改进:

  • 所启动的依然是一个 JupyterLab 为入口的交互式环境,其体验与原来的 JupyterLab 没有任何区别。
  • 提供了「重启」的流程,即不再像原来的 JupyterLab 一样,每次启动(继续执行)后会创建一个新的执行。避免了「继续执行」导致的存储规模翻倍的问题。也易于新手用户理解
  • 每次启动都会绑定自己之前的「工作目录」内容,不再允许启动时更换绑定;但启动时依然可以对「算力」、「运行时环境」(镜像)、数据绑定(input 绑定)等配置做调整。

基本界面

在单次执行的页面点击「打开 Jupyter 工作空间」进入如下的界面:

其中右侧的侧边栏展示了当前执行的一些基本信息,包括系统指标、执行的基本信息(算力类型、运行环境、运行时间)以及设置界面。其中通过系统指标可以了解到当前执行是否在有效的利用系统所提供的计算资源。在执行打开后也会默认弹出 openbayes-intro.ipynb 文件包含了 OpenBayes Jupyter 工作空间的一些基本介绍。

虽然在 JupyterLab 页面的左侧文件导航栏的头部显示的目录为 /home 但并不是指系统中的 /home 目录,而是指相对于 JupyterLab 所设定的根目录的位置。OpenBayes 将 JupyterLab 的工作目录设置为了 /openbayes ,那么当 JupyterLab 展示的目录为 /home 时,实际上其所对应的系统中的目录为 /openbayes/home 目录。

左侧文件导航栏无法展示 /openbayes 以为的目录的内容,如果需要保存其他目录的文件,请通过 JupyterLab 的 Terminal 命令行将其他目录的内容拷贝到 /openbayes/home 目录。

Jupyter 工作空间的创建

和之前创建 JupyterLab 的流程一样,只是在选择「接入方式」时,不再有原有的 JupyterLab 而是新的工作空间了:

备注

在创建执行时的「数据绑定」阶段,工作空间依然可以做数据绑定,和「Python 脚本执行」以及之前的 JupyterLab 行为是一致的,文档见「数据绑定」

执行启动后,其界面与 JupyterLab 是一致的:

执行长时间训练

机器学习尤其是深度学习的训练任务通常会需要比较长的运行时间,但是作为一个交互式的编程环境,JupyterLab 并不非常适合这种场景。

虽然在 JupyterLab 执行的程序即使关闭 JupyterLab 的网页,程序依然会运行,但是在 JupyterLab 下运行长时间的任务会有如下两个问题:

  1. 长时间任务在运行时一旦网络出现波动会导致其运行的日志打印中断,导致无法查看到目前训练的进度
  2. 长时间任务在 Jupyter 工作空间中执行时即使任务执行完毕了或者由于某些原因报错了,Jupyter 工作空间不会立即关闭,但是计费还在继续导致计算资源的浪费

因此如果需要执行长时间的训练任务,建议查看 Task 与 Jupyter 工作空间结合部分采用 task 执行长时间任务。不过这里依然提供两个对应的解决方案:

使用 Log Console 找到丢失的日志

这里通过一个简单的代码片段模拟一个长时间运行的任务:

import time

for i in range(100000):
print(i)
time.sleep(1)

将该段代码在一个 .ipynb 文件中执行看到如下的日志信息:

这个代码块会一直更新日志,但是如果我们刷新页面后再回来会发现日志不再更新了。这个时候在该代码块中右键点击「Show Log Console」打开当前的 Log Console 界面。

然后选择 Debug 级别的日志就可以看到之前的日志进度了:

使用日志重定向保存日志到文件并配合 tail 命令查看最新的日志内容

对于通过 Terminal 执行的长任务,可以将日志重定向一个特定的文件,并通过 tail -f 的命令查看日志:

# 将 python train.py 的输出重定向到 train.log 文件中
python train.py > train.log 2>&1 &

# 通过 tail -f 命令查看 train.log 文件的内容
tail -f train.log

Jupyter 工作空间的自动关闭

由于「工作空间」在开启之后就开始计费了,为了减少因为忘记关闭而带来的计算资源的浪费。OpenBayes 默认为容器里添加了「工作空间」超时自动关闭的设置。

在 OpenBayes 中,「工作空间」需要具备两个条件才能被视为空闲

  1. JupyterLab 页面被关闭
  2. CPU 使用率持续低于 2%

在「容器」的「设置」选项卡可以看到「JupyterLab 闲置自动关闭设置」,可以设置容器处于空闲状态多少长时间将被自动关闭,默认的时长为 30 分钟。当容器被认定为空闲状态后容器的创建者会收到提醒(通过短信或者邮箱发送),如果容器依然处于空闲状态,将会因为空闲时间达到设置的最大空闲时间而被关闭,在这种情况下 OpenBayes 也会为容器的创建者发送一个容器被关闭的通知。有关容器空闲关闭的通知方式可以在 gear#设定通知 进行配置。

注意 非常重要!

判断 JupyterLab 页面关闭与否是通过 JupyterLab 所提供的 api 实现的,我们不会记录用户的编辑内容。如果 JupyterLab 页面没有关闭,那么后台会查询到 JupyterLab 处于活跃状态,在这种情况下我们会认为「工作空间」依然是在被使用的,不会触发空闲关闭机制的。

JupyterLab 页面关闭不会导致已经在运行的程序出现中断,因此如果确实需要在 JupyterLab 中执行长任务,又希望程序运行完触发空闲关闭,可以直接关闭页面。

有的时候 JupyterLab 虽然没有关闭但是电脑自身锁定或者睡眠也会让 OpenBayes 认为容器是不活跃的了,但是这种情况和每个人的电脑设定有关,如果希望触发空闲关闭不浪费计算资源还是建议关闭页面。

当容器由于空闲时长而被自动关闭时,OpenBayes 会在容器的状态上显示「超时关闭」。

Jupyter Kernel 内核的重启

每次在 Jupyter 工作空间中打开一个 .ipynb 文件后系统会对应的创建一个名为 kernel 的后台负责执行在页面提交的代码。如果发现自己的 .ipynb 文件执行命令出现了问题,最简单的处理方法就是重启对应的 kernel

Jupyter 工作空间的重启

在工作空间关闭之后可以再次启动。目前工作空间支持两种模式的启动:「快速启动」和「修改配置并启动」。

快速启动

点击页面上的「启动」进行快速启动,默认保留上一次执行的「数据绑定」「算力」「运行时环境」(镜像),并自动绑定上一次运行时「工作目录」的数据。

修改配置并启动

如果需要修改配置可以点击「启动」右侧的箭头:

之后可以按照流程修改算力、运行时环境(镜像)、数据绑定等信息。

Jupyter 工作空间的高速缓存机制

  • 每位用户可创建的工作空间个数不受限制,但我们为每位用户提供的可缓存的工作空间的个数是有限的
  • 创建工作空间时,默认都会被高速缓存,被缓存的工作空间会在界面上额外显示一个闪电图标
  • 当达到当前用户可保存的高速缓存上限后,会将旧的被缓存的工作空间降级为普通工作空间。被缓存工作空间降级时,总是会优先删除上次关闭时间距离现在最远的那个(最早的一个)
  • 被缓存的工作空间在关闭后有最大的缓存时间,超过这个时间后,即使没有创建新的工作空间,也会被降级为普通的工作空间
  • 被缓存的工作空间在功能上与普通的工作空间没有任何区别,只是在启动速度上存在差异

是否还可以创建老版本的 JupyterLab?

工作空间为全平台自动开启。在更新之后,用户就不再能够创建老版本的 JupyterLab 了,如果希望迁移到新的工作空间只需要在创建工作空间时绑定原有的工作目录即可。

为工作空间建立快照

创建「快照」可以将当前工作空间的「工作目录」保存下来,作为一个固定的版本,以便在未来使用:

快照创建后依据「工作目录」规模大小需要一定的拷贝时间,工作空间「工作目录」越大,所需要拷贝的时间就越久。

快照会记录工作空间所使用的「算力类型」「数据绑定」「镜像类别」,通过「继续执行」可以从这个快照启动新的「工作空间」,默认沿用快照所记录的以上配置并将快照的「工作目录」拷贝到新的工作空间的 /openbayes/home 目录下:

快照模式需要注意的几点:

  • 用户只有在工作空间处于「正在运行」和「已关闭」两种状态下可以创建快照
  • 快照所占用的空间即为标准的存储空间费用,无额外的其他费用,将不再使用的快照删除将释放相应的存储空间
  • 创建快照时尽量避免对运行中的工作空间执行文件写入 / 修改操作,以防生成的快照与期望内容不一致