所以我有一個輸入,它包含一個數據集和幾個使用scikit-learn的ML算法(帶參數調整)。我已經嘗試了很多嘗試,如何儘可能有效地執行此操作,但在此刻,我仍然沒有合適的基礎結構來評估我的結果。但是,我缺乏這方面的背景知識,我需要幫助才能解決問題。在Spark集羣中如何分配任務?
基本上我想知道如何以儘可能多地利用所有可用資源的方式分配任務,以及實際上隱式實現的內容(例如Spark)和不實現的內容。
我要培養多種不同的決策樹模型(多達所有可能的參數的組合),許多不同的隨機森林模型,等等...
在我的一種方法中,我有一個列表,它的每個元素對應一個ML算法及其參數列表。
spark.parallelize(algorithms).map(lambda algorihtm: run_experiment(dataframe, algorithm))
在這個函數run_experiment
我用於相應ML算法以其參數網格創建GridSearchCV
。我還設置了n_jobs=-1
以嘗試實現最大並行性。
在這種情況下,在我的Spark節點上有幾個節點,它的執行看起來有點像這樣嗎?
或者可以有一個決策樹模型,也是一個隨機森林模型在同一節點上運行?這是我使用集羣環境的第一次體驗,所以我對如何期望工作有些困惑。
在另一方面,究竟是什麼改變了在執行方面,如果不是與parallelize
第一種方法,我用的是for
循環通過我的算法列表順序迭代並創建GridSearchCV
使用databricks星火之間spark-sklearn整合scikit學習?它在文檔中說明的方式似乎是這樣的:
最後,關於第二種方法,使用相同的ML算法,而是與星火MLlib代替scikit學習,將全並行/分配需要照顧?
對不起,如果大部分這是有點幼稚,但我真的很感激任何答案或見解。我想在實際測試集羣並使用任務計劃參數進行測試之前瞭解基本知識。
我不知道這個問題是否更適合這裏或CS stackexchange。
非常感謝您的回答。與此相關「這意味着您的算法將分散在您的節點中,從那裏開始,每個算法都會執行。」你的意思是我在第二個圖像中說明了什麼(節點1爲決策樹,節點2爲隨機森林)?這是看到它的正確方法嗎? –
@LarissaLeite,這取決於你的代碼是如何構造的和/或scikit如何在引擎蓋下工作。例如,如果您的算法是[DT,RF,NB]的列表,並且您有3個節點,那麼理想情況下,您可以將每個節點都視爲僅具有算法 - 然後該算法將在其節點上開發(例如DT將開始建設DT1,DT2等)。但是,這取決於很多因素,空間,羣集配置等。例如,如果您有2個節點,則DT和RF將在第一個(例如)和第二個NB上。希望有所幫助! =) – gsamaras
是的,非常有幫助,謝謝!只有一件事我意識到:如果不是列出3個元素,是不是更好地直接使用[DT1,DT2,...,RF1,RF2,...,RFN,NB1 .. 。]?當然,在這種情況下,我需要手動執行網格搜索,但它似乎是並行化所有內容的最有效方式? –