Tensorflow op放置策略

內容同步自個人網站: TensorFlow的op placementce

關於op在device上的placement策略,目前還沒有比較好的方法,TensorFlow目前也只是用了比較簡單的策略,細節如下:

1,用戶明確指定了設備號,就尊重用戶的意願,例如:當代碼中有with tf.device(「/job:local/task:0/gpu:0」):或者with tf.device(「/job:local/task:0/cpu:0」):

時,就把對應op放到用戶明確指定的設備上去。

2,除了source和sink的其它節點,優先分配設備等級較高的,其中GPU等級高於CPU,因此一般都會被分配到GPU:0。但是有以下三種例外:

2.1,generator節點,也就是0個輸入且只有1個輸出的節點,這樣的節點會被放置到和輸出節點相同的設備上。

2.2,元操作節點,例如reshape,該元操作節點放置在被操作的節點上。

2.3,明顯需要在CPU上執行的op。

以上就是TensorFlow的placement演算法,從以上可以看出,如果想用機器上的多個GPU卡,需要用戶明確指出,不然會默認用編號為0的GPU卡。

在第二步中,在處理2.1和2.2兩種情況時,用並查集演算法找到整個計算圖中的連通分量,節點之間的關聯關係就是根據2.1和2.2得到的。找到連通分量之後,有兩種處理方式,(1)已知連通分量中某個節點放到哪個設備,就將該連通分量中的所有節點都放置到該設備;(2)連通分量中所有節點都沒有被指定設備,則選擇設備級別最高的設備放置。


推薦閱讀:

實現屬於自己的TensorFlow(二) - 梯度計算與反向傳播
學習筆記TF041:分散式並行
TensorFlow 教程 #01 - 簡單線性模型

TAG:TensorFlow | GPU通用计算 | 分布式计算 |