首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有一种异步编写TensorFlow检查点的方法?

有没有一种异步编写TensorFlow检查点的方法?
EN

Stack Overflow用户
提问于 2016-12-17 04:54:20
回答 1查看 696关注 0票数 1

目前,我在训练期间创建检查点,如下所示(伪代码):

代码语言:javascript
复制
while(training):
    model.train()

    if it_is_time_for_validation():
        metrics = model.validate()

        if metrics.are_good():
             saver = tf.train.Saver()
             res = saver.save(sess=session, save_path=checkpoint_file_path)

Saver.save方法阻塞I/O,阻止运行下一次迭代。我的模型的重量大小是几百兆字节,写这些东西需要一段时间。

根据我的计算,根据检查点频率,总体上,GPU花费5-10%的时间等待检查点完成,而不是进行有用的计算。(5-10%相当于一天的计算时间)

有没有办法异步执行检查点,以减少计算时间的浪费?

实现草图:首先,我们可以将所有必需的东西从设备内存复制到主机,并在单独的线程上执行磁盘I/O。Saver.save将在memcopy之后返回,而无需等待磁盘操作,因为现在训练设备副本而不会搞乱检查点是安全的。如果前一次迭代中有I/O挂起,Saver.save仍会在重新进入时阻塞。

我认为它目前还没有实现,所以我也对可能的变通方法感兴趣。这个想法是否足够好,可以作为GitHub上的一个特性请求?

EN

回答 1

Stack Overflow用户

发布于 2016-12-17 06:02:00

您可以通过在单独的线程中运行saver.save()来异步编写检查点。(内部) SVTimerCheckpointThread是一个在训练后台定期运行saver.save()的代码示例。请注意,tf.train.Supervisor是一个实用程序类,可以帮助管理这样的后台线程(也用于编写TensorBoard摘要日志等),因此您可能希望使用它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41192282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档