【发布时间】:2017-02-11 00:33:04
【问题描述】:
我使用tensorflow训练DNN,我的网络结构很简单,只有一个参数服务器和一个worker时,每个minibatch大约需要50ms。为了处理大量样本,我使用分布式 ASGD 训练,但是我发现增加 worker 数量并不能提高吞吐量,例如,在参数 server machine count 和 worker machine count 加倍后,40 台机器可以达到每秒 150 万个样本,集群仍然只能每秒处理 150 万个样本,甚至更糟。原因是当集群很大时,每一步都需要更长的时间。 tensorflow 是否具有良好的可扩展性,有什么加快训练速度的建议吗?
【问题讨论】:
-
我的猜测是 I/O 或更普遍的输入管道是瓶颈。你是如何读取数据的?你的队列满了吗?
-
@AllenLavoie 除了文件名队列,我没有使用任何队列。我的图表使用来自 SSD 的 tfrecord 读取器读取原始数据,然后使用我的自定义运算符解析原始数据。文件 IO 和自定义运算符不是瓶颈。有人使用非常大的集群进行训练吗?
-
输入管道的无训练吞吐量是多少?同样,您每秒可以获得多少个合成数据样本?每个工作人员的 CPU/GPU 利用率如何?
-
@AllenLavoie 正如我所说,我的神经网络很简单,CPU 不是瓶颈,利用率只有 20%。问题是如果集群很大,worker和参数服务器之间的通信成本太大(我需要将参数分片到所有参数服务器)。如果您可以在 google 内部分享一些数字,或者您正在使用不同的 rpc 实现,我不会。
-
有趣。实际型号是什么?
标签: machine-learning tensorflow