提升ModelArts与OBS交互性能

网友投稿 574 2022-05-28

当程序代码中发现与华为云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

参考代码:

提升ModelArts与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/')

OBS ModelArts

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【云知易】DMS分布式消息服务 入门 01 创建队列
下一篇:纸质文档管理 推进现代档案管理建设
相关文章