使用 scikit-learn 的多级并行化
Multiple levels of parallelization with scikit-learn
我在多核服务器上使用 scikit-learn 的 RandomForestClassifier 来适应大型数据集,因此我通过设置 n_jobs = -1
来利用其并行化功能。
同时,我想执行交叉验证(使用 cross_val_score)并利用其并行化功能(同样,通过设置 n_jobs = -1
)。
我的问题是使用两种类型的并行化是否会显着提高模型构建的速度,而不是仅使用单一类型并行化。如果后者是真的,那么我不确定我应该更喜欢哪种类型的并行化。 scikit-learn 文档和 SO 没有提供任何关于如何使这两种类型的并行化一起工作的想法。
请告诉我是否可以为您提供有关我的设置的更多信息,如果这有助于提供更有帮助的答案。谢谢!
不,只会使用一种类型的并行化。无法嵌套 joblib 调用。我认为将使用最外层的循环,即 cross_val_score
但我不确定。
实际上应该并行化哪个循环取决于您的设置。我可能会选择 RandomForestClassifier(n_jobs=-1) 并连续执行 cross_val_score。使用详细的 GridSearchCV,它也将很快让您对验证准确性有一些了解。
假设您并行执行 cross_val_score,与 CPUs 相比,您的折叠次数很少(比如 5 次折叠和 5 次 CPUs)。例如,如果您搜索最大深度,通常某些森林会比其他森林花费更短的时间。
然后快速森林将完成它们的工作,CPU 将空闲,而 "slow" 森林仍将进行训练。
我在多核服务器上使用 scikit-learn 的 RandomForestClassifier 来适应大型数据集,因此我通过设置 n_jobs = -1
来利用其并行化功能。
同时,我想执行交叉验证(使用 cross_val_score)并利用其并行化功能(同样,通过设置 n_jobs = -1
)。
我的问题是使用两种类型的并行化是否会显着提高模型构建的速度,而不是仅使用单一类型并行化。如果后者是真的,那么我不确定我应该更喜欢哪种类型的并行化。 scikit-learn 文档和 SO 没有提供任何关于如何使这两种类型的并行化一起工作的想法。
请告诉我是否可以为您提供有关我的设置的更多信息,如果这有助于提供更有帮助的答案。谢谢!
不,只会使用一种类型的并行化。无法嵌套 joblib 调用。我认为将使用最外层的循环,即 cross_val_score
但我不确定。
实际上应该并行化哪个循环取决于您的设置。我可能会选择 RandomForestClassifier(n_jobs=-1) 并连续执行 cross_val_score。使用详细的 GridSearchCV,它也将很快让您对验证准确性有一些了解。
假设您并行执行 cross_val_score,与 CPUs 相比,您的折叠次数很少(比如 5 次折叠和 5 次 CPUs)。例如,如果您搜索最大深度,通常某些森林会比其他森林花费更短的时间。 然后快速森林将完成它们的工作,CPU 将空闲,而 "slow" 森林仍将进行训练。