2016-09-30 73 views
1

的Tensorflow培训,特别是复验模型的实现使用分布式Tensorflow在以下纸张https://github.com/Russell91/TensorBox给出。分布式我分布式Tensorflow工作Reinpect人力检测模型

我们使用之间,图的异步执行的分布式tensorflow设置,但结果是非常令人惊讶的。在进行基准测试时,我们发现分布式训练的培训时间比单次机器训练多两倍以上。任何有关可能发生的事情以及还有什么可能会被尝试的线索都会得到真正的赞赏。谢谢

注意:这里有一个更正,我们正在使用图间实现而不是图中实现。对不起,我错

回答

2

一般情况下,我不会感到惊讶,如果从模型到多机实现的单进程实现移动将导致经济放缓。从你的问题,不是很明显可能什么的,但这里有一些一般性的指针:

  • 如果模型有大量的相对于计算量参数(例如,如果它主要是进行大矩阵乘法而不是卷积),那么你可能会发现网络是瓶颈。您的网络连接的带宽是多少?

  • 是否有大量副本的过程之间,可能是由于不幸的器件布局?尝试收集和可视化时间线,以查看运行模型时发生的情况。

  • 你提到你“中,图形复制”,这是not currently recommended可扩展性使用。图内复制可能会在单个主服务器上创建瓶颈,尤其是当您拥有包含多个副本的大型模型图时。

  • 是否使用跨复制品或多个输入管线的单个输入管道?使用单个输入管道会在运行输入管道的进程中产生瓶颈。 (但是,对于图内复制,运行多个输入管道也可能会产生瓶颈,因为有一个Python进程会使用大量线程来驱动I/O。)

  • 或者您是否使用提要机制?当需要跨越处理边界时,数据传输速度要慢得多,就像在复制设置中一样。使用图间复制至少可以消除单个客户端进程的瓶颈,但为了获得更好的性能,您应该使用输入管道。 (如Yaroslav observed,饲养,取大值张,因为数据是通过RPC传输是在分布式版本慢。在一个单一的过程中,这些将使用一个简单的memcpy()代替。)

  • 多少流程您使用的?缩放曲线是什么样的?当切换到使用参数服务器和单个工作副本时(与单个组合进程相比),是否立即减速?当您添加更多副本时,性能会变得更好还是更糟?

1

最近我一直在寻找类似的事情,我注意到,从GRPC将数据移动到Python运行速度慢于预期。特别地考虑下面的模式

add_op = params.assign_add(update) 
... 
sess.run(add_op) 

如果add_op位于一个不同的过程,然后sess.run补充说在50-100 MB速率发生/第二解码步骤。

这里有一个benchmarkrelevant discussion