tensorflow學習筆記三

2021-08-08 20:56:09 字數 2022 閱讀 9315

分布式tensorflow就是多台伺服器參加乙個tensorflow圖的分布式執行,分布式我感覺就是原來在一台計算機上面執行好幾個程序這些程序互動是由os控制的,而分布式就是把這些程序放在了不同的機器上面執行,他們之間的互動是由分布式框架控制的,實際分布式的核心或者說基本點還是執行的程序。一提到分布式就會有客服端程序和服務端程序概念,tensorflow 的分布式集群由多個伺服器程序和客戶端程序組成。這就類似於在一台機器上以cpu作為ps,多個gpu作為worker一樣。tensorflow分布式程序之間的通訊是由grpc谷歌遠端程序呼叫實現的。

分布式tensorflow中,in-graph圖內複製的含義是所有operations都在同乙個graph中,也就是整個應用只有乙個客戶端來生成graph,然後把所有operation分配到集群的所有ps和worker上。這樣好處是我們可以提前執行多個ps和worker,這些程序只需要呼叫join()函式等待任務,然後編寫新的客戶端應用;between-graph圖間複製含義是乙個分布式應用會建立多個graph,一般是每起乙個worker就建立乙個graph,因為worker的**是一樣的因此建立出來的graph也是一樣的,然後通過把variable儲存到同一套ps集群來進行同步或者非同步訓練,可以把大資料partition到多台機器上同時起多個worker來讀取和訓練。同時tensorflow的同步和非同步的實現區別在於更新ps的模型引數的策略上。

對於分布式訓練神經網路,一般有模型並行和資料並行,分別對應in-graph和between-graph,前者是拆分模型,每個機器得到模型的一部分,多台機器組合起來才是整個模型。後者是拆分資料,每個機器得到的是完整的模型,但是得到的是部分的資料,執行結果通過某種組合方式進行融合。資料並行優勢更大。資料並行就需要指定各個worker上的引數同步的方法和ps上引數融合的方法。如果是採用機器之間同步提交引數的方法,面臨的問題乙個是提交的頻率大小,也就是每次minibatch之後都提交引數到ps還是幾個minibatch之後提交一次,如果提交的太過頻繁那麼通訊開銷和同步開銷導致的代價高,如果提交的太不頻繁則導致各個機器之間引數差異大而模型模型在融合引數之後變得很差,每個模型訓練出來可能都是區域性極小值但是融合之後不一定是。另乙個問題是一次處理資料量的大小,還是如何分配資料給各個機器。

tensorflow在訓練神經網路的時候,在訓練階段需要注意每次灌入的batch大小因為太大導致記憶體溢位。同時測試測試資料精確度的**也需要注意灌入的測試資料量大小因為也可能會導致溢位,如果在cpu上執行則顯示的是「python已經停止執行」。

tensorflow的程式設計模型包括乙個計算圖、namescope(給圖進行層次劃分,使得容易通過namescope和op name來定位op節點)和指定計算裝置。tensorflow的執行主要涉及到執行模式、建立session和迭代執行。執行模式當然有單機本地和分布式執行,無論哪種模式都是有client和master的,client把圖構建出來,通過session把圖發給master,master再可以分割圖成為各個cpu/gpu執行的子圖進行執行,但是子圖之間的依賴是難點。分布式模型則是需要master把圖分給各個worker,而且各個worker之間可能會有資料交換。

在每個tensorflow任務**中,需要1,建立乙個 tf.train.clusterspec t描述集群中的所有任務,即指定ps和worker伺服器的資訊。對於每乙個任務,這應該是相同的。,2,建立乙個 tf.train.server, 通過tf.train.clusterspec 的建構函式,並確定本地任務的工作名稱和任務index。伺服器分為worker和ps,worker負責執行計算,ps負責儲存引數值,而在乙個master開啟會話,此時需要指定任務的對應的機器。

分布式tensorflow的模板可以參見「白話tensorflow分布式部署和開發」,理論上可以按照該模板將單機版改為分布式版本的,程式中可以制定同步或者非同步更新引數,制定模型儲存的目錄等。因為之前一直認為分布式tensorflow程式ps管理所有的引數所以模型檔案應該是儲存到ps上面,但是實際上在建立supervisor時通過傳參指定了儲存和載入模型的路徑,這個路徑是chief worker上的,而判斷is_chief是基於該worker的task的標識是否為0來判斷的,一定會有乙個worker_task=0,模型檔案應該就儲存在其中。

tensorflow學習筆記(三)

1.是否列印裝置分配日誌 sess tf.session config tf.configproto log device placement true 2.如果指定的裝置不存在,是否允許tf自動分配裝置 sess tf.session config tf.configproto allow sof...

tensorflow學習筆記

tensorflow安裝可以直接通過命令列或者原始碼安裝,在此介紹tensorflow8命令列安裝如下 安裝tensorflow sudo pip install upgrade 另外,解除安裝tensorflow命令為 sudo pip uninstall tensorflow tensorflo...

Tensorflow學習筆記

1.如何在虛擬機器中安裝tensor flow 1 首先安裝pip pip install 2 pip install 2.學習tensorflow需要學習 python and linux 3.使用 tensorflow,你必須明白 tensorflow 1 使用圖 graph 來表示計算任務.2...