跳到主要内容

Gear 数据绑定

可绑定的内容

在容器创建或者重启时,可以选择绑定数据到容器里,即使是规模巨大的数据集也可以绑定进来以文件系统的方式直接访问。可以绑定的内容包含以下几类:

  • 公开数据集
  • 个人私有的数据集
  • 公开教程的数据
  • 个人私有的执行的输出
  • 上传新的代码
  • 从外部 Git 仓库绑定数据

如下图所示,在容器的「数据绑定」界面会罗列所有可以被绑定的数据,同时支持通过名称 / ID 等字段的筛选。

绑定到工作目录

每次容器的「执行」都会提供独立的存储空间并绑定到 /output 目录,作为其工作目录,这个目录在「执行」内部也通过软连接的方式指定到了 /openbayes/home 目录。执行结束后,其中的内容会被保存下来,也称为该执行的「输出」。

绑定到工作目录实际上进行了数据的拷贝,因此容器启动的时间会依据绑定的内容的多少而有所改变,并消耗工作目录的存储空间。

绑定到只读目录

除了绑定到工作目录外,在创建容器时可以通过根目录 /input0 /input1 /input2 /input2 /input3 /input4 绑定数据,这些目录也同样在系统内部通过软连接的方式指定到了 /openbayes/inputs/input0/openbayes/inputs/input1/openbayes/inputs/input2/openbayes/inputs/input3/openbayes/inputs/input4。注意绑定到这些目录的数据是只读的,无法对其中的内容进行修改。

绑定到只读目录 不需要任何数据拷贝,其绑定速度非常快,并支持超大规模的数据绑定,非常适合直接读取数据进行模型训练(而无需编辑修改)的场景。

数据绑定的例子

执行内数据绑定的关系如下所示:

/input0 等价于 /openbayes/inputs/input0 (只读)
/input1 等价于 /openbayes/inputs/input1 (只读)
/input2 等价于 /openbayes/inputs/input2 (只读)
/input3 等价于 /openbayes/inputs/input3 (只读)
/input4 等价于 /openbayes/inputs/input4 (只读)
/output 等价于 /openbayes/home (读写)

举一个例子,如上图所示这个容器在启动的时候会绑定 4 个路径:

  1. /input0 <- username/pytorch-resnset-classifier/2 是指将个人私有数据集 pytorch-resnset-classifier 的版本 2 绑定到容器的 /input0 路径。 依据上面所提到的等价路径,相当于在容器里可以通过 /input0 或者 /openbayes/inputs/input0 访问到相应的数据。
  2. /input1 <- openbayes/mnist/1 是指将公开数据集 openbayes/mnist 的版本 1 绑定到容器的 /input1 路径。依据上面所提到的等价路径,相当于在容器的 /input1 或者 /openbayes/inputs/input1 路径可以访问到 openbayes/mnist 版本 1 的数据。
  3. /input2 <- openbayes/DOTA/1 与 2 同理,通过 /openbayes/inputs/input2 或者 /input2 可以访问到 openbayes/DOTA 数据集第二个版本的数据。
  4. /output <- username/jobs/test-abc/12/output 是指将私有容器 test-abc 第 12 次执行的「输出」绑定到将要创建的容器的 /output 目录下,和以上三个 /input 的绑定不同,绑定到 /output 路径意味着这个数据是会被拷贝到容器中可以进行修改的。容器启动后,访问 /output 或者 /openbayes/home 都可以获取到其中的数据。

绑定外部 Git 仓库

我们支持在创建执行时从指定的外部 Git 仓库绑定数据,从而避免需要将其下载到本地再进行上传等繁琐的操作。但包含以下限制:

  • Git 所在仓库必须为公开可访问,暂不支持例如 GitHub 的私有仓库、需要进行 HTTP 验证之类的非公开仓库
  • 在绑定 Git 仓库时,相应代码会直接克隆至 /output 路径,因此绑定 Git 仓库时无法再绑定额外数据至 /output