【TensorFlow源碼系列】【三】node分配算法之placement algorithm 原

一個graph中各種不同特徵的node,tf需要依據一定的規則將不同的node放在不同的device上,這點對於分佈式或者單機多卡比較重要。tf在node的分配算法上有placer和costmodel(代價模型);這裏簡單分析一下placer算法。代價模型是依據算子對設備的要求、設備的情況等,做出一個模擬的運行時間評估,力爭將node分配到不同的合適的device上,以實現node運行時的最大效率。

代價模型的代碼實現在:core/graph/costmodel.h

源碼目錄在:core/common_runtime/placer.h

該算法的實現核心在:Placer::Run接口中,現在來看一下該接口的主體流程。

Placer::Run
	// 1. 通過Edge來查找src_node和dst_node
	
	// 2. 規則一:如果該node是0輸入,單輸出,則該節點與該edge相連的dst節點在同一個設備上,比如權值W,
	IsGeneratorNode
	
	// 3. 規則二:如果該節點的計算不依賴其他數據,僅僅是元數據計算,則該節點和src_node在同一個設備上。如reshape節點
	IsMetadata

node分配算法,與應用場景有關係,與設備負載、算子對運行設備的要求等有關係。比如某個算子沒有GPU實現,則只能在CPU上運行,系統不能將該算子分配到GPU上;再例如:GPU0滿載,GPU1空載,則應該將算子分配到GPU1上去。因此算子的分配應當是個動態的過程,依據當時的運行環境、系統資源而定。這裏暫不對算子分配規則做深入分析,畢竟不同的設備、不同的運行環境,都可以有最適合自己的一套規則。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章