提升ModelArts与OBS交互性能
【摘要】 提升ModelArts与OBS交互性能
当程序代码中发现与华为云OBS互联出现功能问题或者是出现性能低问题时,可以借助MoXing的接口去规避。
以一个客户案例来说明,用户代码大致如下:
import tensorflow as tf ... summary_writer = tf.summary.FileWriter('obs://bucket/train_url/') with tf.train.MonitoredTrainingSession() as sess: for step in range(10000): if step % log_step == 0: _, summary = sess.run([train_op, summary_op]) summary_writer.add_summary(summary, step) else: sess.run(train_op)
上述代码的作用是每隔log_step,追加一些summary到OBS。用户的summary非常大,可能会到4GB以上,这里使用了TensorFlow直接连接OBS,并且不停的往OBS上的一个大文件追加写,性能会越来越慢。
解决思路:将一个summary大文件分片成多个小文件,每次追加的时候保证原始文件不会太大,并且直接保存到本地,定期利用mox接口上传到OBS
解决思路:将一个summary大文件分片成多个小文件,每次追加的时候保证原始文件不会太大,并且直接保存到本地,定期利用mox接口上传到OBS
参考代码:
import tensorflow as tf import moxing as mox ... # 先保存到本地summary_writer = tf.summary.FileWriter('/cache/local_summary/') with tf.train.MonitoredTrainingSession() as sess: for step in range(10000): if step % log_step == 0: _, summary = sess.run([train_op, summary_op]) summary_writer.add_summary(summary, step) else: sess.run(train_op) # 每隔1000个step,把summary强制写到磁盘,并且重新创建一个新的writer,强制移动到下一个文件分片 # 在此场景中,一共10000步,假设log_step为100 # 相当于每隔100步保存一次summary到本地,每隔1000步将summary写回磁盘,然后上传到OBS # 并且新建一个文件继续记录接下来的summary。也就是说最后会有10个events文件来保存summary if step % 1000 == 0: summary_writer.flush() summary_writer.close() mox.file.sync_copy('/cache/local_summary/', 'obs://bucket/train_url/') summary_writer = tf.summary.FileWriter('/cache/local_summary/') # 最后上传遗留的所有文件 summary_writer.flush() summary_writer.close() mox.file.sync_copy('/cache/local_summary/', 'obs://bucket/train_url/')
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)