训练自定义镜像迁移的一些其他优化操作
【摘要】 之前的博客介绍了如何做自定义镜像的迁移,并着重介绍通过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)