0

在玩了一段时间当前的分布式训练实现之后,我认为它将每个 GPU 视为一个单独的工作人员。但是,现在一个盒子中有 2~4 个 GPU 很常见。采用单盒多 GPU 方法先计算单盒中的平均梯度,然后跨多个节点同步不是更好吗?这种方式大大减轻了 I/O 流量,这一直是数据并行的瓶颈。

有人告诉我,当前的实现可以通过将所有 GPU 放在单个盒子中作为工作人员,但我无法弄清楚如何将平均梯度与 SyncReplicasOptimizer 联系起来,因为 SyncReplicasOptimizer 直接将优化器作为输入。

任何人的任何想法?

4

1 回答 1

2

分布式 TensorFlow 在同一个工作任务中支持多个 GPU。对图像模型执行分布式训练的一种常见方法是在同一个 worker 中跨多个 GPU 执行同步训练,跨 worker 进行异步训练(尽管其他配置也是可能的)。这样,您只需将模型参数拉到工作人员一次,它们就会分布在本地 GPU 之间,从而减轻网络带宽利用率。

为了进行这种训练,许多用户在单个工作人员中跨 GPU 执行“图内复制”。这可以在本地 GPU 设备上使用显式循环,就像在CIFAR-10 示例模型中一样;或更高级的库支持,例如model_deploy()TF-Slim 的实用程序。

于 2016-09-24T22:53:11.917 回答