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 下运行长时间的任务会有如下两个问题:
- 长时间任务在运行时一旦网络出现波动会导致其运行的日志打印中断,导致无法查看到目前训练的进度
- 长时间任务在 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 中,「工作空间」需要具备两个条件才能被视为空闲:
- JupyterLab 页面被关闭
- CPU 使用率持续低于 2%
在「容器」的「设置」选项卡可以看到「JupyterLab 闲置自动关闭设置」,可以设置容器处于空闲状态多少长时间将被自动关闭,默认的时长为 30 分钟。当容器被认定为空闲状态后容器的创建者会收到提醒(通过短信或者邮箱发送),如果容器依然处于空闲状态,将会因为空闲时间达到设置的最大空闲时间而被关闭,在这种情况下 OpenBayes 也会为容器的创建者发送一个容器被关闭的通知。有关容器空闲关闭的通知方式可以在 gear#设定通知 进行配置。
判断 JupyterLab 页面关闭与否是通过 JupyterLab 所提供的 api 实现的,我们不会记录用户的编辑内容。如果 JupyterLab 页面没有关闭,那么后台会查询到 JupyterLab 处于活跃状态,在这种情况下我们会认为「工作空间」依然是在被使用的,不会触发空闲关闭机制的。
JupyterLab 页面关闭不会导致已经在运行的程序出现中断,因此如果确实需要在 JupyterLab 中执行长任务,又希望程序运行完触发空闲关闭,可以直接关闭页面。
有的时候 JupyterLab 虽然没有关闭但是电脑自身锁定或者睡眠也会让 OpenBayes 认为容器是不活跃的了,但是这种情况和每个人的电脑设定有关,如果希望触发空闲关闭不浪费计算资源还是建议关闭页面。
当容器由于空闲时长而被自动关闭时,OpenBayes 会在容器的状态上显示「超时关闭」。
Jupyter Kernel 内核的重启
每次在 Jupyter 工作空间中打开一个 .ipynb
文件后系统会对应的创建一个名为 kernel
的后台负责执行在页面提交的代码。如果发现自己的 .ipynb
文件执行命令出现了问题,最简单的处理方法就是重启对应的 kernel
: