Python scikit学习n_jobs

时间:2015-09-24 12:38:31

标签: python parallel-processing scikit-learn joblib

这不是一个真正的问题,但我想了解:

  • 在Win7 4核8 GB系统上运行来自Anaconda distrib的sklearn
  • 在200.000个样本* 200值表上拟合KMeans模型。
  • 使用n-jobs = -1运行:(在我的脚本中添加<style name="AlertDialogCustom" parent="Theme.AppCompat.Light.Dialog.Alert"> <item name="android:checkboxStyle">@style/CustomCheckBox</item> </style> <style name="CustomCheckBox" parent="android:style/Widget.CompoundButton.CheckBox"> <item name="android:button">@drawable/activated_checkbox</item> </style> 行后)我看到脚本启动4个进程 每个10个线程。每个进程使用大约25%的CPU(总计: 100%)。似乎按预期工作
  • 使用n-jobs = 1运行:使用20个线程保持单个进程(并不意外),并且还使用100%的CPU。

我的问题:如果图书馆使用所有核心,那么使用n-jobs(和joblib)有什么意义呢?我错过了什么吗?它是特定于Windows的行为吗?

3 个答案:

答案 0 :(得分:2)

documentation说:

此参数用于指定有多少个并发进程或 线程应用于与joblib并行化的例程。

n_jobs是一个整数,指定并发的最大数目 正在运行的工人。如果给定1,则完全不使用joblib并行性, 这对于调试很有用。如果设置为-1,则将使用所有CPU。对于 使用低于-1(n_cpus +1 + n_jobs)的n_jobs。例如与 n_jobs = -2,除一个以外的所有CPU都已使用。

n_jobs默认情况下为“无”,表示未设置;通常是 解释为n_jobs = 1,除非当前的joblib.Parallel后端 上下文另有规定。

有关joblib的使用及其与之交互的更多详细信息 scikit学习,请参阅我们的parallelism notes

答案 1 :(得分:0)

  • 如果库仍然使用所有内核,使用n-jobs(和joblib)有什么意义?

如果您将n_jobs指定为-1,则不会使用所有内核;如果将其设置为1或2,它将仅使用一个或两个内核(在Linux下测试scikit-learn 0.20.3)

答案 2 :(得分:0)

您应该使用n_jobsjoblib,请勿同时使用两者。