AI开发平台MODELARTS-在ModelArts Standard使用run.sh脚本实现OBS和训练容器间的数据传输

时间:2024-11-05 09:54:24

在ModelArts Standard使用run.sh脚本实现OBS和训练容器间的数据传输

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

图1 本地与ModelArts上训练对比

ModelArts上进行训练比本地训练多了一步OBS和容器环境的数据迁移工作。

增加了和OBS交互工作的整个训练流程如下:

建议使用OBSutil作为和OBS交互的工具,如何在本机安装obsutil可以参考安装和配置OBS命令行工具

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

可以用一个run脚本把整个流程包起来。run.sh脚本的内容可以参考如下示例:

#!/bin/bash

##认证用的AK和SK硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全。
##本示例以AK和SK保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。 

##安装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=${HUAWEICLOUD_SDK_AK} -k=${HUAWEICLOUD_SDK_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=${HUAWEICLOUD_SDK_AK} -k=${HUAWEICLOUD_SDK_SK} -e=obs.cn-north-4.myhuaweicloud.com
 
COPY run.sh /opt/run.sh

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

support.huaweicloud.com/bestpractice-modelarts/modelarts_20_2055.html