我正在尝试使用tensorflow训练DNN模型,我的脚本有两个变量,一个是密集特征,一个是稀疏特征,每个小批量将使用embedding_lookup_sparse拉出全密集特征并拉出指定的稀疏特征,前馈只能在稀疏后开始功能准备就绪。我使用20个参数服务器运行我的脚本,增加的工作人员数量没有扩展。所以我用张量流时间轴描述了我的工作,发现20个参数服务器中的一个与其他参数服务器相比非常慢。所有可训练变量的不同部分之间没有依赖关系。我不确定是否有任何错误或任何限制问题,如tensorflow只能排队40扇出请求,任何想法调试它?提前致谢。 tensorflow timeline profiling
答案 0 :(得分:1)
听起来你可能只有2个变量,一个存储在PS0,另一个存储在PS1。其他18个参数服务器没有做任何事情。请查看变量分区(https://www.tensorflow.org/versions/master/api_docs/python/state_ops/variable_partitioners_for_sharding),即将大变量分区为小块并将它们存储在不同的参数服务器中。
答案 1 :(得分:1)
这是从每个迭代的Send/Recv
对象中记录Timeline
时序的一种黑客方式,但它在分析JSON转储数据方面效果很好(相比于在{{1上可视化它) }})。
您必须执行的步骤是:
chrome://trace
内调用SetTimelineLabel
方法的唯一地方
executor.cc
个节点。Send/Recv
内部调用SetTimelineLabel
,因为它会设置节点的文本字符串,稍后将从python脚本中解析NodeDone
和图元数据的正确方法修改模型代码(例如inception_distributed_train.py
)然后,您可以为每次迭代运行训练并检索一次JSON文件! :)
答案 2 :(得分:0)
一些评论太大的建议:
您无法在时间轴中看到数据传输,因为发送/接收的跟踪目前已关闭,此处有一些讨论 - https://github.com/tensorflow/tensorflow/issues/4809
在最新版本(每晚5天或更新)中,您可以通过执行export TF_CPP_MIN_VLOG_LEVEL=1
打开详细日志记录,并显示第二级时间戳(有关更高粒度,请参阅here)。
因此,使用vlog,您可以使用此line生成的消息来查看生成Send
操作的时间。