[英]Tensorflow Multi-GPU reusing vs. duplicating?
要在多個GPU上訓練模型,可以在第一個GPU上創建一組變量,並在其他GPU上重復使用它們(通過tf.variable_scope(tf.get_variable_scope(), reuse=device_num != 0)
),如cifar10_multi_gpu_train 。
但我遇到了正式的CNN基准測試 ,在本地復制設置中,他們為每個GPU使用新的變量范圍(通過tf.variable_scope('v%s' % device_num)
)。 由於所有變量都是隨機初始化的,因此post init op用於將值從GPU:0
復制到其他變量。
然后兩個實現都在CPU上平均漸變並反向傳播結果(至少這是我認為,因為基准代碼是神秘的:)) - 可能導致相同的結果。
那么這兩種方法之間有什么區別,更重要的是什么更快?
謝謝。
不同之處在於,如果您重復使用變量,則每次迭代都會從其原始位置廣播變量開始所有GPU,而如果您要復制變量,則此廣播是不必要的,因此共享不應該更快。
不共享的一個缺點是,某個地方的錯誤或數值不穩定會導致不同的GPU以每個變量的不同值結束。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.