2017-04-10 47 views
0

我已經能夠在分佈式谷歌雲ML中運行代碼,但是當我運行它時,數據在羣集中的每臺計算機上得到複製,但我想在每臺計算機上分發數據。在谷歌雲上的工作人員之間分配數據ML

如何在雲ML上的集羣內的每臺計算機上分發數據? 請幫忙!!!!

+0

你在做異步分佈式培訓嗎?有關您想要解決的任務的更多信息會有所幫助。 – rhaertel80

回答

0

通常,在分佈式異步培訓中,不要讓每個工作程序列在數據的非重疊分區上,而是希望每個工作人員都處理所有數據。

在異步培訓中,參數不會等待接收來自所有工作人員的更新 - 它會在更新到來時處理更新。所以如果一個工作者比其他工作者慢,那麼它會比其他工作者貢獻更少的更新。如果對數據進行分區以使每個工作人員只能訪問其自己的數據,這意味着您有效地降低了屬於較慢工作人員的示例的權重,因爲這些示例對參數的更新較少。這會對您的模型的質量和普遍性產生不利影響。

如果您使用synchronous training並強制更新以等待所有工作人員,則可以安全地在工作人員之間對數據進行分區,但是,由於每個步驟都必須等待來自所有工作人員的更新,因此培訓將與最慢的工作人員一樣慢。如果您不強制所有工作人員的更新,那麼情況可能實際上比異步培訓更差,因爲緩慢工作人員的示例可能會被完全忽略。

由於它更健壯,異步培訓更爲常見。

幸運的是,讓所有員工檢查所有數據通常是一件明智的事情。只要您隨機分配數據(herehere),那麼在任何給定時間(跨所有工作人員)檢查的示例是一組batch_size * num_workers示例,隨機抽樣(幾乎)均勻,並從整個數據集中進行替換。

在異步培訓中閱讀數據的規範方法在實踐中經常運行得很好,特別是在分佈式培訓中。但是,如果您擁有如此多的數據,只能進行幾個培訓時期,那麼您的模型可能會因看到每個示例的次數相同而受益(取樣不需要更換)。這是更復雜和不太健壯,但它可以做到;這是一個單獨的帖子。