保存环境

更新时间:

本节将为您介绍如何将开发环境保存为镜像,新镜像的产生会占用您的持久化存储,超过免费存储额度会产生费用。

# 背景说明

场景1:当您因研发需要,在新创建的开发环境上安装了如 CLI 工具和 python3.8,但因故停止了当前开发环境,再次启动开发环境时,系统只会依据最初选择的镜像为您启动开发环境,启动后的开发环境与刚创建时的一样,没有 CLI 工具和 python3.8。
场景2:您想在训练时使用与您开发环境一样的环境来训练模型,而您的开发环境在创建后有安装其他工具并做了一些配置修改,平台中没有这样的镜像可供训练时选择。

面对如上场景,您可将当前开发环境复刻成一个新的镜像,基于新镜像提供的环境将会与您保存镜像时的环境一模一样,您可以在重启环境时使用,或用于提交离线训练。

说明:将开发环境保存为镜像仅针对研发依赖的环境即系统和工具等,不包括数据和代码等 AI 资产信息。

# 前提条件

您的账户剩余的 持久化存储 足够,剩余额度可在 工作台 > 配额和使用 > 存储 中查看。

# 操作步骤

  1. 平台 项目 页中单击项目卡片,进入如下项目详情页。
    jobenv_detail

  2. 单击右上角的 进入开发环境 按钮,进入开发环境运行窗口。

  3. 在运行窗口单击 保存环境,弹出 选择方式 框如下图所示。

    根据下表选择合适的保存镜像的方法。

    构建为标准镜像 保存为临时镜像
    原理 dockerfile 方式构建镜像。 docker commit 方式构建镜像。
    限制 基础镜像需满足镜像层数不得超过 120 层
    • 基础镜像需满足镜像层数不得超过 120 层,建议 <= 80 层;镜像大小不得超过 40G,建议 <= 20G。
    • 当前环境内的系统不能过大,如压缩后生成的镜像大于 40GB,会保存失败。
    优势 所出镜像内容精简、操作透明,可随时回退任一安装有误的工具且不会增加镜像的体积。 操作简便,单击 保存为临时镜像 即可。
    劣势 构建操作较有难度,需了解一些 dockerfile 相关的知识,并会修改 dockerfile。
    • 所出镜像较大,会影响开发环境启停速度,且不便于审计本次保存开发环境进行了哪些操作。
    • 基于同一基础镜像,保存次数不得超过 10 次。

    关于上述二者的详细信息,可参考 Docker镜像及分层结构 了解。

# 保存为临时镜像

单击 选择方式 框中的 保存为临时镜像 按钮,等待镜像保存完成即可。

新保存的临时镜像将替换当前镜像作为开发环境的工作镜像,且不会覆盖前一次保存的临时镜像,它们的命名规则为 项目名-YYYYMMDDhhmmss,您可以在 镜像 页设置 来源我的,找到您保存的临时镜像。

临时镜像可用于您自己的任何业务,如初始化开发环境、提交离线训练,但不能被共享或公开给其他人使用。

# 构建为标准镜像

  1. 单击 构建为标准镜像,可进入 镜像制作 页。

  2. 制作镜像 页配置镜像任务。

    • 镜像名称:可自定义。

    • 基础镜像:系统根据您当前开发环境选择的镜像为您自动填充,您无需填写。

    • 上传文件:Dockerfile 中如需用到文件,可通过此处上传。默认上传到平台中与 dockerfile 同级的目录下,上传后需在 dockerfile 中增加如下指令拷贝文件到待构建的操作系统中。

      COPY <file> <path-in-os>
      
      • <file>:上传的文件,例如上传文件为 requirements.txt。
      • <path-in-os>:待构建的操作系统中的路径,任何存在的路径即可,例如拷贝到 /tmp/ 下。

      按上述举例,则完整的指令应为:

      COPY requirements.txt /tmp/
      

      拷贝完成,才可在 dockerfile 中使用该文件,如:

      RUN pip install -r /tmp/requirements.txt
      
    • 镜像描述:可备注该镜像的使用场景等。

    • Dockerfile

      • pip 换源:一键生成换源指令,将官方镜像源换成趋动源,生成的指令建议放在首行。

        在趋动云平台使用趋动源拉取包,其拉取速度优于其他国内镜像源。

      • 智能生成:单击顶部 智能生成 按钮,系统会根据右侧 已安装列表 中相对基础镜像增量的部分自动生成 dockerfile。
        智能生成的 Dockerfile 仅为提供便利,根据 编写dockerfile 检查和修改智能生成的 dockerfile,同时需关注如下问题:

        • 目前仅支持智能生成 pip 和 apt 方式的安装指令,无法智能生成 conda 方式安装指令,需您手动添加。
        • 已安装增量列表中包含所有已安装包,其中有些包是作为某工具的依赖包而在安装该工具时自动安装的,智能生成的指令会将其作为目标包安装,构建时这种包可能安装失败,失败后可在 dockerfile 的安装指令中删除该包,让其仍以依赖包的方式被安装。
      • 镜像层数:dockerfile 中一条指令对应一层镜像, 根据该 dockerfile 构建出来的镜像,其镜像层数为 基础镜像层数 + dockerfile中指令条数

    • 已安装列表:当前开发环境以 apt 和 pip 方式安装的所有内容;只显示增量部分 则只显示当前开发环境相对基础镜像新增了哪些安装。

  3. 单击 构建,提交镜像构建任务。
    提交后,系统返回 构建列表,您可以在该列表中查看党建任务的构建状态,及构建日志等。

# 后续操作

# 更新开发环境的镜像

如果选择了 构建为标准镜像,需重新关联镜像到该开发环境,否则项目中的开发环境与离线训练将仍使用之前的镜像。