应用sklearn.Linear_model.LinearRegression时如何限制CPU使用率?

Dam*_*mon 6 python cpu-usage scikit-learn

我需要限制以下命令的 CPU 使用率,因为它使用了 100% 的 CPU。

    from sklearn.linear_model import LinearRegression
    model = LinearRegression(fit_intercept = True, n_jobs = 1)
    model.fit(df_x0, df_y0)
    model.predict(df_x1)
Run Code Online (Sandbox Code Playgroud)

我已经设置了n_jobs == 1,并且没有使用多处理,但它仍然使所有内核和df_y0. ndim == 1,我了解到n_jobs如果这样的话就不会有效。

谁能告诉我为什么它使用 100% 的 CPU,以及如何在 python 中解决这个问题?

Python 3.7、Linux。

Mar*_*rio 4

n_jobs=1使用其中一个核心 100% 的 CPU。每个进程都在不同的核心中运行,并且每个进程都占用给定核心的 100% 使用率。在4核的Linux中可以清楚地看到CPU的使用情况:

  • (100%,~5%, ~5%, ~5%)当它运行时n_jobs=1(如果指定n_jobs1,则仅使用一个核心)。

  • (100%, 100%, 100%, 100%)运行时n_jobs=-1(如果指定n_jobs-1 它将使用所有核心)。

另外,您可以根据他在 Linux 下使用 scikit-learn 0.20.3 进行的测试来检查 @kenlukas 的答案

更新:要满足对 Python (scikit-learn) 中的意外多线程 提出疑问的所有场景,请查看答案

如果您想动态设置线程数,而不是通过环境变量全局设置,例如:

import mkl
mkl.set_num_threads(2)
Run Code Online (Sandbox Code Playgroud)