bayes 命令行工具(CLI)

OpenBayes 命令行工具快速上手

最后更新于

OpenBayes 提供了一个命令行工具 bayes 方便在命令行界面直接与 OpenBayes 服务器进行交互。相比直接在 web 界面进行交互,命令行工具在「创建 Python 脚本」「上传数据集」等诸多方面会更加简单和高效。我们针对一些非常适合通过命令行操作的场景对其进行介绍。

bayes 命令行工具基本介绍

bayes 是一个独立的二进制发行包,为 windows macOS linux 等多个操作系统提供一致的命令行 UI,方便了命令行用户将本地数据、项目与 OpenBayes 的同步。

安装

安装 bayes 命令行工具 中详细的介绍了如何在不同平台下安装命令行工具。如果是通过 github 下载的命令行工具,建议将其放到 /usr/local/bin 这种预先被添加到环境变量 PATH 的目录,一方便在任意目录键入 bayes 进行访问。真对 windows 添加环境变量的操作可以参见 这里

$ bayes version

openbayes 的版本号为 v0.4.0

在命令行中键入 bayes version 后看到如上的信息说明 bayes 工具已经安装成功了,通过命令 bayes login 登录账号。

$ bayes login username

请输入 username 的密码:
username 已成功登入 openbayes

然后我们通过 bayes -h 可以查看具体能做什么操作:

$ bayes -h

OpenBayes 命令行工具

用法:
  bayes [子命令]

可用子命令:
  data        数据集相关
  gear        容器相关
  help        各个子命令的帮助信息
  login       登录
  logout      注销
  status      登录信息
  upgrade     升级命令行工具
  version     版本信息

可用选项:
      --version   查看 bayes 的版本信息
  -h, --help      查看 bayes 的帮助
  -v, --v         查看详细的错误信息

使用 "bayes [命令] --help" 获取更多有关此命令的信息

使用哲学

bayes 命令行工具意在补充 web 界面部分操作的不足,提升部分更适合在命令行界面进行的操作的体验;而不是为了让用户完全脱离 web 界面独立使用的。尤其是在数据集的创建、Python 脚本的创建相比于 web 界面的操作流程有非常大的提升。后面我们重点介绍这两个场景。

命令行工具会提供很多命令方便用户从命令行界面切换到 web 界面查看容器或者数据的内容。反过来,未来 web 端也会增加更多的命令行操作提示,方便用户在两个界面间穿梭。

用命令行工具上传数据集

这里我们介绍如何用 bayes 创建一个数据集,这里我们上传一个 tiny imagenet 数据集到 OpenBayes。

1. 首先创建一个新的数据集

$ bayes data create tiny-imagenet

数据集 tiny-imagenet (tiQXU5Z5DIy) 创建成功
打开网页 https://openbayes.com/console/aisensiy/datasets/tiQXU5Z5DIy 可查看数据集 tiny-imagenet (tiQXU5Z5DIy) 的详细信息

可以看到在数据集创建成功后会展示数据集的 url 和 id。

2. 通过命令行直接上传文件夹

在 web 页面我们需要将数据集打包成 zip 压缩包才能进行上传,而通过命令行工具并没有这个限制,命令行工具会帮我们自动打包压缩包并上传,在上传成功后会自动将压缩包删除。

$ bayes data upload tiQXU5Z5DIy -p ~/Downloads/tiny-imagenet-200

正在读取文件列表,请稍候...
共有文件 120,205 个
正在检查 .openbayesignore 文件...
已剔除 .openbayesignore 忽略列表中的文件及文件夹
正在压缩数据集...
压缩数据集完成
正在向服务器发送上传请求...
服务器已响应
正在初始化上传中...
正在上传压缩包。总共上传大小: 245.9 MiB
124.25 MiB / 245.90 MiB [============================>-----------------------------]  51 %  4.29 MiB/s

命令行上传支持断点续传,如果在上传过程中因为意外请求中断了,再次输入上传命令可以选择从上一次上传继续:

$ bayes data upload tiQXU5Z5DIy -p ~/Downloads/tiny-imagenet-200

openbayes 数据集上传
存在一个尚未完成的上传,是否需要继续? [y/N]: y
正在上传压缩包。总共上传大小: 245.9 MiB
245.90 MiB / 245.90 MiB [=================================]  100 %  8.87 MiB/s
正在移除已完成上传的压缩包
数据集 tiny-imagenet (tiQXU5Z5DIy) 上传成功
打开网页 https://openbayes.com/console/aisensiy/datasets/tiQXU5Z5DIy 可查看数据集 tiny-imagenet (tiQXU5Z5DIy) 的详细信息

通过以下命令我们可以直接从命令行跳转到 web 界面:

$ bayes data open tiQXU5Z5DIy

正在打开数据集 https://openbayes.com/console/aisensiy/datasets/tiQXU5Z5DIy
正在跳转到浏览器...

稍等服务器端数据同步可以看到数据集已经上传好了:

注意 如果你已经有一个 .zip 的压缩包了,也可以通过命令 bayes data upload tiQXU5Z5DIy -p abc.zip 直接上传 zip 包。

用命令行工具创建容器和执行

bayes 命令行下有「工作目录」的概念,它对应着 OpenBayes 容器中的「输出」目录。通过命令行工具创建容器时需要首先把一个本地目录当作「工作目录」并与 OpenBayes 的「容器」建立映射关系,具体操作如下:

  1. 切换到需要执行的代码所在的目录 cd ~/openbayes-mnist-example
  2. 初始化一个新的容器 bayes gear init mnist-example 此时当前目录已经和 mnist-example 这个容器创建了映射关系,创建的「执行」都会出现在该容器下面

其中 bayes gear init 命令可以用容器的名称也可以用容器的 id 进行初始化。

创建「Python 脚本执行」

通过命令 bayes gear run task -h 可以看到大量的样例提示如何创建一个「Python 脚本执行」。我们这里先创建一个比较简单的版本:

$ bayes gear run task --env=tensorflow-1.12 -- python main.py

正在向服务器发送上传请求...
服务器已响应
正在读取文件列表,请稍候...
共有文件 95 个
正在检查 .openbayesignore 文件...
已剔除 .openbayesignore 忽略列表中的文件及文件夹
正在压缩代码...
压缩代码完成
正在初始化上传中...
正在上传压缩包。总共上传大小: 49.31 MiB
49.31 MiB / 49.31 MiB [=================================]  100 %  4.21 MiB/s
正在移除已完成上传的压缩包
代码上传成功
正在向服务器请求创建容器...
容器创建成功
容器正在启动中...
打开网页 https://openbayes.com/console/aisensiy/containers/d1JKTyFQq1W/isqgy7idosrk 可查看容器 mnist-example 的详细信息

其中 -- 之后为执行的具体的命令,如果有 && 这样的符号,需要用引号进行保护 bayes gear run task -- 'echo 123 && python main.py'

可以看到 bayes 将当前目录的文件上传并创建了一个「python 脚本」任务,相比通过 web 界面上传 zip 包的体验是好了很多。

另外,在通过 bayes gear init 将当前目录和容器绑定后目录下会出现文件 openbayes.yaml 内部初始化内容如下:

data_binding: []
resource: cpu
env: tensorflow-1.12
command: ""
hyper_tuning:
  name: ""
  max_job_count: 0
  parallel_count: 1
  hyperparameter_metric: ""
  goal: ""
  algorithm: ""
  parameter_specs: []

其中 hyper_tuning 部分暂不介绍,但可以看到其他参数与利用 bayes gear run task 中的参数是重复的,通过在 openbayes.yaml 配置参数可以避免重复在使用 bayes gear run task 时重复输入参数。例如提供如下参数:

data_binding:
  - data: openbayes/mnist/1
    path: /input0
resource: t4
env: tensorflow-1.12
command: "python train.py -i /input0 -o ./model -e 2 -m model.h5 -l ./tf_dir"

直接在命令行输入 bayes gear run task 即可执行一个在 tensorflow-1.12 环境下的,算力资源为 t4 绑定数据集 openbayes/mnist/1/input0 入口命令为 python train.py -i /input0 -o ./model -e 2 -m model.h5 -l ./tf_dir 的任务了。

创建「Jupyter 编辑器」

与「Python 脚本」的创建类似,通过命令行创建 Jupyter 默认会把当前目录下的文件上传到容器的「输出」中。

  1. git clone https://github.com/GokuMohandas/practicalAI 下载 practicalAI 项目
  2. cd practicalAI && bayes gear init practicalAI 初始化容器
  3. bayes gear run notebook 创建 Jupyter
$ bayes gear run notebook

正在向服务器发送上传请求...
服务器已响应
正在读取文件列表,请稍候...
共有文件 99 个
正在检查 .openbayesignore 文件...
已剔除 .openbayesignore 忽略列表中的文件及文件夹
正在压缩代码...
压缩代码完成
正在初始化上传中...
正在上传压缩包。总共上传大小: 9.28 MiB
9.28 MiB / 9.28 MiB [=================================]  100 %  5.14 MiB/s
正在移除已完成上传的压缩包
代码上传成功
正在向服务器请求创建容器...
容器创建成功
容器正在启动中...
打开网页 https://openbayes.com/console/aisensiy/containers/CUEtgUJHidb/ri4nft12g18c 可查看容器 practicalAI 的详细信息

然后通过 bayes gear status 可以查看当前容器的状态:

$ bayes gear status

STATUS   ID            VERSION  SIZE  UPDATED AT
CREATED  ri4nft12g18c  1        0 B   55sec

通过 bayes gear open ri4nft12g18c 可以在命令行打开该执行的页面。