2017-07-28 72 views
1

我知道使用TensorFlow可以手動控制我們聲明變量的位置(例如:GPU上的神經網絡的一半以及其他GPU上的剩餘部分)。TensorFlow的自動設備放置是否處理多GPU情況?

儘管可以肯定的是,我們可以將多個GPU 手動變量,它們可以被放置自動這些多GPU,如使用自動變量放置? TensorFlow的文檔似乎從未明確提及自動設備放置是否處理多GPU情況。

例如,假設我用Keras與TensorFlow後端建立模型。如果模型不適合第一顆GPU,因爲它太大了,TensorFlow會自動使用第二個GPU(可能還有更多的GPU)來聲明神經網絡的變量嗎?

謝謝。

+2

不,TensorFlow會嘗試運行gpu上的所有內容:0如果存在的話 –

+0

非常感謝。你可以回答這個問題,我會接受它作爲最好的答案。如果你有頭腦中的例子,我想要了解更多關於「除了整數值ops」的細節。 –

+0

我也有興趣瞭解使用多個GPU的潛在性能缺陷。我應該期望僅僅因爲神經網絡的這種分裂而導致性能下降很多嗎?對我來說,似乎不是,我認爲我不確定,因爲它仍然需要在正向傳球過程中傳輸一個張量的輸出,並且在CNN的情況下在訓練期間再次做到這一點。 –

回答

0

沒有,樓盤的official doc

如果系統中有一個以上的GPU,具有最低ID的GPU將被默認選中。如果你想在不同的GPU上運行,你將需要明確指定優先級:

# Creates a graph. 
with tf.device('/gpu:2'): 
    a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a') 
    b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b') 
    c = tf.matmul(a, b) 
# Creates a session with log_device_placement set to True. 
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True)) 
# Runs the op. 
print(sess.run(c)) 
+0

我已經讀過。你的摘錄上面的標題是「在多GPU系統上使用單個GPU」,這讓我誤以爲這不是在談論默認行爲時討論自動放置。我希望默認行爲是不同的......呃,不是。謝謝。 –

0

No, you are responsible for device placement:

如果系統中有一個以上的GPU,具有最低的GPU ID將被默認選中。

我認爲這樣做是因爲將數據從GPU移動到另一個可能代價高昂,系統並不知道在何種情況下移動數據是合理的。