2017-07-01 39 views

回答

1

是的,它可能在张开流的开箱即用。诀窍是使用可变分区,例如tf.fixed_size_partitioner和参数服务器复制通过tf.train.replica_device_setter将变量分成多个机器。下面是它看起来像在代码:

with tf.device(tf.train.replica_device_setter(ps_tasks=3)): 
    embedding = tf.get_variable("embedding", [1000000000, 20], 
           partitioner=tf.fixed_size_partitioner(3)) 

最好的部分是,这些变化是非常局部的和训练代码的其余部分也没有任何区别。然而,在运行时,这是一个很大的差异,即embedding将被分成3个碎片,每个碎片被固定到不同的ps任务,您可以在单独的机器上运行该任务。另见this relevant question

1

word2vec的作者使用名为HogWild!的异步SGD实现了该算法。所以你可能想要寻找这个算法的张量流程实现。

HogWild!中,每个线程一次接受一个样本,并执行权重更新,而不与其他线程同步。来自不同线程的这些更新可能会相互覆盖,从而导致数据竞争条件。但作者证明,对于非常稀疏的数据集来说,它的效果很好,其中很多样本实际上是接近独立的,因为它们写入模型的大部分不同索引。

相关问题