解决使用Dynamic Embedding导致的Waiting for model to be ready. Ready_for_local_init_op: Variables not ini...

由于原生tf缺少对大规模稀疏embedding的支持,为了支持大规模id特征,在项目里使用了Dynamic Embedding,但是在尝试使用分布式进行训练时却产生了如下报错:

Waiting for model to be ready. Ready_for_local_init_op: Variables not initialized: beta1_power, beta2_power, ready: None

网上有很多类似的报错但是解决方案都不适合这个场景,在浏览了很多的搜索结果后突然发现https://github.com/tensorflow/recommenders-addons/issues/38这个issue,才解决了问题。

问题原因

问题起源于dynamic embedding的embedding_lookup。
beta1_power和beta2_power是adam创建的两个参数。adam优化器在创建这两个参数时会根据var_lisr名字排序,选择一个最靠前的变量,按照这个变量的设备创建beta1_power和beta2_power。这样做的目的是让所有worker都能在相同的ps上创建这两个参数[1]。
TrainableWrapper是在embedding_lookup中创建的一个ResourceVariable,用于辅助传递embedding和计算梯度,位于worker上。如果某个TrainableWrapper正好位于var_list的第一个,那么adam就会按照TrainableWrapper的设备来创建beta1和beta2这两个参数,也就是worker,导致出错。

参考:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 推荐系统遇上深度学习系列: 推荐系统遇上深度学习(一)--FM模型理论和实践:https://www.jiansh...
    MiracleJQ阅读 13,102评论 1 11
  • transformers是huggingface提供的预训练模型库,可以轻松调用API来得到你的词向量。trans...
    晓柒NLP与药物设计阅读 8,123评论 0 10
  • 用Keras搭建神经网络的步骤: 深度学习框架Keras——像搭积木般构建神经网络,主要分为7个部分,每个部分只需...
    AI_Robot阅读 3,805评论 0 16
  • 近日,谷歌官方在 Github开放了一份神经机器翻译教程,该教程从基本概念实现开始,首先搭建了一个简单的NMT模型...
    MiracleJQ阅读 6,459评论 1 11
  • 写在前面 本文首发于公众号:NewBeeNLP update@2020.02.10 最近在看paddle相关,于是...
    kaiyuan_nlp阅读 451评论 0 0