文档首页 > > AI工程师用户指南> 使用自定义镜像> 用于训练模型> 示例:使用自定义镜像创建训练作业

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

分享
更新时间: 2020/07/14 GMT+08:00

本示例所需的文件存储在Github目录中。本示例使用MNIST训练数据,数据集可从MNIST官网下载。示例中的分布式和单机的区别主要在于脚本和运行命令不一样,使用的镜像都为同一个。

  • “mnist_softmax.py”为单机脚本。
  • “mnist_replica_kill.py”为分布式脚本。

制作并上传自定义镜像

本示例使用Dockerfile构建自定义镜像说明

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

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

    以 linux x86_64架构的操作系统为例,获取待安装的Docker 19.03.2版本

    tar -xzvf docker-19.03.2.tgz
    cp docker/* /usr/bin/

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

  2. 下载自定义镜像基础镜像。

    如下命令,以下载用于训练作业自定义镜像的基础镜像为例。

    docker pull swr.<region>.myhuaweicloud.com/<image org>/custom-<processor type>-[<cuda version>]-base:<image tag>

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

  3. 编写自定义镜像的 Dockerfile。

    训练作业的自定义镜像需要以基础镜像为基础。

    1. 基础镜像中的PyPi Mirror,默认配置为华为云软件开发云的PyPi mirror。执行如下命令,查看PyPi Mirror。如果您想用其他PyPi Mirror,可将命令中的index-url参数修改为您需要的PyPi mirror。
      cat /root/.pip/pip.conf
      [global] 
      index-url = http://repo.myhuaweicloud.com/repository/pypi/simple 
      format = columns 
      [install] 
      trusted-host=repo.myhuaweicloud.com
    2. 基础镜像中ubuntu 16.04的apt source,为系统默认source。

      建议执行如下命令修改apt source为华为云软件开发云的apt source。如果您想用其他apt source,可将命令中的http://repo.myhuaweicloud.com修改为您需要的source。

      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
    3. 使用自带的Python版本或安装指定的Python版本。

      由于基础镜像中的Python是ubuntu 16.04系统自带,您可以根据您使用的操作系统安装指定版本的Python。

    4. 执行如下命令,构建Tensorflow 1.13.2自定义镜像的Dockerfile文件。文件命名为“tf-1.13.2.dockerfile”
      FROM swr.cn-north-4.myhuaweicloud.com/modelarts-job-dev-image/custom-cpu-base:1.3
      RUN mkdir -p /tmp/install && cd /tmp/install && \
      curl -o Miniconda3-latest-Linux-x86_64.sh -k https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh && \
      bash Miniconda3-latest-Linux-x86_64.sh -b && \
      /root/miniconda3/bin/pip install tensorflow==1.13.2
  4. 构建自定义镜像

    以步骤3.d中构建的Dockerfile为例,执行如下命令构建自定义镜像。

    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登录指令。然后在Linux主机上,使用如下命令,推送镜像至SWR。

    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. 下载基础镜像,安装 Tensorflow 深度学习库,然后把镜像push到SWR。也可以采用Dockerfile在SWR上构建。
  2. “mnist_softmax.py”和训练数据上传至OBS。将脚本和数据都放在代码目录下,以便直接下载到容器中。

    启动脚本存储路径为:obs://deep-learning/new/mnist/mnist_softmax.py

    训练数据存储路径为:obs://deep-learning/new/mnist/minist_data

  3. 创建自定义镜像训练作业,“镜像地址”“代码目录”“运行命令”参考如下信息填写,“数据存储位置”“训练输出位置”请根据实际情况填写。
    • “镜像地址”:填写刚上传镜像的“SWR_URL”
    • “代码目录”:选择存储在OBS的训练代码。例如“obs://deep-learning/new/mnist”为代码根目录,“obs://deep-learning/new/mnist/mnist_softmax.py”为代码启动文件。

      在训练作业实际启动之前,ModelArts自动将“代码目录”下的所有内容递归下载到本地路径,存放代码的本地路径为 “${ModelArts 训练固定的工作目录}/${代码根目录的最后一级名称}”。当前“${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”为数据的位置。由于已经把数据放在代码目录中,容器已经下载了代码目录,所以直接使用本地的。

  4. 自定义镜像审核成功后,后台会直接执行自定义镜像训练作业。程序执行成功后,日志信息如下所示。
    图1 运行日志信息

分布式训练示例

  1. 分布式例子和单机的例子不同的点在于需要修改“python”文件。对“DLS_TASK_INDEX”“DLS_TASK_NUMBER”进行处理,来适配脚本所需参数,决定当前容器的功能。当前脚本的功能是将前两个容器作为“ps”,后两个容器作为“worker”
    图2 脚本修改

    其中,运行命令为:

    bash /home/work/run_train.sh python /home/work/user-job-dir/mnist/mnist_replica_kill.py --data_url /home/work/user-job-dir/mnist/mnist_data

  2. 计算节点个数选择多个(即至少大于1),其他设置与单机一样。执行结果如下所示。
    图3 运行结果日志
分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

智能客服提问云社区提问