【问题标题】:tensorflow distributed training hybrid with multi-GPU methodology具有多 GPU 方法的 tensorflow 分布式训练混合
【发布时间】:2017-01-28 11:25:18
【问题描述】:
在使用了当前的分布式训练实现一段时间后,我认为它会将每个 GPU 视为一个单独的 worker。但是,现在一个盒子中有 2~4 个 GPU 很常见。采用单盒多 GPU 方法先计算单盒中的平均梯度,然后跨多个节点同步不是更好吗?这样可以大大减轻 I/O 流量,这一直是数据并行的瓶颈。
有人告诉我,当前的实现可以通过将所有 GPU 作为工作器放在单个盒子中,但我无法弄清楚如何将平均梯度与 SyncReplicasOptimizer 联系起来,因为 SyncReplicasOptimizer 直接将优化器作为输入。
任何人的任何想法?
【问题讨论】:
标签:
machine-learning
tensorflow
deep-learning
distributed
multi-gpu
【解决方案1】:
分布式 TensorFlow 支持在同一个工作任务中使用多个 GPU。对图像模型执行分布式训练的一种常见方法是在同一个 worker 中跨多个 GPU 执行同步训练,跨 worker 进行异步训练(尽管其他配置也是可能的)。这样你只需将模型参数拉到 Worker 一次,它们就会分布在本地 GPU 中,从而减轻网络带宽的使用。
为了进行这种训练,许多用户在单个工作器中跨 GPU 执行“图内复制”。这可以在本地 GPU 设备上使用显式循环,例如 the CIFAR-10 example model;或更高级别的库支持,例如 TF-Slim 的 model_deploy() 实用程序。