这不是一个真正的问题,但我想了解:
if __name__ == '__main__':行之后),我看到脚本启动了4个进程,每个进程有10个线程。每个进程大约使用CPU的25% (总数: 100%)。似乎像预期的那样起作用了我的问题是:如果库无论如何都使用所有内核,那么使用n作业(和joblib)又有什么意义呢?我是不是遗漏了什么?这是Windows特有的行为吗?
发布于 2019-03-21 19:02:14
如果您将n_jobs指定为-1,则它将使用所有核心。如果它被设置为1或2,它将只使用一个或两个核心(在Linux下测试已完成的scikit-学习0.20.3 )。
发布于 2020-06-01 12:16:38
文档说:
此参数用于指定应该使用多少并发进程或线程来处理与joblib并行的例程。 n_jobs是一个整数,指定并发运行的工作人员的最大数量。如果给定1,则根本不使用joblib并行性,这对于调试非常有用。如果设置为-1,则使用所有CPU。对于低于-1的n_jobs,使用(n_cpus +1+ n_jobs) .例如,对于n_jobs=-2,只使用一个CPU。 默认情况下,n_jobs是None,意思是unset;它通常将被解释为n_jobs=1,除非当前joblib.Parallel后端上下文另有规定。 要了解更多关于joblib的使用及其与scikit的交互的详细信息,请参阅我们的平行注释。
发布于 2020-01-23 09:15:16
您应该使用n_jobs或joblib,不要同时使用两者。
https://stackoverflow.com/questions/32761556
复制相似问题