训练自定义镜像迁移的一些其他优化操作

举报
yangzilong 发表于 2021/09/01 11:41:34 2021/09/01
【摘要】 之前的博客介绍了如何做自定义镜像的迁移,并着重介绍通过obsutil+run.sh的迁移方式。 本文针对后续遇到的场景,进行了一些小的补全。

之前的博客介绍了如何做自定义镜像的迁移,最推荐的是通过obsutil+run.sh的方式来做迁移。

但是,在实际使用中,发现一些问题,本文针对相应问题提供一些补全策略:

1.部分训练任务是不会正常停止的,需要每几轮epoch保存一下checkpoint。如何在保存完checkpoint后快速同步到OBS?

建议通过增加python保存逻辑的方式来做,直接把下述代码增加到保存checkpoint的代码之后即可:

import os

...

# file_path is the path of checkpoint or params you have just saved
cmd = "/opt/utils/obsutil cp -r -f " + file_path + " " + os.getenv("DLS_TRAIN_URL").replace("s3", "obs", 1)
# for debuging, print cmd exection result to stdout
print(os.popen(cmd).read())

...

2.部分任务经常需要修改超参,但是教程的run.sh是写死在镜像里的,每次都要更新镜像么?

建议1:通过shell命令每次获取并最新的run.sh并启动。

需要首先把修改后的run.sh放到一个obs目录里,针对对应目录设置公共读权限。然后使用如下代码启动任务:

cd /opt && rm -rf run.sh && wget https://${bucket_name}.${region_name}.myhuaweicloud.com/${dir_name}/run.sh && bash -x run.sh

对象策略修改按截图操作:

http下载路径的获取方式按截图:

建议2:相关参数都会体现在执行节点的env变量里,可以在python启动脚本里自主解析对应的环境变量并控制逻辑,或通过shell解析并传递给python。

python获取环境变量的命令如:

epoch_number= os.getenv("EPOCH_NUM")

此处为获取环境变量里EPOCH_NUM变量的值,并给到epoch_number变量。

shell获取环境变量并作为参数启动python脚本的命令如:

python main.py --epoch_num ${EPOCH_NUM}
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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