我正在試驗Cloud ML Engine上的分佈式培訓選項,並觀察了一些特殊的結果。我基本上改變了人口普查定製估算例子,以包含稍微不同的模型,並將我的損失函數更改爲AdamOptimizer作爲唯一真正的變化。基於其他thread,我的理解是,任何分佈式培訓都應該是數據並行異步培訓,這將提示「如果您在10個工作節點中分發10,000個批次,則每個節點的工作量大約爲1,000個批次。」在我的實驗中,我有〜650k個訓練實例,並且我正在運行下列實驗,批處理量爲128個1個時期。給定650k個訓練實例和128個批處理大小,我預計會有~5.1k個步驟時代。下面是我看到的性能不同--scale-tier
的tf.estimator的分佈式培訓導致更多的培訓步驟
尚未發放
- BASIC:8步/秒,5.1K步驟,11分鐘掛鐘時間
- BASIC_GPU:24步/秒,5.1K步驟,3.5分鐘壁時間
分佈式
標準_1:14.5步/秒 - 26K步驟(26K * 128 =〜3.3M比所述訓練樣本實際上是在數據多路),29分鐘壁時間
CUSTOM - 5 complex_model_m工人,2 large_model參數服務器:27步/秒,31K的步驟(128 * 31K =〜3.9M其比650K訓練樣本實際上是在數據路以上),壁時間20分鐘
我期望的是,基於該文章的數據平行分佈式培訓將在所有工人中分配批次,所以如果我有5名工人在〜5k蝙蝠那麼每個工人就會執行〜1,000個批次。然而,我觀察到的實際行爲是,似乎更接近每5個工人進行1個時代的每一個人。在分佈式環境下進行訓練時,在一個時代中所採用的步數是訓練樣例的6倍 - 我知道每次梯度的更新都會對步驟的真實定義產生影響,但我對數據並行訓練的理解是:這只是分割批次,所以應該有相同數量的梯度更新 - 有什麼理由可以預期這種行爲?在數據並行異步培訓分佈式環境中需要更多的培訓步驟是否合理?任何人都可以解釋我正在觀察的行爲嗎?
令人難以置信的答案!這將成爲一篇很好的博客文章,因爲很難找到在線分發tensorflow文檔中解釋的信息。我猜這裏唯一值得關注的是,如果我處理的是不平衡的數據,我喜歡使用時代來確保我遍歷所有少數族裔的例子,並且似乎使用max_steps確實無法保證(儘管如果你採取足夠的步驟,那麼你應該從甚至最小的少數族裔中抽樣)。 – reese0106
我對像Adam這樣的優化者的理解是,他們通常使用「開箱即用」的學習率,因爲他們已經或多或少地進行了優化。是否有任何建議的啓發式方法來調整學習率來處理更大的有效批量?我認識到可能需要試驗/超參數調整,但希望閱讀更多內容以獲得更多信息 – reese0106
此外,您還引用了max_steps--這與此[line](https)自定義估算人口普查樣本中的train_steps相同://github.com/GoogleCloudPlatform/cloudml-samples/blob/master/census/customestimator/trainer/task.py#L201)或者這是一個完全不同的論點? – reese0106