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

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

代價模型的代碼實如今:core/graph/costmodel.h算法

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

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

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上去。所以算子的分配應當是個動態的過程,依據當時的運行環境、系統資源而定。這裏暫不對算子分配規則作深刻分析,畢竟不一樣的設備、不一樣的運行環境,均可以有最適合本身的一套規則。blog

相關文章
相關標籤/搜索