tensorflow 启动多个session_Tensorflow源码解析7 -- TensorFlow分布式运行时
1 概述
TensorFlow架構設計精巧,在后端運行時這一層,除了提供本地運行時外,還提供了分布式運行時。通過分布式訓練,在多臺機器上并行執行,大大提高了訓練速度。前端用戶通過session.run()啟動系統執行時,target默認為空字符串"",對應的是本地運行模式。若target以"grpc://"開頭,則對應的是分布式運行模式,target指定了要連接的TensorFlow執行引擎。
分布式運行時同樣分為client master和worker,只是三者不在同一進程內。分布式運行時同樣是圍繞計算圖Graph來進行的,流程也與本地運行時幾乎相同。client負責圖的構造,并傳遞給master。master接收后,啟動圖的剪枝和分裂,將分裂后的子圖發送給多個worker進程。worker進程負責執行計算子圖,它會先按照自己所在機器包含的設備,先按照設備進行子圖的二次分裂,然后在每個設備上進行子圖執行。所有設備執行完畢后,從計算圖的終止節點sink中取出數據。
本地運行時通過DirectSession同時管理client master和worker,而分布式運行時則不同。client對應GrpcSession,master對應MasterSession,worker對應WorkerSession。三者使用同一個句柄session_handle進行協同工作。
2 數據交換
和本地運行時類似,分布式運行時也存在跨設備的數據依賴。對于跨設備的數據邊,將其分裂,在發送方插入send節點,接收方插入recv節點。如果二者跨進程通信(比如兩臺不同的服務器),則通過GrpcRemoteRendezvous進行數據交換。如果二者是進程內通信(比如同一臺服務器的CPU0和CPU1),則通過IntraProcessRendezvous進行數據交換。上節講過的本地運行時在運行前,就創建了一個IntraProcessRendezvous對象。
3 分布式集群結構
TensorFlow為分布式運行時,設計了一個精巧的結構。共分為三級。
- ps:數據存儲,負責存儲和更新模型的參數,比如w和b。比較適合CPU
- worker:數據計算,負責train和inference時的數據計算工作。比較適合GPU
下面是一個集群配置的例子。
tf.train.ClusterSpec({"worker": ["worker0:1111", # /job:worker/task:0"worker1:2222", # /job:worker/task:1"worker2:3333" # /job:worker/task:2],"ps": ["ps0:1111", # /job:ps/task:0"ps1:2222" # /job:ps/task:1 ]}) ?這個集群cluster內包含2個job,一個ps和一個worker。ps又包含2個task,worker則包含3個task,共計5個task。
系列文章,歡迎閱讀
謝楊易:Tensorflow源碼解析1 -- 內核架構和源碼結構?zhuanlan.zhihu.com謝楊易:Tensorflow源碼解析2 -- 前后端連接的橋梁 - Session?zhuanlan.zhihu.com謝楊易:Tensorflow源碼解析3 -- TensorFlow核心對象 - Graph?zhuanlan.zhihu.com謝楊易:Tensorflow源碼解析4 -- 圖的節點 - Operation?zhuanlan.zhihu.com謝楊易:Tensorflow源碼解析5 -- 圖的邊 - Tensor?zhuanlan.zhihu.com謝楊易:Tensorflow源碼解析6 -- TensorFlow本地運行時?zhuanlan.zhihu.com謝楊易:Tensorflow源碼解析7 -- TensorFlow分布式運行時?zhuanlan.zhihu.com 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的tensorflow 启动多个session_Tensorflow源码解析7 -- TensorFlow分布式运行时的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: lua如何打印行号_LUA教程错误信息和
- 下一篇: java 计算器类图_多态计算器(封装、