[英]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.