簡體   English   中英

Tensorflow中的數據並行性。 哪一個更好?

[英]Data parallelism in Tensorflow. Which one is better?

我在Tensorflow中遇到了兩個數據並行性的例子。

1)CIFAR-10示例: https : //github.com/tensorflow/models/blob/master/tutorials/image/cifar10/cifar10_multi_gpu_train.py#L65

2)有效的Tensorflow https://github.com/vahidk/EffectiveTensorflow

正如我在[1]中了解的那樣,我們為每個GPU創建模型的新副本,並在以后收集並最小化損失,而在[2]中,我們將一個微型批次分解為不同GPU的塊。

[2]在我看來,實現起來要簡單得多。

一種方法相對於另一種方法有什么優勢?

兩種實現都在微型批處理上使用相同類型的並行化。 在這兩種情況下,每個gpu都有其自己的模型圖,但是所有id> = 1的gpu都得到一個帶有reuse=True的變量范圍,因此所有它們都將在相同的變量上工作。

第170行中[1]中的循環for i in range(num_gpus):的循環幾乎相同for i in range(num_gpus): [2]中make_parallel函數內部。 唯一的不同是,[1]將tf.train.AdamOptimizer(0.1).minimize(tf.reduce_mean(loss))拆分為首先獲取梯度(在第187行的opt.compute_gradients ),然后在並行循環之后應用它們(第205行的opt.apply_gradients )。 他們這樣做是為了在應用一個小批量之前平均所有梯度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM