更新时间:2023-09-06 GMT+08:00

示例:使用自定义镜像创建训练作业

本章节仅适用于指导在旧版训练模块中使用自定义镜像功能(旧版训练模块仅对部分存量用户可见,新用户不可见)。新版训练中使用自定义镜像请见训练管理中使用自定义镜像介绍

本示例所需的文件存储在Github仓库中。本示例使用MNIST数据集,从MNIST官网下载。

  • “mnist_softmax.py”为单机脚本。

制作并上传自定义镜像

本示例使用Dockerfile文件定制自定义镜像。

以linux x86_x64架构的主机为例,您可以购买相同规格的ECS或者应用本地已有的主机进行自定义镜像的制作。

  1. 安装Docker,可参考Docker官方文档

    以linux x86_64架构的操作系统为例,获取Docker安装包。使用以下指令安装Docker:

    curl -fsSL get.docker.com -o get-docker.sh
    sh get-docker.sh

    如果docker images命令可以执行成功,表示Docker已安装,该步骤可跳过。

  2. 获取自定义镜像的基础镜像。

    训练作业的自定义镜像需要以基础镜像为基础。基础镜像名称格式参见基础镜像包概述。使用以下指令获取自定义镜像的基础镜像:

    docker pull swr.<region>.myhuaweicloud.com/<image org>/<image name>

    另外,您还可以使用docker images命令可查看本地的镜像列表。

  3. 编写构建自定义镜像的Dockerfile文件。

    本示例构建tensorflow 1.13.2版本镜像。文件命名为“tf-1.13.2.dockerfile”。执行vi tf-1.13.2.dockerfile命令,进入文件中。

    Dockerfile文件编写的更多指导内容参见官方指导说明

    FROM swr.cn-north-4.myhuaweicloud.com/modelarts-job-dev-image/custom-base-cuda10.0-cp36-ubuntu18.04-x86:1.1
    # 配置华为云的源,安装tensorflow
    RUN cp -a /etc/apt/sources.list /etc/apt/sources.list.bak && \
    sed -i "s@http://.*archive.ubuntu.com@http://repo.myhuaweicloud.com@g"  /etc/apt/sources.list && \
    sed -i "s@http://.*security.ubuntu.com@http://repo.myhuaweicloud.com@g"  /etc/apt/sources.list && \
    pip install  --trusted-host https://repo.huaweicloud.com -i https://repo.huaweicloud.com/repository/pypi/simple  tensorflow==1.13.2
    # 配置环境变量
    ENV PATH=/root/miniconda3/bin/:$PATH
  4. 构建自定义镜像。

    下列例子中镜像所在的区域为cn-north-4,镜像所属组织为deep-learning-diy,在“tf-1.13.2.dockerfile”文件所在的目录执行:

    1
    docker build -f tf-1.13.2.dockerfile . -t swr.cn-north-4.myhuaweicloud.com/deep-learning-diy/tf-1.13.2:latest
    
  5. 推送镜像至SWR,上传镜像的详细操作可参考SWR用户指南

    前提条件是已经创建组织获取SWR登录指令。下列例子中镜像所在的区域为cn-north-4,镜像所属组织为deep-learning-diy,执行以下命令推送镜像至SWR。

    1
    docker push swr.cn-north-4.myhuaweicloud.com/deep-learning-diy/tf-1.13.2:latest
    

    “swr.cn-north-4.myhuaweicloud.com/deep-learning-diy/tf-1.13.2:latest”即为此自定义镜像的“SWR_URL”

单机训练

  1. 将训练代码“mnist_softmax.py”和训练数据上传至OBS。将代码和数据都放在同一代码根目录下,以便直接下载到容器中。

    以根目录“obs://deep-learning/new/mnist/”为例:

    训练代码文件为“obs://deep-learning/new/mnist/mnist_softmax.py”

    数据存储路径为“obs://deep-learning/new/mnist/mnist_data”

  2. 创建自定义镜像训练作业,“镜像地址”“代码目录”“运行命令”参考如下信息填写,“数据存储位置”“训练输出位置”请根据实际情况填写。
    • “镜像地址”:填写已上传镜像的“SWR_URL”
    • “代码目录”:训练代码存储的OBS路径,即为步骤1中的代码根目录。

      在训练作业实际启动之前,ModelArts自动将“代码目录”下的所有内容递归下载到容器本地路径。下载后的容器本地路径为“/home/work/user-job-dir/${代码根目录的最后一级名称}/”。例如“代码目录”选择“obs://deep-learning/new/mnist”时,下载后的本地路径为“/home/work/user-job-dir/mnist/”,代码启动文件为“/home/work/user-job-dir/mnist/mnist_softmax.py”

    • “运行命令”bash /home/work/run_train.sh python /home/work/user-job-dir/mnist/mnist_softmax.py --data_url /home/work/user-job-dir/mnist/mnist_data

      其中,“/home/work/user-job-dir/mnist/mnist_softmax.py”为代码启动文件,“--data_url /home/work/user-job-dir/mnist/mnist_data”为数据存储路径。

  3. 训练作业创建完成后,后台完成代码目录下载、自定义镜像审核以及自定义镜像的训练作业。训练作业一般需要运行一段时间,根据您选择的数据量和资源不同,训练时间将耗时几分钟到几十分钟不等。程序执行成功后,日志信息如下所示。
    图1 运行日志信息