TensorFlow首页投稿(暂停使用,暂停投稿)Pythoner集中营

Multi-devices and multi-machines

2016-05-30  本文已影响223人  cptn3m0

Multi-devices and multi-machines

Introduction

MXNet 使用了一个两层的 parameter server 来做数据同步.

<img src=https://raw.githubusercontent.com/dmlc/web-data/master/mxnet/multi-node/ps_arch.png width=400/>

KVStore

MXNet 在 KVStore 类中实现的这个两层的 parameter server 架构. 对于给定的 batch 大小 b, 现在有三种同步策略:

============  ======== ======== ============== ============== =========
kvstore type  #devices #workers #ex per device #ex per update max delay
============  ======== ======== ============== ============== =========
`local`       *k*       1         *b / k*       *b*           *0*
`dist_sync`   *k*       *n*       *b / k*       *b × n*       *0*
`dist_async`  *k*       *n*       *b / k*       *b*           inf
============  ======== ======== ============== ============== =========

其中表示worker 机器上的设备数量的 k 可以是不同的.
而且

Multiple devices on a single machine

在单机的情况下, 多个设备之间的数据同步采用的是 local 同步模型. 这种同步模型在多个设备的时候可以得到和单个设备一样的结果 (比如说模型精度). 但是多设备和单个设备相比, 假设这里有 k 个设备. 那么每个设备每次只处理 1 / k 个样本 (当然也只用了1 / k 的设备内存). 我们经常通过增大 batch size b 来获得更好的系统性能.

当使用 local 的时候, 系统会自动地从下面列出来的三种同步类型中选择一个合适的. 它们之间的不同在于上计算梯度平均以及 weight 的更新操作在哪些设备上进行.

=======================  ================   ==============
 kvstore type            average gradient   perform update
=======================  ================   ==============
`local_update_cpu`       CPU                 CPU
`local_allreduce_cpu`    CPU                 all devices
`local_allreduce_device` a device            all devices
=======================  ================   ==============

他们(几乎) 产生同样的结果, 但是在速度上有很大的不同.

Multiple machines

dist_asyncdist_sync 模式都可以处理多机同步的情况. 但是它们在语义和性能上有很多不一样的地方.

上一篇下一篇

猜你喜欢

热点阅读