【发布时间】:2015-12-22 01:39:03
【问题描述】:
这不是一个真正的问题,但我想了解:
- 在 Win7 4 核 8 GB 系统上从 Anaconda 发行版运行 sklearn
- 在 200.000 个样本*200 个值的表上拟合 KMeans 模型。
- 以 n-jobs = -1 运行:(将
if __name__ == '__main__':行添加到我的脚本后)我看到脚本启动了 4 个进程 每个 10 个线程。每个进程使用大约 25% 的 CPU(总计: 100%)。似乎按预期工作 - 在 n-jobs = 1 的情况下运行:停留在单个进程上(不足为奇),有 20 个线程,并且还使用 100% 的 CPU。
我的问题:如果库仍然使用所有内核,那么使用 n-jobs(和 joblib)有什么意义?我错过了什么吗?它是特定于 Windows 的行为吗?
【问题讨论】:
-
与
n_jobs=1一起使用其中一个核心 100% 的cpu。每个进程都在不同的核心中运行。在 4 核的 linux 中,当我运行n_jobs=1和运行n_jobs=-1时,我可以清楚地看到 cpu 使用情况:(100%,~5%, ~5%, ~5%)和(100%, 100%, 100%, 100%)。每个进程占用给定核心的 100% 使用率,但如果您有n_jobs=1,则仅使用一个核心。 -
感谢您的回复。同时,我无法重现这种现象,所以我猜这可能是由于机器或笔记本状态中的“某些东西”造成的。
-
有趣的是,我看到 H2O (GBM) 作为单个进程运行,并且在我的 8 核机器上使用了几乎 700% 的 CPU。
-
@Luengo 但似乎 OMP_NUM_THREADS 在使用 sklearn.linear_model.LassoCV(n_jobs=-1) 时也可以控制最大 cpu% ...你知道为什么吗? (据我所知,sklearn 没有使用 OpenMP)
标签: python parallel-processing scikit-learn joblib