云社区 博客 博客详情

提升ModelArts与OBS交互性能

星月菩提 发表于 2020-07-21 19:11:51 2020-07-21
0
0

【摘要】 提升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/')


登录后可下载附件,请登录或者注册

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:huaweicloud.bbs@huawei.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
评论文章 //点赞 收藏 0
点赞
分享文章到微博
分享文章到朋友圈

上一篇:ModelArts云上云下代码协同开发

下一篇:查看晟腾om模型网络结构

评论 (0)


登录后可评论,请 登录注册

评论