BayesGear 算力容器

介绍 BayesGear 算力容器的使用方式

Updated , 去 GitHub 贡献本页面

容器的执行模型

算力容器作为一个计算单元,可以执行各种各样的计算工作,包括数据预处理,机器学习模型的训练,利用已有模型对未标注数据进行推断等。算力容器通过选择算力类型指定算力容器的计算能力以及绑定的硬件(CPU / GPU)。然后通过设置容器中所采用的镜像指定容器的运行时环境,即代码所需要运行的依赖类库更多(默认依赖信息参见运行时环境)。

容器本身只提供计算资源,通过绑定数据集输出来加载数据并将结果保存下来用于其他用途。

容器的创建

容器目前支持两种方式:Python 脚本执行和 Jupyter 编辑器。其中 Python 脚本执行需首先上传要执行的代码,容器的执行目录默认为 /output

容器的每次运行都是独立的执行环境,每次执行记录在 OpenBayes 中被称为「执行」。而每次「执行」在被关闭后其 /output 目录下的内容将被保存下来,可以通过页面的「输出」选项卡查看。

继续执行

通常来说,同一个「容器」下的多次执行在业务上会存在着很大的共性。为了方便用户可以在执行历史的基础上创建新的「执行」,目前 OpenBayes 提供了「继续执行」的选项。

OpenBayes 会为我们做如下事情:

  1. 绑定上一次「执行」已经绑定的数据集到相同的位置
  2. 如果上一次「执行」是一个「Python脚本任务」,那么同样绑定相同的代码
  3. 绑定上一次「执行」的「输出」到 /output 目录

注意,在 OpenBayes 中可以将一个 BayesGear 的输出绑定到一个新的容器上,实现 “管道” 的效果。这里我们就是将之前的一个 “模型训练” 的「输出」作为了一个 “模型推断” 任务的输入。然而这种使用方式是将上一次执行的「输出」全部拷贝到新的容器里,这会导致所使用的存储翻倍。因此如果不需要对上一次的输出进行写操作,建议将其绑定到「input0-2」目录中,这将把数据以只读的方式链接到新的容器中,不会产生额外的数据用量。

除了在执行页面上使用「继续执行」外,还可以在「执行记录」页面操作。

在选择继续执行后修改代码的场景

「继续执行」意在方便用户在代码不变的基础上继续上一次的训练,如果在「继续执行」场景下更新了代码需要特别注意。

在点击「继续执行」后如果在这里尝试上传新的代码可能会与当前绑定的「上一次执行的输出」中的代码冲突。例如在上一次执行中,我们已经上传了一个名为 main.py 的文件,这个文件已经被保存到了上一次执行的「输出」里面了。如果再次上传了一个修改了的同样名为 main.py 的文件,那么 openbayes 会忽略这次修改,保留已有的文件

因此,如果当您使用了「继续执行」并且发现出现了执行代码与您的预期不一致的情况,可以检查「输出」选项卡下的代码内容是否是被覆盖了。

如果不想出现这种情况,可以修改默认绑定的「上一次执行的输出」的绑定目录。

Jupyter 的自动关闭

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

在 OpenBayes 中,Jupyter 没有任何页面操作并且 CPU 使用率一直为 0 被视为空闲。在「容器」的「设置」选项卡可以看到「JupyterLab 限制自动关闭设置」。

设定通知

目前 OpenBayes 提供了两种发送通知的渠道:邮件通知以及短信通知。邮件通知被默认勾选且无法关闭,用户可以依据自己的喜好去设置短信通知。

Task 与 JupyterLab 两种模式结合使用

Jupyter 编辑器模式适合即时的文件执行和修改,但是其对计算资源的使用效率不高,在用户编辑和调试的过程中其资源经常是浪费的;Python 脚本上传方式在容器开始运行后会立即执行 Python 代码,对计算资源的利用效率高,但是其修改起来非常麻烦,每次更新代码都需要重新上传。

因此建议可以在低算力模式下(CPU 算力)首先创建 JupyterLab 编辑器,在其中保证代码可以正常执行后关闭资源并将其 “输出” 下载。然后再创建一个 Python 脚本执行模式的 GPU 算力容器上传下载的代码,执行脚本。

容器的终止

容器在执行的任何过程都可以被终止,但是 注意 容器终止可能会导致部分输出结果没有同步成功,请在容器的「输出」标签页确认其当前数据的完整性后再终止容器。

容器的删除

容器在执行完毕之后会自动释放所占有的算力资源,然而通常来说,容器执行完毕后都会有一些输出结果保存下来以备他用。输出会占用用户的存储资源。如果认为整个「容器」的数据都不再需要了,可以在「容器」的「设置」选项卡中删除整个容器,容器删除后将会释放整个容器所占有的用户存储资源。

注意 这项操作非常危险,可能会导致重要数据无法恢复,请谨慎行事。