首页 > 解决方案 > 为什么使用 Python 并行处理 CPU 使用率较低?

问题描述

今天是我在 python 中应用并行性的第一天

我觉得我以前在标准处理上浪费了我的时间,因为显然 ML 在并行性上要快得多。

这是我构建的第一个示例

    xtrain, xval, ytrain, yval = train_test_split(X, y, test_size=0.2, random_state=1013)
    mdl = LogisticRegression()
    clf = OneVsRestClassifier(mdl)
    y_pred = cross_val_predict(clf, X, y, cv=3)

我只是添加 n_jobs=-1让它并行运行

所以变成了这样

    y_pred = cross_val_predict(clf, X, y, cv=3, n_jobs=-1)

我对并行与不并行进行了比较

没有并行性

该过程耗时0:02:14(2 分 14 秒)

当我查看 CPU 使用率时,它看起来像这样

在此处输入图像描述

具有并行性

该过程耗时 0:00:43(43 秒)

当我查看 CPU 使用率时,它看起来像这样

在此处输入图像描述

这清楚地表明,如果没有并行性,所有 CPU 中的 CPU 使用率都会更高

我的问题是为什么没有并行性在所有 CPU 中比并行性消耗更多的 CPU?

如果作业分布在所有 CPU 上,则应该有更多 CPU 处于忙碌状态

在没有并行性的情况下,只有一个 CPU 应该很忙,其余的则不那么忙!

这种行为的原因是什么?

另一个问题

我看到很多关于人们使用 joblib 和 dask 的例子。它太复杂了

使用 dask 和 joblib 是否比仅添加 n_jobs 提供更快的结果?

谢谢

标签: pythonparallel-processing

解决方案


根据我的经验:通过设置export OPENBLAS_NUM_THREADS=1,Maybe 可以在第一种情况下减少 CPU 使用率(没有并行性)。

问题可能是诸如 OpenBLAS 之类的库占用了大量的 CPU 使用率,但它们不会对整体性能造成重大影响。


推荐阅读