2016-11-20 58 views
3

作爲tensorflow紙狀態,Tensorflow的跨裝置的通信是通過將‘接收節點’和‘發送節點’到設備來實現的。Tensorflow跨設備通信

從我的理解,該設備(請只考慮CPU的設備都參與)負責執行操作的計算。但是,數據(例如:從操作產生的張量,可變緩衝區)駐留在內存中。我不知道如何實現從一個設備到另一個設備的數據傳輸物理。我猜數據傳輸是通過共享內存來實現的。是對的嗎?

我將理解任何解釋/對應關於所述數據傳輸是如何實現的代碼。 PS:TensorFlow paper link,圖4顯示了跨設備通信機制。

回答

5

在TensorFlow,跨裝置的通信是使用Rendezvous接口,它有多種不同的實施方式中,根據部署來實現的。該接口上的註釋說明的總體思路:

// A Rendezvous is an abstraction for passing a Tensor 
// from a producer to a consumer, where the consumer may safely 
// request the Tensor before or after it has been produced. A 
// producer never blocks when using a Rendezvous. A consumer has the 
// choice of making a blocking call or providing a callback: in either 
// case, the consumer receives the Tensor as soon as it is available. 

正如你在你的問題指出,TensorFlow代表在使用被添加到時自動圖表跨設備劃分圖SendRecv OPS數據流圖形通信。對於具有源和在不同的設備的目的地的每個邊緣,所述圖形分割器插入一個對共享相同「會合鍵」 SendRecv OPS(自動生成的字符串名稱被用作在會合索引中的密鑰待傳遞張量)。 implementation of the Send op很簡單:它調用Rendezvous::Send(),傳入它的集合點和單輸入張量,然後立即返回而沒有阻塞。 implementation of the Recv op稍微複雜一些:它註冊了一個回調函數,當具有給定密鑰的張量變得可用時。 callback負責「產生」Recv op的輸出,並解除後續的計算。

Rendezvous實現執行傳送數據的實際工作:

  • IntraProcessRendezvous處理在同一進程中的數據的設備之間的傳輸。在傳輸在同一進程中的兩個CPU設備之間(不太可能)的事件中,傳輸可以通過simple Tensor assignment來實現。否則,TensorFlow kicks off用於在CPU和GPU設備之間傳輸數據的特定於設備的DMA例程。

  • BaseRemoteRendezvous類及其子類在發送方和接收方可以處於不同進程的情況下處理跨設備通信。這個類的主要實現是RpcRemoteRendezvous,其中uses gRPC來處理遠程傳輸。

+0

非常感謝您! @mrry – kz28

+0

@mrry非常具體的指令 –