pythonscikit学习n_作业
这不是一个真正的问题,但我想了解:pythonscikit学习n_作业,python,parallel-processing,scikit-learn,joblib,Python,Parallel Processing,Scikit Learn,Joblib,这不是一个真正的问题,但我想了解: 在Win7 4核8 GB系统上运行sklearn from Anaconda distrib 在200.000个样本*200个值表上拟合KMeans模型 使用n-jobs=-1运行:(在脚本中添加if\uuuu name\uuuu='\uuu main\uuuu':行后)我看到脚本以 每个10条线。每个进程使用大约25%的CPU(总计: 100%). 似乎和预期的一样 在n-jobs=1的情况下运行:停留在一个进程上(这并不奇怪),有20个线程,并且还使用1
- 在Win7 4核8 GB系统上运行sklearn from Anaconda distrib
- 在200.000个样本*200个值表上拟合KMeans模型
- 使用n-jobs=-1运行:(在脚本中添加
行后)我看到脚本以 每个10条线。每个进程使用大约25%的CPU(总计: 100%). 似乎和预期的一样if\uuuu name\uuuu='\uuu main\uuuu':
- 在n-jobs=1的情况下运行:停留在一个进程上(这并不奇怪),有20个线程,并且还使用100%的CPU
- 如果库使用所有内核,那么使用n-jobs(和joblib)有什么意义
如果将n_作业指定为-1,则它不会使用所有内核。如果设置为1或2,它将只使用一个或两个内核(在Linux下测试完成scikit learn 0.20.3)。您应该使用
n_作业
或joblib
,不要同时使用这两个内核。说明:
此参数用于指定有多少个并发进程或
线程应该用于与joblib并行的例程
n_作业是一个整数,指定并发作业的最大数量
运营工人。如果给定1,则根本不使用joblib并行性,
这对调试很有用。如果设置为-1,则使用所有CPU。对于
使用-1以下的n个作业(n个CPU+1+n个作业)。例如
n_jobs=-2,使用除一个以外的所有CPU
n_jobs默认为None,表示未设置;通常是
解释为n_jobs=1,除非当前后端
上下文另有规定
有关joblib的使用及其与的交互的更多详细信息
scikit学习,请参考我们的
使用
n_jobs=1
时,它使用其中一个核心的100%cpu。每个进程都在不同的核心中运行。在有4个内核的linux中,我可以清楚地看到cpu的使用情况:(100%,~5%,~5%,~5%)
当我运行n_作业=1
和(100%,100%,100%,100%)
当运行n_作业=-1
时。每个进程100%使用给定的核心,但如果您有n_jobs=1
则只使用一个核心。感谢您的回复。同时,我还无法重现这种现象,所以我猜这是由于机器或笔记本状态中的“某些东西”造成的。有趣的是,我看到H2O(GBM)作为单个进程运行,在我的8核机器上使用了几乎700%的CPU。@Luengo但似乎OMP_NUM_线程在使用sklearn.linear_model.LassoCV(n_作业=-1)时也可以控制最大CPU%。。。你知道为什么吗?(据我所知,sklearn没有使用OpenMP)您能解释一下原因吗?