提升ModelArts与OBS交互性能

举报
星月菩提 发表于 2020/07/21 19:11:51 2020/07/21
【摘要】 提升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

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

全部回复

上滑加载中

设置昵称

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

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

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