裸机使用容器镜像训练迁移到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交互工作的整个训练流程如下:
- 训练数据、代码、模型下载。(本地使用硬盘挂载或者docker cp,在ModelArts上使用OBSutil)
- 启动脚本(用法无切换,一般就是到达执行目录,然后python xxx.py)
- 训练结果、日志、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
本篇博客只是简单说了已有镜像的改造方法,实际使用中往往不可能构建一次就成功,所以很多工作量都是在镜像的构建和调试。
针对自定义镜像的构建和调试步骤,后续还会专门出博客介绍。
- 点赞
- 收藏
- 关注作者
评论(0)