裸机使用容器镜像训练迁移到ModelArts环境训练的方法

举报
yangzilong 发表于 2021/07/08 15:34:09 2021/07/08
【摘要】 大量的用户场景下都需要使用自定义镜像来执行训练任务,那么如何快速的把客户已有的自定义镜像迁移到ModelArts的训练任务里使用呢。 本文简单介绍了本地裸机使用容器镜像进行训练和在ModelArts环境进行训练的差异,并给出了一个简单的改造策略。

容器使用的背景知识

容器使用的教程非常多,这个文档(https://yeasy.gitbook.io/docker_practice/image/build)写的还是比较全面的,建议详细了解红框部分的内容。

另外,在我们做容器调试的时候,可能会需要将宿主机的文件拷贝到容器里。具体做法可以参考博客:https://blog.csdn.net/dongdong9223/article/details/71425077

另外,调试可能会用到其他容器命令。详细的容器命令列表,可以参考:https://yeasy.gitbook.io/docker_practice/appendix/command/docker#ke-hu-duan-ming-ling


云上镜像仓库的使用及ModelArts训练任务创建:

可用参考ModelArts的推荐实践:https://support.huaweicloud.com/bestpractice-modelarts/modelarts_10_0071.html


裸机与ModelArts上使用的区别和改造方案:

自定义容器在ModelArts上训练和本地训练的区别如下图:

实际上带来的工作量就是我们需要完成OBS和容器环境的数据迁移工作。增加了和OBS交互工作的整个训练流程如下:

  1. 训练数据、代码、模型下载。(本地使用硬盘挂载或者docker cp,在ModelArts上使用OBSutil
  2. 启动脚本(用法无切换,一般就是到达执行目录,然后python xxx.py
  3. 训练结果、日志、checkpoints上传。(本地使用硬盘挂载或者docker cp,在ModelArts上使用OBSutil

 

那么,其实我们可以用一个run脚本把这个流程包起来。run.sh脚本的内容可以参考:

#!/bin/bash 

##安装obsutil,完成AKSK配置。建议在基础镜像里做好
#mkdir -p /opt && cd /opt 
#wget https://obs-community.obs.cn-north-1.myhuaweicloud.com/obsutil/current/obsutil_linux_amd64.tar.gz
#tar -xzvf obsutil_linux_amd64.tar.gz && mv obsutil_linux_amd64_*/ utils
#alias obsutil='/opt/utils/obsutil'
#obsutil config -i=${AK} -k=${SK} -e=obs.cn-north-4.myhuaweicloud.com

##训练输入拷贝到容器镜像本地
#/cache目录的容量较大

DATA_URL=`echo ${DLS_DATA_URL} | sed /s/s3/obs/`
mkdir –p /cache/data
/opt/utils/obsutil cp –r –f ${DATA_URL} /cache/data

##执行训练任务
#涉及conda env切换时
source /xxxxx/etc/profile.d/conda.sh
conda activate xxxenv
conda info --envs
#启动训练脚本
cd xxxx
python xxx.py

##拷贝输出结果到OBS目录
TRAIN_URL=`echo ${DLS_TRAIN_URL} | sed /s/s3/obs/`
/opt/utils/obsutil cp –r –f /cache/out ${TRAIN_URL}

我们把run.sh放到/opt目录,到实际启动任务的时候,使用以下命令启动任务即可:

bash –x /opt/run.sh

run.sh放到/root目录,我们可以考虑在原镜像里增加一层,这一层就只是COPY这个run脚本。我们可以在基础镜像里顺便把obsutil安装、配置好。参考如下dockerfile

FROM $your_docker_image_tag

RUN mkdir -p /opt && cd /opt && \
         wget https://obs-community.obs.cn-north-1.myhuaweicloud.com/obsutil/current/obsutil_linux_amd64.tar.gz && \
         tar -xzvf obsutil_linux_amd64.tar.gz && mv obsutil_linux_amd64_*/ utils && \
         /opt/utils/obsutil config -i=${AK} -k=${SK} -e=obs.cn-north-4.myhuaweicloud.com

COPY run.sh /opt/run.sh

注意,ModelArts的容器会有一个/cache目录,这个目录挂载的硬盘容量最大。建议下载数据和中间数据都存到这个目录中,防止因硬盘占满导致任务失败。

 

这里我们使用了obsutil作为和OBS交互的工具,如何在本机安装obsutil可以参考之前的博客:https://bbs.huaweicloud.com/blogs/281373

 

 

本篇博客只是简单说了已有镜像的改造方法,实际使用中往往不可能构建一次就成功,所以很多工作量都是在镜像的构建和调试。

针对自定义镜像的构建和调试步骤,后续还会专门出博客介绍。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。