每個gpu上的模型相同,喂以相同模型不同的訓練樣本。
資料並行根據引數更新方式的不同又可以分為同步資料並行和非同步資料並行。
每個gpu根據loss計算各自的gradient,彙總所有gpu的gradient,求平均梯度,根據平均梯度更新模型引數,具體過程見下圖。所以同步資料並行的速度取決於最慢的gpu,當各個gpu的效能相差不大時適用。在同步更新的時候, 每次梯度更新,要等所有分發出去的資料計算完成後,返回回來結果之後,把梯度累加算了均值之後,再更新引數。這樣的好處是loss的下降比較穩定, 但是這個的壞處也很明顯, 處理的速度取決於最慢的那個分片計算的時間。
在非同步更新的時候, 所有的計算節點,各自算自己的, 更新引數也是自己更新自己計算的結果, 這樣的優點就是計算速度快,計算資源能得到充分利用,但是缺點是loss的下降不穩定,抖動大。
在資料量小的情況下,各個節點的計算能力比較均衡的情況下,推薦使用同步模式。資料量很大,各個機器的計算效能摻差不齊的情況下,
推薦使用非同步的方式。
之前提到了我們在定義多層變數時,乙個乙個定義權重和偏置,對於大型網路是不太現實和讓人崩潰的。所有就有了tf.variable_scope 和 tf.name_scope()。
tf.name_scope()主要是與variable配合,方便引數命名管理
tf.variable_scope與tf.get_variable配合使用,實現變數共享
tf.name_scope命名空間是便於管理變數,不同命名空間下的用variable定義的變數名允許相同。可以理解為名字相同,但是姓(命名空間)不同,指向的也是不同變數。而tf.get_variable()定義的變數不受命名空間的限制(主要是用於共享變數,避免大型網路結構中定義過多的模型引數。我們主要看tf.variable_scope()的使用。
TensorFlow使用平行計算
在學習如何使用tensorflow平行計算之前,我們必須要明白一些相關概念。這將有助於我們更好的學習和理解tensorflow的並行運算機制。這句話的意思是一台計算機有多個物理cpu 物理cpu數 主機板上實際插入的cpu數量,可以數不重複的 physical id 有幾個 physical id ...
python平行計算 python平行計算
0.基礎並行 發 multiprocessing threading 1.concurrent 2.併發 asynico 3.ipython下的平行計算 使用ipyparallel庫的ipython提供了前所未有的能力,將科學python的探索能力與幾乎即時訪問多個計算核心相結合。系統可以直觀地與本...
平行計算模型
平行計算模型通常指從並行演算法 的設計和分析出發,將各種並行計算機 至少某一類並行計算機 的基本特徵抽象出來,形成乙個抽象的計算模型。從更廣的意義上說,平行計算模型為平行計算提供了硬體和軟體介面 在該介面的約定下,並行系統硬體設計者和軟體設計 者可以開發對並行性 的支援機制,從而提高系統的效能。有幾...