【发布时间】:2016-12-17 06:01:59
【问题描述】:
目前我在训练过程中会做这样的检查点(伪代码):
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 之后返回,而无需等待磁盘操作,因为现在可以安全地训练设备副本而不会搞砸检查点。 Saver.save 仍然会在重新进入时阻塞,如果前一次迭代有 I/O 未决。
我认为它目前尚未实施,因此我也对可能的解决方法感兴趣。这个想法是否足以成为 GitHub 上的功能请求?
【问题讨论】:
标签: tensorflow