當tensorflow模型超過單張顯卡顯存的時候,應該怎麼拆分到多個GPU上運行?

1.tensorflow一次載入模型(5g),超出了單張顯卡的限制,目前的想法不在於怎麼買好顯卡(1080TI已經在路上,但也不過11G,問題規模上去很容易突破),請問怎麼拆分才能使得一個模型在多個GPU上並行計算呢,主要指子圖的拆分

舉例說明,比如25000張圖片,每次讀取十張(某些時序項目),這樣可以用你說的分批載入的數據的方法,但是,問題是如果每次讀取10張處理這個過程,就已經超過了顯存上限了,這個時候如何拆分才是我關注的重點。

我關注的地方可能和你理解的有點不一樣,舉例說明,比如25000張圖片,每次讀取十張(某些時序項目),這樣可以用你說的分批載入的數據的方法,但是,問題是如果每次讀取10張處理這個過程,就已經超過了顯存上限了,這個時候如何拆分才是我關注的重點。

tensorflow關於RNN有個語法樹的實例,其中已經用了各種你說的分批載入技術,我的電腦可以跑smallsize ,但不能跑largesize配置,我關注的問題其實是,在這種情況下,如何分拆計算,以時間換空間,使得其能夠在當前的配置下能夠跑,得到一致的結果。

這個問題可以擴展開來,各類問題都有可能因為層數或是隱藏節點數目上去導致規模超過當前顯卡限制,但規模小了可能效果不好,所以在此情況下追求的優化是分拆模型,是得它依然可以跑,雖然慢些,但是可以得到一致的結果


你這裡應該是想怎麼做模型並行,把模型中的某些層放到指定的設備比如說gpu0 gpu1 可以在定義graph的時候通過device指定,有時間看看能不能寫寫demo看看


一個參考:

https://github.com/skywaLKer518/A-Recsys/blob/master/lstm/seqModel.py

主要是with tf.device(...) 來指定不同的操作在不同的GPU上;

同時還有gradients = tf.gradients(self.losses[b], params, colocate_gradients_with_ops=True) , 這樣使得gradient的計算跟隨opt來放置到相應的GPU上。


多個GPU,多張顯卡終究是治標不治本呀,雖然現在的硬體條件發展的很快,但是限制依然很大。

建議從軟體/程序方面考慮呀,就像樓上幾位說的,tensorflow本身就提供了 方法:

可以使用 tensorflow 提供的 batch generator, 首先把數據送入隊列中 queue, 然後需要一種 tensorflow reader (tf 有好幾種reader), 然後從隊列中讀取數據, 然後使用 tf.train.batch 或者 tf.train.shuffle_batch 就可以生成你定義的 batch size 的數據了,需要用 Coordinator()和 start_queue_runner 監控隊列的狀態。

剛剛完成了一個這樣的項目,使用了kaggle 貓狗大戰的數據,25000張圖片,可以很輕鬆擴展到其他大型的數據集。歡迎交流呀~,鏈接如下:

優酷: http://i.youku.com/deeplearning101

深度學習QQ群:153032765

Youtube:

https://www.youtube.com/channel/UCVCSn4qQXTDAtGWpWAe4Plw


參考 https://www.tensorflow.org/tutorials/using_gpu

有詳細的解釋怎麼使用多個gpu,這個應該是單機多GPU的情況。在不指定訓練資源的情況下,tf貌似是會自動分配資源,不過在多GPU的情況下,沒有測試過。

這也是tensorflow官方的例子

https://github.com/tensorflow/models/blob/master/tutorials/image/cifar10/cifar10_multi_gpu_train.py

這個例子就介紹了怎麼將不同的batch分配到不同的GPU進行運算,思想還是用with tf.device(..)來分配,只不過操作更底層,大概是用一些trick先用不同的GPU算gradient,然後平均一下。

(2017/7/20改)


定義參數(weights、biases)的時候,用variable partition。

How tensorflow deals with large Variables which can not be stored in one box

每個變數會被切分成n份,分散式的存在n個ps server里。


請問樓主最終是怎麼解決這個問題的呢?我現在也遇到模型超出單卡顯存的問題了,如何將模型劃分到多卡上呢?


題主弄懂怎麼拆分了嗎,,請問一下單機多卡怎麼運行一個模型,現在是一個卡在跑,太慢了。。


我遇到過類似問題,三種方法

1 將圖片壓縮後再進行運算

2 把batch減少,比如每個batch只有2,3和圖片

3 編寫代碼,將gpu並行運算。這個方法幾句話很難說清楚,主要得參考tensorflow官網gpu 並行章節


題主應該是想要模型並行吧,其實這樣性能損失很大。只要batch size小大多數模型都不太會超過單張顯卡的內存,這個時候可以在多塊卡上同時跑一個模型來提高batch size


tensorflow支持單機多卡並行,多機並行。你這是單機單卡?


推薦閱讀:

tensorflow是如何求導的?
怎麼理解tensorflow中tf.train.shuffle_batch()函數?
tensorflow的自動求導具體是在哪部分代碼里實現的?
如何看待Theano宣布終止開發 ?
如何評價 Google 發布的 Tensor Processing Unit?

TAG:機器學習 | 圖形處理器GPU | 深度學習DeepLearning | TensorFlow |