4

所以我有一個輸入,它包含一個數據集和幾個使用scikit-learn的ML算法(帶參數調整)。我已經嘗試了很多嘗試,如何儘可能有效地執行此操作,但在此刻,我仍然沒有合適的基礎結構來評估我的結果。但是,我缺乏這方面的背景知識,我需要幫助才能解決問題。在Spark集羣中如何分配任務?

基本上我想知道如何以儘可能多地利用所有可用資源的方式分配任務,以及實際上隱式實現的內容(例如Spark)和不實現的內容。

這是我的情景: enter image description here

我要培養多種不同的決策樹模型(多達所有可能的參數的組合),許多不同的隨機森林模型,等等...

在我的一種方法中,我有一個列表,它的每個元素對應一個ML算法及其參數列表。

spark.parallelize(algorithms).map(lambda algorihtm: run_experiment(dataframe, algorithm))

在這個函數run_experiment我用於相應ML算法以其參數網格創建GridSearchCV。我還設置了n_jobs=-1以嘗試實現最大並行性。

在這種情況下,在我的Spark節點上有幾個節點,它的執行看起來有點像這樣嗎?

enter image description here

或者可以有一個決策樹模型,也是一個隨機森林模型在同一節點上運行?這是我使用集羣環境的第一次體驗,所以我對如何期望工作有些困惑。

在另一方面,究竟是什麼改變了在執行方面,如果不是與parallelize第一種方法,我用的是for循環通過我的算法列表順序迭代並創建GridSearchCV使用databricks星火之間spark-sklearn整合scikit學習?它在文檔中說明的方式似乎是這樣的:

enter image description here

最後,關於第二種方法,使用相同的ML算法,而是與星火MLlib代替scikit學習,將全並行/分配需要照顧?

對不起,如果大部分這是有點幼稚,但我真的很感激任何答案或見解。我想在實際測試集羣並使用任務計劃參數進行測試之前瞭解基本知識。


我不知道這個問題是否更適合這裏或CS stackexchange。

回答

0

spark.parallelize(algorithms).map(...)

ref「的集合的元素被複制以形成可以並行操作的分佈式數據集。「這意味着你的算法將分散在你的節點中,從那裏開始,每一個算法都會執行。

如果算法和它們各自的參數是分散的,我認爲是你的方案可能是有效的

關於使用您所有的資源,非常擅長這一點,但您需要檢查工作負載是否在您的任務之間保持平衡(每項任務需要完成相同的工作量),以便獲得好的表現


如果改用parallelize而不是第一種方法,我會使用for循環嗎?

一切。您的數據集(您的案例中的算法)不是RDD,因此不會執行並行執行。

..還使用databricks spark和sklearn之間的集成Spark和scikit-learn?

article介紹如何隨機森林被實現有:

「的scikit學習包火花提供了一種替代實現,一個火花羣集上分配工作量交叉驗證算法中的每一個節點運行訓練算法使用scikit-learn庫的本地副本,並將最佳模型報告給主人。「

我們可以將其推廣到所有算法,這使您的方案合理。


星火MLlib代替scikit學習,將整個並行/分佈的照顧?

是的,它會。他們對這個圖書館的想法都是爲了照顧我們,讓我們的生活更輕鬆。


我會建議你在的時候問一個大問題,因爲現在的答案是過於寬泛,但我會盡量簡潔。

+0

非常感謝您的回答。與此相關「這意味着您的算法將分散在您的節點中,從那裏開始,每個算法都會執行。」你的意思是我在第二個圖像中說明了什麼(節點1爲決策樹,節點2爲隨機森林)?這是看到它的正確方法嗎? –

+1

@LarissaLeite,這取決於你的代碼是如何構造的和/或scikit如何在引擎蓋下工作。例如,如果您的算法是[DT,RF,NB]的列表,並且您有3個節點,那麼理想情況下,您可以將每個節點都視爲僅具有算法 - 然後該算法將在其節點上開發(例如DT將開始建設DT1,DT2等)。但是,這取決於很多因素,空間,羣集配置等。例如,如果您有2個節點,則DT和RF將在第一個(例如)和第二個NB上。希望有所幫助! =) – gsamaras

+0

是的,非常有幫助,謝謝!只有一件事我意識到:如果不是列出3個元素,是不是更好地直接使用[DT1,DT2,...,RF1,RF2,...,RFN,NB1 .. 。]?當然,在這種情況下,我需要手動執行網格搜索,但它似乎是並行化所有內容的最有效方式? –

相關問題