0

是否有一些方法可以在並行循環內運行sklearn(支持n_jobs參數)?當我嘗試運行與n_jobs> 1內multiprocessing.Pool sklearn功能,我已經得到了警告在並行池中運行n_jobs> 1的sklearn函數的簡單方法

UserWarning: Multiprocessing-backed parallel loops cannot be nested, setting n_jobs=1 
    for s in split_list(seeds, n_jobs)) 

所以確實存在着一些並行庫,它允許嵌套並行化?

回答

0

此警告來自joblibsklearn中使用的多處理庫。 它的並行機制依賴於multiprocessing.Pool,它使用daemonic工作人員無法產生子進程。

我沒有看到任何簡單的方法通過與sklearn通過此限制。 您可能想要手動創建和管理您的過程。 如果您知道自己在做什麼,則可以創建Process並使用它們以n_jobs > 1運行sklearn函數。
這意味着很多照顧管理過程,而不是一次全部運行。 不要讓它們變成daemonic也很重要。 例如:

def target(j): 
    from time import sleep 
    from sklearn.ensemble import RandomForestClassifier 
    rf = RandomForestClassifier(n_jobs=2) 
    rf.fit(np.random.random(size=(100, 100)), np.random.random(100)> .6) 
    print(j, 'done') 
pr = [mp.Process(target=target, args=(i,)) for i in range(10)];\ 
[p.start() for p in pr] 
[p.join() for p in pr] 

注意,所有的過程都同時運行,這可能導致比順序實現最差表現。

這就是說,他們沒有太多的用例,使用嵌套並行是一個好主意。 所有核心應該用於更多時間消耗的任務,其他任務依次運行。

相關問題