首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在tf.keras中使用Horovod时,如何从检查点恢复?

在tf.keras中使用Horovod时,如何从检查点恢复?
EN

Stack Overflow用户
提问于 2020-05-20 01:13:45
回答 1查看 299关注 0票数 2

注意:我使用的是TF 2.1.0和tf.keras接口。我在0.18和0.19.2之间的所有Horovod版本中都遇到过以下问题。

我们是应该在从tf.keras h5检查点恢复时在所有级别上调用hvd.load_model(),还是应该只在级别0上调用它,并让BroadcastGlobalVariablesCallback回调与其他工作程序共享这些权重?方法1是否不正确/无效,因为它会搞乱训练或产生与方法2不同的结果?

我目前正在使用一些BatchNorm层训练一个基于ResNet的模型,如果我们只尝试在第一级加载模型(并在其他级上构建/编译模型),我们就会遇到停滞的张量问题(https://github.com/horovod/horovod/issues/1271)。然而,如果我们在恢复时在所有等级上调用hvd.load_model,训练开始正常恢复,但它似乎立即发散,所以我困惑于在所有等级上加载检查点模型(使用hvd.load_model)是否会以某种方式导致训练发散?但同时,由于https://github.com/horovod/horovod/issues/1271的原因,我们无法仅将其加载到秩0,从而导致批处理规范挂起在horovod中。在使用BatchNorm tf.keras层时,有没有人能够成功地仅在等级0上调用hvd.load_model?有人能在这里提供一些建议吗?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2020-07-01 11:36:48

根据这个:https://github.com/horovod/horovod/issues/120,这是解决方案:

代码语言:javascript
复制
You should also be able to specify optimizer via custom object:
model = keras.models.load_model('file.h5', custom_objects={
    'Adam': lambda **kwargs: hvd.DistributedOptimizer(keras.optimizers.Adam(**kwargs))
})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61896928

复制
相关文章

相似问题

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