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

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

分享
更新时间:2020/10/15 GMT+08:00

本示例所需的文件存储在Github仓库中。本示例使用MNIST数据集

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

制作并上传自定义镜像

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

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

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

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

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

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

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

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

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

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

  3. (可选)修改基础镜像用于调试。根据网络状况,如果需要修改PyPi Mirror、apt source时,可参考如下步骤,修改容器中的文件内容。

    下面操作以基础镜像swr.cn-north-4.myhuaweicloud.com/modelarts-job-dev-image/custom-cpu-base:1.3为例。

    1. 使用如下命令启动容器,并分配一个pseudo-TTY连接至容器的stdin。
      docker run -ti ${容器镜像} bash
    2. 此时上下文已处于“容器中”。
      1. 根据网络状况,配置基础镜像中的PyPi Mirror,以加速Python packages下载速度。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. 根据网络状况,配置基础镜像中的ubuntu16.04 apt source,以加速apt package下载速度。基础镜像中的apt source为ubuntu 16.04自带配置。在容器中执行如下命令可将系统默认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. 修改完毕后,使用如下命令退出pseudo-TTY。
      exit
    4. 此时上下文应处于“主机中”。使用如下命令将修改后的容器保存为镜像。
      docker commit ${container-id} swr.cn-north-4.myhuaweicloud.com/modelarts-job-dev-image/custom-cpu-base:1.3-updated

      其中${container-id}表示修改后的容器id,可以通过docker ps -a命令获取。注意到我们已经将修改后的容器命名为swr.cn-north-4.myhuaweicloud.com/modelarts-job-dev-image/custom-cpu-base:1.3-updated。如果需要使用修改后的容器镜像进行下一步的构建任务,注意要使用新的容器镜像名称。

    5. 删除已退出的容器。
      docker rm ${container-id}
  4. 编写构建Python 3.6.5 + Tensorflow 1.13.2自定义镜像的Dockerfile文件。

    文件命名为“tf-1.13.2.dockerfile”。在本Dockerfile样例中,由于重新安装了minicoda和python,因此python的依赖包需要重新安装。基础镜像中存在以下默认Python packages:

    • boto3 (1.7.29)
    • botocore (1.10.81)
    • docutils (0.14)
    • futures (3.2.0)
    • jmespath (0.9.3)
    • netifaces (0.10.7)
    • python-dateutil (2.7.5)
    • pyzmq (17.1.2)
    • s3transfer (0.1.13)
    • setuptools (20.7.0)
    • six (1.11.0)
    • wheel (0.29.0)
    本样例安装了boto3,您可以根据自己的需求在对应位置加入其他相关依赖包的安装。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-4.5.4-Linux-x86_64.sh -k https://repo.anaconda.com/miniconda/Miniconda3-4.5.4-Linux-x86_64.sh && \
    bash Miniconda3-4.5.4-Linux-x86_64.sh -b && \
    /root/miniconda3/bin/pip install tensorflow==1.13.2 && \
    pip install boto3==1.7.29 && \
    rm -rf /tmp/install
    
    ENV PATH=/root/miniconda3/bin/:$PATH
  5. 构建自定义镜像。

    下列例子中镜像所在的区域为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
    
  6. 推送镜像至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/minist_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. 完成参数填写后,单击“下一步”。完成规格确认后,单击“提交”完成训练作业的创建。
  4. 训练作业创建完成后,后台完成代码目录下载、自定义镜像审核以及自定义镜像的训练作业。训练作业一般需要运行一段时间,根据您选择的数据量和资源不同,训练时间将耗时几分钟到几十分钟不等。程序执行成功后,日志信息如下所示。
    图1 运行日志信息
分享:

    相关文档

    相关产品

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

提交成功!非常感谢您的反馈,我们会继续努力做到更好!
反馈提交失败,请稍后再试!

*必选

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

字符长度不能超过200

提交反馈 取消

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

智能客服提问云社区提问