1

我正在研究分布式 Tensorflow,特别是使用以下论文https://github.com/Russell91/TensorBox中给出的分布式 Tensorflow 实现 Reinspect 模型。

我们正在使用分布式张量流设置的 Between-graph-Asynchronous 实现,但结果非常令人惊讶。在基准测试中,我们发现分布式训练所花费的训练时间几乎是单台机器训练的 2 倍多。任何有关可能发生的事情以及可以尝试的其他事情的线索将不胜感激。谢谢

注意:帖子中有一个更正,我们使用的是图间实现而不是图内实现。对错误感到抱歉

4

2 回答 2

2

一般来说,如果从模型的单进程实现迁移到多机器实现会导致速度变慢,我不会感到惊讶。从您的问题来看,可能发生的情况并不明显,但这里有一些一般性的指示:

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

  • 进程之间是否存在大量副本,可能是由于设备放置不当?尝试收集和可视化时间线,以查看运行模型时发生的情况。

  • 您提到您正在使用“图内复制”,目前不推荐用于可扩展性。图内复制可能会在单个主服务器上造成瓶颈,尤其是当您拥有具有许多副本的大型模型图时。

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

  • 或者你正在使用饲料机制?当必须跨越进程边界时,提供数据的速度要慢得多,就像在复制环境中一样。使用图间复制至少可以消除单个客户端进程的瓶颈,但为了获得更好的性能,您应该使用输入管道。(正如Yaroslav 所观察到的,在分布式版本中馈送和获取大张量值的速度较慢,因为数据是通过 RPC 传输的。在单个进程中,这些将使用简单的memcpy()代替。)

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

于 2016-10-02T02:39:51.610 回答
1

我最近在看类似的东西,我注意到将数据从 grpc 移动到 Python 运行时比预期的要慢。特别考虑以下模式

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

如果add_op位于不同的进程上,则sess.run添加以 50-100 MB/秒的速率发生的解码步骤。

这是一个基准相关讨论

于 2016-10-01T17:49:46.173 回答