Scikit-learn释放Python GIL吗?

5 投票
2 回答
1902 浏览
提问于 2025-04-17 02:07

我想在不同的线程中训练多个单类支持向量机(SVM)。有没有人知道scikit的SVM是否会释放全局解释器锁(GIL)?我在网上没有找到相关的答案。

谢谢

2 个回答

4

一些sklearn库中的Cython类在性能关键的部分会释放全局解释器锁(GIL),比如决策树(例如在随机森林中使用的决策树),从0.15版本开始(预计在2014年初发布),还有libsvm的包装类也是这样。

不过,这并不是普遍的规则。如果你发现sklearn中有性能关键的Cython代码可以改进以释放GIL,欢迎你提交一个请求来进行修改。

5

不,scikit-learn 并没有对全局解释器锁(GIL)做什么特别的处理。它其实是用 joblib 来实现并行处理的,也就是说,它会启动多个进程来完成工作。你可以通过自定义 joblib 的 Parallel 结构来实现你想要的效果。

如果你打算在同一个数据集上训练多个分类器,并且想用不同的设置来找到最佳的分类器,可以考虑使用 GridSearchCV 类,它会为你处理并行的部分。

撰写回答